Skip to content

Commit 2b4a44c

Browse files
committed
Ensure the uniqueness of DiffNode.getID
Given the diff (without modifications) ```diff #ifdef A Code #endif ``` The ID of the root node and the `#ifdef A` node computed the same ID. For ensuring the uniqueness of the root node ID its line number is set to `DiffLineNumber.Invalid` (for consistency both start and end are changed).
1 parent 3f44bac commit 2b4a44c

3 files changed

Lines changed: 5 additions & 6 deletions

File tree

src/main/java/org/variantsync/diffdetective/diff/difftree/DiffNode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static DiffNode createRoot() {
111111
return new DiffNode(
112112
DiffType.NON,
113113
NodeType.IF,
114-
new DiffLineNumber(1, 1, 1),
114+
DiffLineNumber.Invalid(),
115115
DiffLineNumber.Invalid(),
116116
FixTrueFalse.True,
117117
new ArrayList<>()
@@ -982,6 +982,7 @@ public boolean isAnnotation() {
982982
* {@code 2^26}, this id will no longer be unique.
983983
*/
984984
public int getID() {
985+
// Add one to ensure invalid (negative) line numbers don't cause issues.
985986
int lineNumber = 1 + from.inDiff;
986987
Assert.assertTrue((lineNumber << 2*ID_OFFSET) >> 2*ID_OFFSET == lineNumber);
987988

src/main/java/org/variantsync/diffdetective/diff/difftree/parse/DiffTreeParser.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,6 @@ public static DiffResult<DiffTree> createDiffTree(
195195
lastArtifact = endCodeBlock(lastArtifact, lineNo);
196196
}
197197

198-
endCodeBlock(root, lineNo);
199-
200198
// Invalidate line numbers according to edits.
201199
// E.g. if a node was added, it had no line number before the edit.
202200
for (final DiffNode node : nodes) {

src/test/java/TestLineNumbers.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void initTestCases() {
2222
// Testcases rely on stability of IDs
2323

2424
final var elifchain_map = new HashMap<Integer, Pair<DiffLineNumber, DiffLineNumber>>();
25-
elifchain_map.put(144, new Pair<>(new DiffLineNumber(1, 1, 1), new DiffLineNumber(11, 9, 10)));
25+
elifchain_map.put(16, new Pair<>(DiffLineNumber.Invalid(), DiffLineNumber.Invalid()));
2626
elifchain_map.put(147, new Pair<>(new DiffLineNumber(1, 1, 1), new DiffLineNumber(2, 2, 2)));
2727
elifchain_map.put(208, new Pair<>(new DiffLineNumber(2, 2, 2), new DiffLineNumber(4, 4, 4)));
2828
elifchain_map.put(275, new Pair<>(new DiffLineNumber(3, 3, 3), new DiffLineNumber(4, 4, 4)));
@@ -35,7 +35,7 @@ public void initTestCases() {
3535
TestCase elifchain = new TestCase("elifchain.txt", elifchain_map);
3636

3737
final var lineno1_map = new HashMap<Integer, Pair<DiffLineNumber, DiffLineNumber>>();
38-
lineno1_map.put(144, new Pair<>(new DiffLineNumber(1, 1, 1), new DiffLineNumber(17, 14, 12)));
38+
lineno1_map.put(16, new Pair<>(DiffLineNumber.Invalid(), DiffLineNumber.Invalid()));
3939
lineno1_map.put(147, new Pair<>(new DiffLineNumber(1, 1, 1), new DiffLineNumber(2, 2, 2)));
4040
lineno1_map.put(208, new Pair<>(new DiffLineNumber(2, 2, 2), new DiffLineNumber(4, 4, 4)));
4141
lineno1_map.put(275, new Pair<>(new DiffLineNumber(3, 3, 3), new DiffLineNumber(4, 4, 4)));
@@ -51,7 +51,7 @@ public void initTestCases() {
5151
TestCase lineno1 = new TestCase("lineno1.txt", lineno1_map);
5252

5353
final var deleteMLM_map = new HashMap<Integer, Pair<DiffLineNumber, DiffLineNumber>>();
54-
deleteMLM_map.put(144, new Pair<>(new DiffLineNumber(1, 1, 1), new DiffLineNumber(5, 5, 1)));
54+
deleteMLM_map.put(16, new Pair<>(DiffLineNumber.Invalid(), DiffLineNumber.Invalid()));
5555
deleteMLM_map.put(136, new Pair<>(new DiffLineNumber(1, 1, -1), new DiffLineNumber(4, 4, -1)));
5656
deleteMLM_map.put(267, new Pair<>(new DiffLineNumber(3, 3, -1), new DiffLineNumber(4, 4, -1)));
5757
TestCase deleteMLM = new TestCase("deleteMLM.txt", deleteMLM_map);

0 commit comments

Comments
 (0)