@@ -225,89 +225,89 @@ public List<DiffRow> generateDiffRows(final List<String> original, Patch<String>
225
225
int endPos = 0 ;
226
226
final List <AbstractDelta <String >> deltaList = patch .getDeltas ();
227
227
228
- decompressDeltas (deltaList );
228
+ for (AbstractDelta <String > originalDelta : deltaList ) {
229
+ for (AbstractDelta <String > delta : decompressDeltas (originalDelta )) {
230
+ endPos = transformDeltaIntoDiffRow (original , endPos , diffRows , delta );
231
+ }
232
+ }
229
233
230
- for (AbstractDelta <String > delta : deltaList ) {
231
- Chunk <String > orig = delta .getSource ();
232
- Chunk <String > rev = delta .getTarget ();
234
+ // Copy the final matching chunk if any.
235
+ for (String line : original .subList (endPos , original .size ())) {
236
+ diffRows .add (buildDiffRow (Tag .EQUAL , line , line ));
237
+ }
238
+ return diffRows ;
239
+ }
233
240
234
- for (String line : original .subList (endPos , orig .getPosition ())) {
235
- diffRows .add (buildDiffRow (Tag .EQUAL , line , line ));
236
- }
241
+ /**
242
+ * Transforms one patch delta into a DiffRow object.
243
+ */
244
+ private int transformDeltaIntoDiffRow (final List <String > original , int endPos , List <DiffRow > diffRows , AbstractDelta <String > delta ) {
245
+ Chunk <String > orig = delta .getSource ();
246
+ Chunk <String > rev = delta .getTarget ();
247
+
248
+ for (String line : original .subList (endPos , orig .getPosition ())) {
249
+ diffRows .add (buildDiffRow (Tag .EQUAL , line , line ));
250
+ }
237
251
238
- // Inserted DiffRow
239
- if (delta .getType () == DeltaType .INSERT ) {
240
- endPos = orig .last () + 1 ;
252
+ switch (delta .getType ()) {
253
+ case INSERT :
241
254
for (String line : rev .getLines ()) {
242
255
diffRows .add (buildDiffRow (Tag .INSERT , "" , line ));
243
256
}
244
- continue ;
245
- }
246
-
247
- // Deleted DiffRow
248
- if (delta .getType () == DeltaType .DELETE ) {
249
- endPos = orig .last () + 1 ;
257
+ break ;
258
+ case DELETE :
250
259
for (String line : orig .getLines ()) {
251
260
diffRows .add (buildDiffRow (Tag .DELETE , line , "" ));
252
261
}
253
- continue ;
254
- }
255
-
256
- if ( showInlineDiffs ) {
257
- diffRows . addAll ( generateInlineDiffs ( delta ));
258
- } else {
259
- for ( int j = 0 ; j < Math . max ( orig . size (), rev . size ()); j ++) {
260
- diffRows . add ( buildDiffRow ( Tag . CHANGE ,
261
- orig .getLines ().size () > j ? orig .getLines ().get (j ) : "" ,
262
- rev . getLines (). size () > j ? rev . getLines (). get ( j ) : "" ));
262
+ break ;
263
+ default :
264
+ if ( showInlineDiffs ) {
265
+ diffRows . addAll ( generateInlineDiffs ( delta ));
266
+ } else {
267
+ for ( int j = 0 ; j < Math . max ( orig . size (), rev . size ()); j ++) {
268
+ diffRows . add ( buildDiffRow ( Tag . CHANGE ,
269
+ orig . getLines (). size () > j ? orig . getLines (). get ( j ) : "" ,
270
+ rev .getLines ().size () > j ? rev .getLines ().get (j ) : "" ));
271
+ }
263
272
}
264
- }
265
- endPos = orig .last () + 1 ;
266
273
}
267
274
268
- // Copy the final matching chunk if any.
269
- for (String line : original .subList (endPos , original .size ())) {
270
- diffRows .add (buildDiffRow (Tag .EQUAL , line , line ));
271
- }
272
- return diffRows ;
275
+ return orig .last () + 1 ;
273
276
}
274
277
275
278
/**
276
- * Decompresses ChangeDeltas with different source and target size to a ChangeDelta with same size and
277
- * a following InsertDelta or DeleteDelta. With this problems of building DiffRows getting smaller.
278
- * @param deltaList
279
+ * Decompresses ChangeDeltas with different source and target size to a
280
+ * ChangeDelta with same size and a following InsertDelta or DeleteDelta.
281
+ * With this problems of building DiffRows getting smaller.
282
+ *
283
+ * @param deltaList
279
284
*/
280
- private void decompressDeltas (final List <AbstractDelta <String >> deltaList ) {
281
- for (int idx = 0 ; idx < deltaList .size (); idx ++) {
282
- AbstractDelta <String > delta = deltaList .get (idx );
283
- if (delta .getType () == DeltaType .CHANGE && delta .getSource ().size () != delta .getTarget ().size ()) {
284
- //System.out.println("decompress this " + delta);
285
-
286
- List <AbstractDelta <String >> corrected = new ArrayList <>();
287
- int minSize = Math .min (delta .getSource ().size (), delta .getTarget ().size ());
288
- Chunk <String > orig = delta .getSource ();
289
- Chunk <String > rev = delta .getTarget ();
290
-
291
- deltaList .set (idx , new ChangeDelta <String >(
292
- new Chunk <>(orig .getPosition (), orig .getLines ().subList (0 , minSize )),
293
- new Chunk <>(rev .getPosition (), rev .getLines ().subList (0 , minSize ))));
294
-
295
- if (orig .getLines ().size () < rev .getLines ().size ()) {
296
- deltaList .add (idx + 1 , new InsertDelta <String >(
297
- new Chunk <>(orig .getPosition () + minSize , Collections .emptyList ()),
298
- new Chunk <>(rev .getPosition () + minSize , rev .getLines ().subList (minSize , rev .getLines ().size ()))));
299
- } else {
300
- deltaList .add (idx + 1 , new DeleteDelta <String >(
301
- new Chunk <>(orig .getPosition () + minSize , orig .getLines ().subList (minSize , orig .getLines ().size ())),
302
- new Chunk <>(rev .getPosition () + minSize , Collections .emptyList ())));
303
- }
304
-
305
- //System.out.println(" to " + corrected);
285
+ private List <AbstractDelta <String >> decompressDeltas (AbstractDelta <String > delta ) {
286
+ if (delta .getType () == DeltaType .CHANGE && delta .getSource ().size () != delta .getTarget ().size ()) {
287
+ List <AbstractDelta <String >> deltas = new ArrayList <>();
288
+ //System.out.println("decompress this " + delta);
289
+
290
+ int minSize = Math .min (delta .getSource ().size (), delta .getTarget ().size ());
291
+ Chunk <String > orig = delta .getSource ();
292
+ Chunk <String > rev = delta .getTarget ();
293
+
294
+ deltas .add (new ChangeDelta <String >(
295
+ new Chunk <>(orig .getPosition (), orig .getLines ().subList (0 , minSize )),
296
+ new Chunk <>(rev .getPosition (), rev .getLines ().subList (0 , minSize ))));
297
+
298
+ if (orig .getLines ().size () < rev .getLines ().size ()) {
299
+ deltas .add (new InsertDelta <String >(
300
+ new Chunk <>(orig .getPosition () + minSize , Collections .emptyList ()),
301
+ new Chunk <>(rev .getPosition () + minSize , rev .getLines ().subList (minSize , rev .getLines ().size ()))));
302
+ } else {
303
+ deltas .add (new DeleteDelta <String >(
304
+ new Chunk <>(orig .getPosition () + minSize , orig .getLines ().subList (minSize , orig .getLines ().size ())),
305
+ new Chunk <>(rev .getPosition () + minSize , Collections .emptyList ())));
306
306
}
307
- idx ++ ;
307
+ return deltas ;
308
308
}
309
-
310
- //System.out.println("got now " + deltaList );
309
+
310
+ return Collections . singletonList ( delta );
311
311
}
312
312
313
313
private DiffRow buildDiffRow (Tag type , String orgline , String newline ) {
0 commit comments