Skip to content

Commit 99a34f4

Browse files
committed
fix: don't join syntactically different DiffNodes
1 parent f4e6850 commit 99a34f4

13 files changed

Lines changed: 102 additions & 69 deletions

src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,11 @@ public VariationTreeAdapter(VariationNode<?, L> node) {
3232
this.backingNode = node;
3333
this.metadata = new LinkedHashMap<>();
3434

35-
if (backingNode.isConditionalAnnotation()) {
36-
cachedLabel = backingNode.getFormula().toString();
37-
} else {
38-
cachedLabel =
39-
Stream.concat(
40-
backingNode.getLabel().getLines().stream(),
41-
backingNode.getLabel().getTrailingLines().stream()
42-
).collect(Collectors.joining("\n"));
43-
}
35+
cachedLabel =
36+
Stream.concat(
37+
backingNode.getLabel().getLines().stream(),
38+
backingNode.getLabel().getTrailingLines().stream()
39+
).collect(Collectors.joining("\n"));
4440

4541
var children = new ArrayList<Tree>(node.getChildren().size());
4642
for (var child : node.getChildren()) {

src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,11 @@ public static <L extends Label> DiffNode<L> improveMatching(DiffNode<L> tree, Ma
217217
afterNode.split(BEFORE);
218218
}
219219

220-
beforeNode.join(afterNode, (beforeLabel, afterLabel) -> beforeLabel);
220+
beforeNode.join(afterNode, (beforeLabel, afterLabel) -> {
221+
Assert.assertEquals(beforeLabel.getLines(), afterLabel.getLines());
222+
Assert.assertEquals(beforeLabel.getTrailingLines(), afterLabel.getTrailingLines());
223+
return beforeLabel;
224+
});
221225
}
222226

223227
Assert.assertTrue(beforeNode.isNon());
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 1, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line A
44
v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line B
5-
v 322 ADD;ELIF;(old: -1, diff: 4, new: 3);(old: -1, diff: 4, new: 5);B;#elif B
6-
e 144 80 ba;0,0
7-
e 211 144 ba;0,0
8-
e 275 144 b;1,-1
9-
e 322 144 a;-1,1
10-
e 275 322 a;-1,0
5+
v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 3);defined(A);#ifdef A
6+
v 386 ADD;ELIF;(old: -1, diff: 5, new: 3);(old: -1, diff: 5, new: 5);B;#elif B
7+
e 136 80 b;0,-1
8+
e 320 80 a;-1,0
9+
e 211 136 b;0,-1
10+
e 275 136 b;1,-1
11+
e 211 320 a;-1,0
12+
e 386 320 a;-1,1
13+
e 275 386 a;-1,0
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 1, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line A
44
v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line B
5-
v 322 ADD;ELIF;(old: -1, diff: 4, new: 3);(old: -1, diff: 4, new: 5);B;#elif B
6-
e 144 80 ba;0,0
7-
e 211 144 ba;0,0
8-
e 275 144 b;1,-1
9-
e 322 144 a;-1,1
10-
e 275 322 a;-1,0
5+
v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 3);defined(A);#ifdef A
6+
v 386 ADD;ELIF;(old: -1, diff: 5, new: 3);(old: -1, diff: 5, new: 5);B;#elif B
7+
e 136 80 b;0,-1
8+
e 320 80 a;-1,0
9+
e 211 136 b;0,-1
10+
e 275 136 b;1,-1
11+
e 211 320 a;-1,0
12+
e 386 320 a;-1,1
13+
e 275 386 a;-1,0
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A
44
v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B
5+
v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A
56
v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B
6-
e 144 16 ba;0,0
7-
e 211 144 ba;0,0
8-
e 339 144 b;1,-1
9-
e 258 144 a;-1,1
7+
e 136 16 b;0,-1
8+
e 128 16 a;-1,0
9+
e 211 136 b;0,-1
10+
e 339 136 b;1,-1
11+
e 211 128 a;-1,0
12+
e 258 128 a;-1,1
1013
e 339 258 a;-1,0
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A
44
v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B
5+
v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A
56
v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B
6-
e 144 16 ba;0,0
7-
e 211 144 ba;0,0
8-
e 339 144 b;1,-1
9-
e 258 144 a;-1,1
7+
e 136 16 b;0,-1
8+
e 128 16 a;-1,0
9+
e 211 136 b;0,-1
10+
e 339 136 b;1,-1
11+
e 211 128 a;-1,0
12+
e 258 128 a;-1,1
1013
e 339 258 a;-1,0
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A
44
v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B
5+
v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A
56
v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B
6-
e 144 16 ba;0,0
7-
e 211 144 ba;0,0
8-
e 339 144 b;1,-1
9-
e 258 144 a;-1,1
7+
e 136 16 b;0,-1
8+
e 128 16 a;-1,0
9+
e 211 136 b;0,-1
10+
e 339 136 b;1,-1
11+
e 211 128 a;-1,0
12+
e 258 128 a;-1,1
1013
e 339 258 a;-1,0
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A
44
v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B
5+
v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A
56
v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B
6-
e 144 16 ba;0,0
7-
e 211 144 ba;0,0
8-
e 339 144 b;1,-1
9-
e 258 144 a;-1,1
7+
e 136 16 b;0,-1
8+
e 128 16 a;-1,0
9+
e 211 136 b;0,-1
10+
e 339 136 b;1,-1
11+
e 211 128 a;-1,0
12+
e 258 128 a;-1,1
1013
e 339 258 a;-1,0
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A
44
v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B
5+
v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A
56
v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B
6-
e 144 16 ba;0,0
7-
e 211 144 ba;0,0
8-
e 339 144 b;1,-1
9-
e 258 144 a;-1,1
7+
e 136 16 b;0,-1
8+
e 128 16 a;-1,0
9+
e 211 136 b;0,-1
10+
e 339 136 b;1,-1
11+
e 211 128 a;-1,0
12+
e 258 128 a;-1,1
1013
e 339 258 a;-1,0
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True
2-
v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
2+
v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A
33
v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A
44
v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B
5+
v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A
56
v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B
6-
e 144 16 ba;0,0
7-
e 211 144 ba;0,0
8-
e 339 144 b;1,-1
9-
e 258 144 a;-1,1
7+
e 136 16 b;0,-1
8+
e 128 16 a;-1,0
9+
e 211 136 b;0,-1
10+
e 339 136 b;1,-1
11+
e 211 128 a;-1,0
12+
e 258 128 a;-1,1
1013
e 339 258 a;-1,0

0 commit comments

Comments
 (0)