@@ -71,6 +71,11 @@ public class DiffRowGenerator {
71
71
public boolean equals (String original , String revised ) {
72
72
return Objects .equals (original , revised );
73
73
}
74
+
75
+ @ Override
76
+ public boolean skip (String original ) {
77
+ return false ;
78
+ }
74
79
});
75
80
76
81
private final boolean showInlineDiffs ;
@@ -331,6 +336,9 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
331
336
int orgEndPos = 0 ;
332
337
int revEndPos = 0 ;
333
338
final List <Delta <String >> deltaList = patch .getDeltas ();
339
+
340
+ Equalizer <String > equalizer = diffAlgorithm .getEqualizer ();
341
+
334
342
for (int i = 0 ; i < deltaList .size (); i ++) {
335
343
Delta <String > delta = deltaList .get (i );
336
344
Chunk <String > orig = delta .getOriginal ();
@@ -345,14 +353,19 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
345
353
rev .setLines (StringUtills .wrapText (rev .getLines (), this .columnWidth ));
346
354
}
347
355
// catch the equal prefix for each chunk
348
- copyEqualsLines (diffRows , original , orgEndPos , orig .getPosition (), revised , revEndPos , rev .getPosition ());
356
+ copyEqualsLines (equalizer , diffRows , original , orgEndPos , orig .getPosition (), revised , revEndPos ,
357
+ rev .getPosition ());
349
358
350
359
// Inserted DiffRow
351
360
if (delta .getClass () == InsertDelta .class ) {
352
361
orgEndPos = orig .last () + 1 ;
353
362
revEndPos = rev .last () + 1 ;
354
363
for (String line : rev .getLines ()) {
355
- diffRows .add (new DiffRow (Tag .INSERT , defaultString , line ));
364
+ if (equalizer .skip (line )) {
365
+ diffRows .add (new DiffRow (Tag .SKIP , defaultString , line ));
366
+ } else {
367
+ diffRows .add (new DiffRow (Tag .INSERT , defaultString , line ));
368
+ }
356
369
}
357
370
continue ;
358
371
}
@@ -362,7 +375,11 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
362
375
orgEndPos = orig .last () + 1 ;
363
376
revEndPos = rev .last () + 1 ;
364
377
for (String line : orig .getLines ()) {
365
- diffRows .add (new DiffRow (Tag .DELETE , line , defaultString ));
378
+ if (equalizer .skip (line )) {
379
+ diffRows .add (new DiffRow (Tag .SKIP , line , defaultString ));
380
+ } else {
381
+ diffRows .add (new DiffRow (Tag .DELETE , line , defaultString ));
382
+ }
366
383
}
367
384
continue ;
368
385
}
@@ -373,30 +390,49 @@ public List<DiffRow> generateDiffRows(List<String> original, List<String> revise
373
390
// the changed size is match
374
391
if (orig .size () == rev .size ()) {
375
392
for (int j = 0 ; j < orig .size (); j ++) {
376
- diffRows . add ( new DiffRow ( Tag . CHANGE , orig .getLines ().get (j ), rev .getLines ().get (j )) );
393
+ addChangeDiffRow ( equalizer , diffRows , orig .getLines ().get (j ), rev .getLines ().get (j ), defaultString );
377
394
}
378
395
} else if (orig .size () > rev .size ()) {
379
396
for (int j = 0 ; j < orig .size (); j ++) {
380
- diffRows .add (new DiffRow (Tag .CHANGE , orig .getLines ().get (j ),
381
- rev .getLines ().size () > j ? (String ) rev .getLines ().get (j ) : defaultString ));
397
+ final String orgLine = orig .getLines ().get (j );
398
+ final String revLine = rev .getLines ().size () > j ? rev .getLines ().get (j ) : defaultString ;
399
+ addChangeDiffRow (equalizer , diffRows , orgLine , revLine , defaultString );
382
400
}
383
401
} else {
384
402
for (int j = 0 ; j < rev .size (); j ++) {
385
- diffRows .add (new DiffRow (Tag .CHANGE , orig .getLines ().size () > j ? orig .getLines ().get (j )
386
- : defaultString , rev .getLines ().get (j )));
403
+ final String orgLine = orig .getLines ().size () > j ? orig .getLines ().get (j ) : defaultString ;
404
+ final String revLine = rev .getLines ().get (j );
405
+ addChangeDiffRow (equalizer , diffRows , orgLine , revLine , defaultString );
387
406
}
388
407
}
389
408
orgEndPos = orig .last () + 1 ;
390
409
revEndPos = rev .last () + 1 ;
391
410
}
392
411
393
412
// Copy the final matching chunk if any.
394
- copyEqualsLines (diffRows , original , orgEndPos , original .size (), revised , revEndPos , revised .size ());
413
+ copyEqualsLines (equalizer , diffRows , original , orgEndPos , original .size (), revised , revEndPos , revised .size ());
395
414
return diffRows ;
396
415
}
397
416
398
- protected void copyEqualsLines (List <DiffRow > diffRows , List <String > original , int originalStartPos ,
399
- int originalEndPos , List <String > revised , int revisedStartPos , int revisedEndPos ) {
417
+ private static final void addChangeDiffRow (Equalizer <String > equalizer , List <DiffRow > diffRows , String orgLine ,
418
+ String revLine , String defaultString ) {
419
+ boolean skipOrg = equalizer .skip (orgLine );
420
+ boolean skipRev = equalizer .skip (revLine );
421
+ if (skipOrg && skipRev ) {
422
+ diffRows .add (new DiffRow (Tag .SKIP , orgLine , revLine ));
423
+ } else if (skipOrg ) {
424
+ diffRows .add (new DiffRow (Tag .SKIP , orgLine , defaultString ));
425
+ diffRows .add (new DiffRow (Tag .CHANGE , defaultString , revLine ));
426
+ } else if (skipRev ) {
427
+ diffRows .add (new DiffRow (Tag .CHANGE , orgLine , defaultString ));
428
+ diffRows .add (new DiffRow (Tag .SKIP , defaultString , revLine ));
429
+ } else {
430
+ diffRows .add (new DiffRow (Tag .CHANGE , orgLine , revLine ));
431
+ }
432
+ }
433
+
434
+ protected void copyEqualsLines (Equalizer <String > equalizer , List <DiffRow > diffRows , List <String > original ,
435
+ int originalStartPos , int originalEndPos , List <String > revised , int revisedStartPos , int revisedEndPos ) {
400
436
String [][] lines = new String [originalEndPos - originalStartPos ][2 ];
401
437
int idx = 0 ;
402
438
for (String line : original .subList (originalStartPos , originalEndPos )) {
@@ -407,7 +443,13 @@ protected void copyEqualsLines(List<DiffRow> diffRows, List<String> original, in
407
443
lines [idx ++][1 ] = line ;
408
444
}
409
445
for (String [] line : lines ) {
410
- diffRows .add (new DiffRow (Tag .EQUAL , line [0 ], line [1 ]));
446
+ String orgLine = line [0 ];
447
+ String revLine = line [1 ];
448
+ if (equalizer .skip (orgLine ) && equalizer .skip (revLine )) {
449
+ diffRows .add (new DiffRow (Tag .SKIP , orgLine , revLine ));
450
+ } else {
451
+ diffRows .add (new DiffRow (Tag .EQUAL , orgLine , revLine ));
452
+ }
411
453
}
412
454
}
413
455
0 commit comments