From ec487fe5f0b03fdab2e645e29ab2b3558b4cdefd Mon Sep 17 00:00:00 2001 From: irengrig Date: Mon, 17 Oct 2011 12:38:42 +0400 Subject: [PATCH] Slight annotate stacktrace optimization: -extra call; cache current revisions in one stack trace "highlighting pass"; do not ask for recent changes if virtual file file system is read only --- .../VcsContentAnnotationExceptionFilter.java | 17 ++++++++++++++++- .../execution/filters/ExceptionWorker.java | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/openapi/vcs/contentAnnotation/VcsContentAnnotationExceptionFilter.java b/java/java-impl/src/com/intellij/openapi/vcs/contentAnnotation/VcsContentAnnotationExceptionFilter.java index a4a2eacef5bf..58d30f1bd1ea 100644 --- a/java/java-impl/src/com/intellij/openapi/vcs/contentAnnotation/VcsContentAnnotationExceptionFilter.java +++ b/java/java-impl/src/com/intellij/openapi/vcs/contentAnnotation/VcsContentAnnotationExceptionFilter.java @@ -55,11 +55,13 @@ public class VcsContentAnnotationExceptionFilter implements Filter, FilterMixin private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.contentAnnotation.VcsContentAnnotationExceptionFilter"); private final GlobalSearchScope myScope; private final VcsContentAnnotationSettings mySettings; + private Map myRevNumbersCache; public VcsContentAnnotationExceptionFilter(GlobalSearchScope scope) { myScope = scope; myProject = scope.getProject(); mySettings = VcsContentAnnotationSettings.getInstance(myProject); + myRevNumbersCache = new HashMap(); } private static class MyAdditionalHighlight extends AdditionalHighlight { @@ -111,7 +113,20 @@ public class VcsContentAnnotationExceptionFilter implements Filter, FilterMixin }); if (worker.getResult() != null) { VirtualFile vf = worker.getFile().getVirtualFile(); - final VcsRevisionNumber recentChangeRevision = vcsContentAnnotation.fileRecentlyChanged(vf); + if (vf.getFileSystem().isReadOnly()) continue; + + VcsRevisionNumber recentChangeRevision = myRevNumbersCache.get(vf); + if (recentChangeRevision == null) { + recentChangeRevision = vcsContentAnnotation.fileRecentlyChanged(vf); + if (recentChangeRevision == null) { + myRevNumbersCache.put(vf, VcsRevisionNumber.NULL); + } else { + myRevNumbersCache.put(vf, recentChangeRevision); + } + } + if (VcsRevisionNumber.NULL.equals(recentChangeRevision)) { + recentChangeRevision = null; + } if (localChangesCorrector.isFileAlreadyIdentifiedAsChanged(vf) || ChangeListManager.isFileChanged(myProject, vf) || recentChangeRevision != null) { final Document document = getDocumentForFile(worker); diff --git a/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java b/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java index e3a57cd722bc..2640e2955592 100644 --- a/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java +++ b/java/openapi/src/com/intellij/execution/filters/ExceptionWorker.java @@ -90,9 +90,9 @@ public class ExceptionWorker { myClass = psiFacade.findClass(className, mySearchScope); if (myClass == null) { myClass = psiFacade.findClass(className, GlobalSearchScope.allScope(myProject)); - if (myClass == null) {//try to find class according to all dollars in package name + /*if (myClass == null) {//try to find class according to all dollars in package name myClass = psiFacade.findClass(className, GlobalSearchScope.allScope(myProject)); - } + }*/ if (myClass == null) return; } myFile = (PsiFile) myClass.getContainingFile().getNavigationElement();