< prev index next >

webrev/src/main/java/org/openjdk/skara/webrev/HunkCoalescer.java

Print this page

131 class HunkCoalescer {
132     private final int numContextLines;
133     private final List<String> sourceContent;
134     private final List<String> destContent;
135 
136     public HunkCoalescer(int numContextLines, List<String> sourceContent, List<String> destContent) {
137         this.numContextLines = numContextLines;
138         this.sourceContent = sourceContent;
139         this.destContent = destContent;
140     }
141 
142     public List<Hunk> nextGroup(LinkedList<Hunk> hunks) {
143         var hunksInRange = new ArrayList<Hunk>();
144         hunksInRange.add(hunks.removeFirst());
145 
146         while (!hunks.isEmpty()) {
147             var next = hunks.peekFirst();
148             var last = hunksInRange.get(hunksInRange.size() - 1);
149             var destEnd = last.target().range().end() + numContextLines;
150             var sourceEnd = last.source().range().end() + numContextLines;
151             if (sourceEnd >= next.source().range().start() ||
152                   destEnd >= next.target().range().start()) {


153                 hunksInRange.add(hunks.removeFirst());
154             } else {
155                 break;
156             }
157         }
158         return hunksInRange;
159     }
160 
161     private Header calculateCoalescedHeader(Hunk first, Hunk last) {
162         var sourceStart = first.source().range().start() - numContextLines;
163         sourceStart = Math.max(sourceStart, 1);
164 
165         var destStart = first.target().range().start() - numContextLines;
166         destStart = Math.max(destStart, 1);
167 
168         var sourceEnd = last.source().range().end() + numContextLines;
169         sourceEnd = Math.min(sourceEnd, sourceContent.size() + 1);
170 
171         var destEnd = last.target().range().end() + numContextLines;
172         destEnd = Math.min(destEnd, destContent.size() + 1);

224     private List<Line> addedLines(Hunk hunk) {
225         var added = new ArrayList<Line>();
226         var addedStart = hunk.target().range().start();
227         var addedEnd = hunk.target().range().end();
228         for (var lineNum = addedStart; lineNum < addedEnd; lineNum++) {
229             var text = destContent.get(lineNum - 1);
230             added.add(new Line(lineNum, text));
231         }
232 
233         assert added.size() == hunk.target().lines().size();
234 
235         return added;
236     }
237 
238     private Context createContextAfterHunk(Hunk hunk, Hunk nextNonEmptySourceHunk, Hunk nextNonEmptyTargetHunk) {
239         var sourceAfterContextStart = hunk.source().range().end();
240         var sourceAfterContextEnd = hunk.source().range().end() + numContextLines;
241         sourceAfterContextEnd = Math.min(sourceAfterContextEnd, sourceContent.size() + 1);
242         if (nextNonEmptySourceHunk != null) {
243             var nextNonEmptySourceHunkStart = nextNonEmptySourceHunk.source().range().start();
244             sourceAfterContextEnd = Math.min(sourceAfterContextEnd, nextNonEmptySourceHunkStart);


245         }
246         var sourceAfterContextCount = sourceAfterContextEnd - sourceAfterContextStart;
247 
248         var destAfterContextStart = hunk.target().range().end();
249         var destAfterContextEnd = hunk.target().range().end() + numContextLines;
250         destAfterContextEnd = Math.min(destAfterContextEnd, destContent.size() + 1);
251         if (nextNonEmptyTargetHunk != null) {
252             var nextNonEmptyTargetHunkStart = nextNonEmptyTargetHunk.target().range().start();
253             destAfterContextEnd = Math.min(destAfterContextEnd, nextNonEmptyTargetHunkStart);


254         }
255         var destAfterContextCount = destAfterContextEnd - destAfterContextStart;
256 
257         var afterContextCount = Math.min(sourceAfterContextCount, destAfterContextCount);
258 
259         var sourceLineNumStart = hunk.source().lines().isEmpty() && hunk.source().range().start() == 0 ?
260             sourceAfterContextStart + 1 : sourceAfterContextStart;
261         var sourceEndingLineNum = sourceLineNumStart + afterContextCount;
262         var sourceContextAfter = new ArrayList<Line>();
263         for (var lineNum = sourceLineNumStart; lineNum < sourceEndingLineNum; lineNum++) {
264             var text = sourceContent.get(lineNum - 1);
265             sourceContextAfter.add(new Line(lineNum, text));
266         }
267 
268         var destLineNumStart = hunk.target().lines().isEmpty() && hunk.target().range().start() == 0 ?
269             destAfterContextStart + 1 : destAfterContextStart;
270         var destEndingLineNum = destLineNumStart + afterContextCount;
271         var destContextAfter = new ArrayList<Line>();
272         for (var lineNum = destLineNumStart; lineNum < destEndingLineNum; lineNum++) {
273             var text = destContent.get(lineNum - 1);

131 class HunkCoalescer {
132     private final int numContextLines;
133     private final List<String> sourceContent;
134     private final List<String> destContent;
135 
136     public HunkCoalescer(int numContextLines, List<String> sourceContent, List<String> destContent) {
137         this.numContextLines = numContextLines;
138         this.sourceContent = sourceContent;
139         this.destContent = destContent;
140     }
141 
142     public List<Hunk> nextGroup(LinkedList<Hunk> hunks) {
143         var hunksInRange = new ArrayList<Hunk>();
144         hunksInRange.add(hunks.removeFirst());
145 
146         while (!hunks.isEmpty()) {
147             var next = hunks.peekFirst();
148             var last = hunksInRange.get(hunksInRange.size() - 1);
149             var destEnd = last.target().range().end() + numContextLines;
150             var sourceEnd = last.source().range().end() + numContextLines;
151             var nextDestStart = next.target().range().start() - numContextLines;
152             var nextSourceStart = next.source().range().start() - numContextLines;
153             if (sourceEnd >= nextSourceStart ||
154                 destEnd >= nextDestStart) {
155                 hunksInRange.add(hunks.removeFirst());
156             } else {
157                 break;
158             }
159         }
160         return hunksInRange;
161     }
162 
163     private Header calculateCoalescedHeader(Hunk first, Hunk last) {
164         var sourceStart = first.source().range().start() - numContextLines;
165         sourceStart = Math.max(sourceStart, 1);
166 
167         var destStart = first.target().range().start() - numContextLines;
168         destStart = Math.max(destStart, 1);
169 
170         var sourceEnd = last.source().range().end() + numContextLines;
171         sourceEnd = Math.min(sourceEnd, sourceContent.size() + 1);
172 
173         var destEnd = last.target().range().end() + numContextLines;
174         destEnd = Math.min(destEnd, destContent.size() + 1);

226     private List<Line> addedLines(Hunk hunk) {
227         var added = new ArrayList<Line>();
228         var addedStart = hunk.target().range().start();
229         var addedEnd = hunk.target().range().end();
230         for (var lineNum = addedStart; lineNum < addedEnd; lineNum++) {
231             var text = destContent.get(lineNum - 1);
232             added.add(new Line(lineNum, text));
233         }
234 
235         assert added.size() == hunk.target().lines().size();
236 
237         return added;
238     }
239 
240     private Context createContextAfterHunk(Hunk hunk, Hunk nextNonEmptySourceHunk, Hunk nextNonEmptyTargetHunk) {
241         var sourceAfterContextStart = hunk.source().range().end();
242         var sourceAfterContextEnd = hunk.source().range().end() + numContextLines;
243         sourceAfterContextEnd = Math.min(sourceAfterContextEnd, sourceContent.size() + 1);
244         if (nextNonEmptySourceHunk != null) {
245             var nextNonEmptySourceHunkStart = nextNonEmptySourceHunk.source().range().start();
246             sourceAfterContextEnd = sourceAfterContextEnd > nextNonEmptySourceHunkStart
247                     ? Math.min(sourceAfterContextEnd, nextNonEmptySourceHunkStart)
248                     : Math.max(sourceAfterContextEnd, nextNonEmptySourceHunkStart);
249         }
250         var sourceAfterContextCount = sourceAfterContextEnd - sourceAfterContextStart;
251 
252         var destAfterContextStart = hunk.target().range().end();
253         var destAfterContextEnd = hunk.target().range().end() + numContextLines;
254         destAfterContextEnd = Math.min(destAfterContextEnd, destContent.size() + 1);
255         if (nextNonEmptyTargetHunk != null) {
256             var nextNonEmptyTargetHunkStart = nextNonEmptyTargetHunk.target().range().start();
257             destAfterContextEnd = destAfterContextEnd > nextNonEmptyTargetHunkStart
258                     ? Math.min(destAfterContextEnd, nextNonEmptyTargetHunkStart)
259                     : Math.max(destAfterContextEnd, nextNonEmptyTargetHunkStart);
260         }
261         var destAfterContextCount = destAfterContextEnd - destAfterContextStart;
262 
263         var afterContextCount = Math.min(sourceAfterContextCount, destAfterContextCount);
264 
265         var sourceLineNumStart = hunk.source().lines().isEmpty() && hunk.source().range().start() == 0 ?
266             sourceAfterContextStart + 1 : sourceAfterContextStart;
267         var sourceEndingLineNum = sourceLineNumStart + afterContextCount;
268         var sourceContextAfter = new ArrayList<Line>();
269         for (var lineNum = sourceLineNumStart; lineNum < sourceEndingLineNum; lineNum++) {
270             var text = sourceContent.get(lineNum - 1);
271             sourceContextAfter.add(new Line(lineNum, text));
272         }
273 
274         var destLineNumStart = hunk.target().lines().isEmpty() && hunk.target().range().start() == 0 ?
275             destAfterContextStart + 1 : destAfterContextStart;
276         var destEndingLineNum = destLineNumStart + afterContextCount;
277         var destContextAfter = new ArrayList<Line>();
278         for (var lineNum = destLineNumStart; lineNum < destEndingLineNum; lineNum++) {
279             var text = destContent.get(lineNum - 1);
< prev index next >