From e0fadc28d9dbb941d5ec54aa97bcd9adb86356d2 Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Sat, 14 Jan 2017 15:50:58 +0100 Subject: [PATCH] Ensure DiffFormatter instances are closed Use try-with-resource. The remaining instance of this in CreatePatchOperation is the subject of another commit.[1] [1] https://git.eclipse.org/r/#/c/88498/ Change-Id: Ibe945f881000fc2ad7a8e098c1dcaa260f273967 Signed-off-by: Thomas Wolf --- .../ui/internal/blame/BlameInformationControl.java | 34 ++++++++-------- .../egit/ui/internal/history/GitHistoryPage.java | 46 +++++++++++----------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java index 0cbd723af..240e8a545 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java @@ -375,24 +375,26 @@ public class BlameInformationControl extends AbstractInformationControl GridDataFactory.fillDefaults().grab(true, true).create()); DiffDocument document = new DiffDocument(); - DiffRegionFormatter diffFormatter = new DiffRegionFormatter( - document); - diffFormatter.setContext(1); - diffFormatter.setRepository(revision.getRepository()); - diffFormatter.format(interestingDiff, diff.getOldText(), - diff.getNewText()); - - try (ObjectReader reader = revision.getRepository().newObjectReader()) { - DiffEntry diffEntry = CompareCoreUtils.getChangeDiffEntry( - revision.getRepository(), revision.getSourcePath(), - revision.getCommit(), parent, reader); - if (diffEntry != null) { - FileDiff fileDiff = new FileDiff(revision.getCommit(), - diffEntry); - document.setDefault(revision.getRepository(), fileDiff); + try (DiffRegionFormatter diffFormatter = new DiffRegionFormatter( + document)) { + diffFormatter.setContext(1); + diffFormatter.setRepository(revision.getRepository()); + diffFormatter.format(interestingDiff, diff.getOldText(), + diff.getNewText()); + + try (ObjectReader reader = revision.getRepository() + .newObjectReader()) { + DiffEntry diffEntry = CompareCoreUtils.getChangeDiffEntry( + revision.getRepository(), revision.getSourcePath(), + revision.getCommit(), parent, reader); + if (diffEntry != null) { + FileDiff fileDiff = new FileDiff(revision.getCommit(), + diffEntry); + document.setDefault(revision.getRepository(), fileDiff); + } } + document.connect(diffFormatter); } - document.connect(diffFormatter); diffText.setDocument(document); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java index 75498d6db..800bafdbe 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java @@ -34,6 +34,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.egit.core.AdapterUtils; @@ -2305,6 +2306,7 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener, final Repository repository = fileViewer.getRepository(); Job formatJob = new Job(UIText.GitHistoryPage_FormatDiffJobName) { + @Override protected IStatus run(IProgressMonitor monitor) { if (monitor.isCanceled()) { @@ -2313,32 +2315,29 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener, int maxLines = Activator.getDefault().getPreferenceStore() .getInt(UIPreferences.HISTORY_MAX_DIFF_LINES); final DiffDocument document = new DiffDocument(); - final DiffRegionFormatter formatter = new DiffRegionFormatter( - document, document.getLength(), maxLines); - - monitor.beginTask("", diffs.size()); //$NON-NLS-1$ - for (FileDiff diff : diffs) { - if (monitor.isCanceled()) { - break; - } - if (diff.getCommit().getParentCount() > 1) { - break; - } - if (document.getNumberOfLines() > maxLines) { - break; + try (DiffRegionFormatter formatter = new DiffRegionFormatter( + document, document.getLength(), maxLines)) { + SubMonitor progress = SubMonitor.convert(monitor, + diffs.size()); + for (FileDiff diff : diffs) { + if (progress.isCanceled() + || diff.getCommit().getParentCount() > 1 + || document.getNumberOfLines() > maxLines) { + break; + } + progress.subTask(diff.getPath()); + try { + formatter.write(repository, diff); + } catch (IOException ignore) { + // Ignored + } + progress.worked(1); } - monitor.setTaskName(diff.getPath()); - try { - formatter.write(repository, diff); - } catch (IOException ignore) { - // Ignored + if (progress.isCanceled()) { + return Status.CANCEL_STATUS; } - monitor.worked(1); - } - if (monitor.isCanceled()) { - return Status.CANCEL_STATUS; + document.connect(formatter); } - monitor.done(); UIJob uiJob = new UIJob(UIText.GitHistoryPage_FormatDiffJobName) { @Override public IStatus runInUIThread(IProgressMonitor uiMonitor) { @@ -2346,7 +2345,6 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener, return Status.CANCEL_STATUS; } if (UIUtils.isUsable(diffViewer)) { - document.connect(formatter); diffViewer.setDocument(document); resizeCommentAndDiffScrolledComposite(); } -- 2.11.4.GIT