@NotNull public DiffFragment[] buildDiffFragmentsFromLines( @NotNull DiffString[] lines1, @NotNull DiffString[] lines2) throws FilesTooBigForDiffException { DiffFragmentBuilder builder = new DiffFragmentBuilder(lines1, lines2); Object[] wrappers1 = getLineWrappers(lines1); Object[] wrappers2 = getLineWrappers(lines2); Diff.Change change = Diff.buildChanges(wrappers1, wrappers2); return builder.buildFragments(change); }
@NotNull public DiffFragment[] buildFragments( @NotNull DiffString[] strings1, @NotNull DiffString[] strings2) throws FilesTooBigForDiffException { DiffFragmentBuilder builder = new DiffFragmentBuilder(strings1, strings2); Object[] wrappers1 = getWrappers(strings1); Object[] wrappers2 = getWrappers(strings2); Diff.Change change = Diff.buildChanges(wrappers1, wrappers2); return builder.buildFragments(Util.concatEquals(change, wrappers1, wrappers2)); }
/* * Compare two arrays, basing on equals() and hashCode() of it's elements */ @NotNull public static <T> FairDiffIterable diff( @NotNull T[] data1, @NotNull T[] data2, @NotNull ProgressIndicator indicator) { indicator.checkCanceled(); try { // TODO: use ProgressIndicator inside Diff.Change change = Diff.buildChanges(data1, data2); return fair(create(change, data1.length, data2.length)); } catch (FilesTooBigForDiffException e) { throw new DiffTooBigException(); } }
@Nullable private SoftReference<TIntIntHashMap> doGetLineMapping(final long date, boolean oldToNew) { final VirtualFile f = getVirtualFile(); final byte[] oldContent; synchronized (LOCK) { if (myOldContent == null) { if (ApplicationManager.getApplication().isDispatchThread()) return null; final LocalHistory localHistory = LocalHistory.getInstance(); byte[] byteContent = localHistory.getByteContent( f, new FileRevisionTimestampComparator() { public boolean isSuitable(long revisionTimestamp) { return revisionTimestamp < date; } }); if (byteContent == null && f.getTimeStamp() > date) { byteContent = loadFromVersionControl(date, f); } myOldContent = new SoftReference<byte[]>(byteContent); } oldContent = myOldContent.get(); } if (oldContent == null) return null; String[] coveredLines = getCoveredLines(oldContent, f); final Document document = myDocument; if (document == null) return null; String[] currentLines = getUpToDateLines(document); String[] oldLines = oldToNew ? coveredLines : currentLines; String[] newLines = oldToNew ? currentLines : coveredLines; Diff.Change change; try { change = Diff.buildChanges(oldLines, newLines); } catch (FilesTooBigForDiffException e) { LOG.info(e); return null; } return new SoftReference<TIntIntHashMap>( getCoverageVersionToCurrentLineMapping(change, oldLines.length)); }
private void buildDiff() throws FilesTooBigForDiffException { // Diff diff = new Diff(strings1, strings2); // myChange = diff.diff_2(false); myChange = Diff.buildChanges(myOldString, myNewString); }
public int translateLineViaDiffStrict(int line) throws FilesTooBigForDiffException { if (myChange == null) buildDiff(); Diff.Change change = myChange; if (change == null) return line; return Diff.translateLine(change, line); }