From a19892b2b85f0db79f3598c3fde8d0282bbcf357 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 23 Sep 2014 16:30:08 +0400 Subject: [PATCH] diff: merge two related functions --- .../vcs/impl/LineStatusTrackerManager.java | 15 ++++------ .../vcs/impl/VcsBaseContentProvider.java | 11 ++++++-- .../vcs/impl/VcsFileStatusProvider.java | 28 ++++++++----------- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.java index b38fb5c8f1b3..24d93eaf2bae 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/LineStatusTrackerManager.java @@ -46,6 +46,7 @@ import com.intellij.openapi.roots.impl.DirectoryIndex; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.changes.committed.AbstractCalledLater; @@ -293,25 +294,19 @@ public class LineStatusTrackerManager implements ProjectComponent, LineStatusTra return; } - final VcsRevisionNumber baseRevision = myStatusProvider.getBaseRevision(myVirtualFile); + final Pair baseRevision = myStatusProvider.getBaseRevision(myVirtualFile); if (baseRevision == null) { log("installTracker() for file " + myVirtualFile.getPath() + " failed: null returned for base revision number"); reportTrackerBaseLoadFailed(); return; } + // loads are sequential (in single threaded QueueProcessor); // so myLoadCounter can't take less value for greater base revision -> the only thing we want from it - final LineStatusTracker.RevisionPack revisionPack = new LineStatusTracker.RevisionPack(myLoadCounter, baseRevision); + final LineStatusTracker.RevisionPack revisionPack = new LineStatusTracker.RevisionPack(myLoadCounter, baseRevision.first); ++myLoadCounter; - final String lastUpToDateContent = myStatusProvider.getBaseVersionContent(myVirtualFile); - if (lastUpToDateContent == null) { - log("installTracker() for file " + myVirtualFile.getPath() + " failed: no up to date content"); - reportTrackerBaseLoadFailed(); - return; - } - - final String converted = StringUtil.convertLineSeparators(lastUpToDateContent); + final String converted = StringUtil.convertLineSeparators(baseRevision.second); final Runnable runnable = new Runnable() { public void run() { synchronized (myLock) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBaseContentProvider.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBaseContentProvider.java index 4f6cd6688391..3f10e3a6f853 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBaseContentProvider.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBaseContentProvider.java @@ -15,8 +15,10 @@ */ package com.intellij.openapi.vcs.impl; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** @@ -25,8 +27,11 @@ import org.jetbrains.annotations.Nullable; * Time: 1:12 PM */ public interface VcsBaseContentProvider { + /* + * return pair of base revision number and content + * + * null is returned if an error occurred + */ @Nullable - String getBaseVersionContent(VirtualFile file); - @Nullable - VcsRevisionNumber getBaseRevision(VirtualFile file); + Pair getBaseRevision(@NotNull VirtualFile file); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsFileStatusProvider.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsFileStatusProvider.java index f84ac73a2abc..e75d0d5aab53 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsFileStatusProvider.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsFileStatusProvider.java @@ -22,6 +22,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.changes.*; import com.intellij.openapi.vcs.history.VcsRevisionNumber; @@ -150,45 +151,38 @@ public class VcsFileStatusProvider implements FileStatusProvider, VcsBaseContent @Override @Nullable - public String getBaseVersionContent(final VirtualFile file) { + public Pair getBaseRevision(@NotNull final VirtualFile file) { final Change change = ChangeListManager.getInstance(myProject).getChange(file); if (change != null) { final ContentRevision beforeRevision = change.getBeforeRevision(); - if (beforeRevision instanceof BinaryContentRevision) { - return null; - } + if (beforeRevision instanceof BinaryContentRevision) return null; if (beforeRevision != null) { String content; try { content = beforeRevision.getContent(); } - catch(VcsException ex) { + catch (VcsException ex) { content = null; } - if (content == null) myHaveEmptyContentRevisions = true; - return content; + if (content == null) { + myHaveEmptyContentRevisions = true; + return null; + } + return Pair.create(beforeRevision.getRevisionNumber(), content); } return null; } if (isDocumentModified(file)) { - return ApplicationManager.getApplication().runReadAction(new Computable() { + String content = ApplicationManager.getApplication().runReadAction(new Computable() { @Override public String compute() { return LoadTextUtil.loadText(file).toString(); } }); + return Pair.create(VcsRevisionNumber.NULL, content); } return null; } - - @Override - public VcsRevisionNumber getBaseRevision(VirtualFile file) { - final Change change = ChangeListManager.getInstance(myProject).getChange(file); - if (change != null && change.getBeforeRevision() != null && (! FileStatus.ADDED.equals(change.getFileStatus()))) { - return change.getBeforeRevision().getRevisionNumber(); - } - return null; - } }