@@ -77,56 +77,56 @@ private static Set<DiffNode<DiffLinesLabel>> findRootsOfSubtrees(Set<DiffNode<Di
7777 return subtreeRoots ;
7878 }
7979
80+ private static DiffNode <DiffLinesLabel > getChildFromListIfIndexInRange (List <DiffNode <DiffLinesLabel >> childrenList , int index ) {
81+ if (index >= 0 && index < childrenList .size ()) {
82+ return childrenList .get (index );
83+ }
84+ return null ;
85+ }
86+
8087 private static boolean checkNeighbors (Time time , DiffNode <DiffLinesLabel > root ,
8188 DiffNode <DiffLinesLabel > targetNodeInPatch , DiffNode <DiffLinesLabel > node ) {
8289
83- DiffNode <DiffLinesLabel > neighborBeforeTarget = null ;
84- DiffNode <DiffLinesLabel > neighborAfterTarget = null ;
85- DiffNode <DiffLinesLabel > neighborBeforeSource = null ;
86- DiffNode <DiffLinesLabel > neighborAfterSource = null ;
87- boolean correctBefore = false ;
88- boolean correctAfter = false ;
8990 List <DiffNode <DiffLinesLabel >> orderedChildrenTarget = targetNodeInPatch .getChildOrder (time );
90- if (orderedChildrenTarget .contains (node )) {
91- int indexTarget = orderedChildrenTarget .indexOf (node );
92- if ((indexTarget - 1 ) >= 0 ) {
93- neighborBeforeTarget = orderedChildrenTarget .get (indexTarget - 1 );
94- }
95- if ((indexTarget + 1 ) < orderedChildrenTarget .size ()) {
96- neighborAfterTarget = orderedChildrenTarget .get (indexTarget + 1 );
97- }
98- List <DiffNode <DiffLinesLabel >> orderedChildrenSource = root .getParent (time ).getChildOrder (time );
99- int indexSource = orderedChildrenSource .indexOf (root );
100- if ((indexSource - 1 ) >= 0 ) {
101- neighborBeforeSource = orderedChildrenSource .get (indexSource - 1 );
102- }
103- if ((indexSource + 1 ) < orderedChildrenTarget .size ()) {
104- neighborAfterSource = orderedChildrenSource .get (indexSource + 1 );
105- }
106- if ((neighborBeforeSource != null && neighborBeforeTarget == null ) || (neighborBeforeSource == null && neighborBeforeTarget != null )) {
107- System .out .println ("Different neighbors" );
108- } else if (neighborBeforeSource != null && neighborBeforeTarget != null ) {
109- if (Patching .isSameAs (neighborBeforeSource , neighborBeforeTarget , time )) {
110- System .out .println ("Same neighbor before" );
111- correctBefore = true ;
112- }
113- } else {
114- System .out .println ("No neighbor before" );
115- correctBefore = true ;
116- }
117- if ((neighborAfterSource != null && neighborAfterTarget == null ) || (neighborAfterSource == null && neighborAfterTarget != null )) {
118- System .out .println ("Different neighbors" );
119- } else if (neighborAfterSource != null && neighborAfterTarget != null ) {
120- if (Patching .isSameAs (neighborAfterSource , neighborAfterTarget , time )) {
121- System .out .println ("Same neighbor after" );
122- correctAfter = true ;
123- }
124- } else {
125- System .out .println ("No neighbor after" );
126- correctAfter = true ;
91+ if (!orderedChildrenTarget .contains (node )) {
92+ // TODO: throw exception
93+ return false ;
94+ }
95+ int indexTarget = orderedChildrenTarget .indexOf (node );
96+ DiffNode <DiffLinesLabel > neighborBeforeTarget = getChildFromListIfIndexInRange (orderedChildrenTarget , indexTarget - 1 );
97+ DiffNode <DiffLinesLabel > neighborAfterTarget = getChildFromListIfIndexInRange (orderedChildrenTarget , indexTarget + 1 );
98+
99+ List <DiffNode <DiffLinesLabel >> orderedChildrenSource = root .getParent (time ).getChildOrder (time );
100+ int indexSource = orderedChildrenSource .indexOf (root );
101+ DiffNode <DiffLinesLabel > neighborBeforeSource = getChildFromListIfIndexInRange (orderedChildrenSource , indexSource - 1 );
102+ DiffNode <DiffLinesLabel > neighborAfterSource = getChildFromListIfIndexInRange (orderedChildrenSource , indexSource + 1 );
103+
104+ if ((neighborBeforeSource != null && neighborBeforeTarget == null ) || (neighborBeforeSource == null && neighborBeforeTarget != null )) {
105+ System .out .println ("Different neighbors before" );
106+ return false ;
107+ }
108+ if (neighborBeforeSource != null && neighborBeforeTarget != null ) {
109+ if (!Patching .isSameAs (neighborBeforeSource , neighborBeforeTarget , time )) {
110+ System .out .println ("Different neighbor before" );
111+ return false ;
127112 }
128113 }
129- return correctBefore && correctAfter ;
114+ // neighborBeforeSource isSameAs neighborBeforeTarget OR both are null (no neighbor before)
115+
116+ if ((neighborAfterSource != null && neighborAfterTarget == null ) || (neighborAfterSource == null && neighborAfterTarget != null )) {
117+ System .out .println ("Different neighbors after" );
118+ return false ;
119+ }
120+ if (neighborAfterSource != null && neighborAfterTarget != null ) {
121+ if (!Patching .isSameAs (neighborAfterSource , neighborAfterTarget , time )) {
122+ System .out .println ("Different neighbors after" );
123+ return false ;
124+ }
125+ }
126+ // neighborAfterSource isSameAs neighborAfterTarget OR both are null (no neighbor after)
127+
128+ return true ;
129+
130130 }
131131
132132 private static List <Integer > findInsertPositions (Time time , DiffNode <DiffLinesLabel > root ,
@@ -283,8 +283,8 @@ private static VariationTree<DiffLinesLabel> parseVariationTreeFromFile(String f
283283 }
284284
285285 public static void main (String [] args ) {
286- patchVariationTrees (parseVariationTreeFromFile ("exampleA1Add.cpp" ), parseVariationTreeFromFile ("exampleA2Add.cpp" ), parseVariationTreeFromFile ("exampleBAdd.cpp" ));
287- // patchVariationTrees(parseVariationTreeFromFile("exampleA1Rem.cpp"), parseVariationTreeFromFile("exampleA2Rem.cpp"), parseVariationTreeFromFile("exampleBRem.cpp"));
286+ // patchVariationTrees(parseVariationTreeFromFile("exampleA1Add.cpp"), parseVariationTreeFromFile("exampleA2Add.cpp"), parseVariationTreeFromFile("exampleBAdd.cpp"));
287+ patchVariationTrees (parseVariationTreeFromFile ("exampleA1Rem.cpp" ), parseVariationTreeFromFile ("exampleA2Rem.cpp" ), parseVariationTreeFromFile ("exampleBRem.cpp" ));
288288 }
289289
290290}
0 commit comments