From 29671b9718c8d0f4568760ce4f93a817f2c591e4 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 21 Aug 2013 15:40:50 +0200 Subject: [PATCH] drop caches on low memory + make field volatile for correct interthread visibility --- .../BaseExternalAnnotationsManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java b/java/java-psi-impl/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java index 8d7556403cbc..464c01ba256a 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/BaseExternalAnnotationsManager.java @@ -21,6 +21,7 @@ import com.intellij.lang.java.parser.JavaParserUtil; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.LowMemoryWatcher; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -56,6 +57,14 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations private final ConcurrentMap> myExternalAnnotations = new ConcurrentSoftValueHashMap>(10, 0.75f, 2); protected final PsiManager myPsiManager; + @SuppressWarnings("UnusedDeclaration") + private final LowMemoryWatcher myLowMemoryWatcher = LowMemoryWatcher.register(new Runnable() { + @Override + public void run() { + dropCache(); + } + }); + public BaseExternalAnnotationsManager(final PsiManager psiManager) { myPsiManager = psiManager; } @@ -215,7 +224,8 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations } protected void duplicateError(@NotNull PsiFile file, @NotNull String externalName, @NotNull String text) { - LOG.error(text + "; for signature: '" + externalName + "' in the file " + file.getVirtualFile().getPresentableUrl()); + VirtualFile virtualFile = file.getVirtualFile(); + LOG.error(text + "; for signature: '" + externalName + "' in the file " + (virtualFile != null ? virtualFile.getPresentableUrl() : null)); } @NotNull @@ -406,7 +416,7 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations @NotNull private final String annotationClassFqName; @NotNull private final String annotationParameters; private final VirtualFile virtualFile; - private PsiAnnotation annotation; + private volatile PsiAnnotation annotation; private AnnotationData(@NotNull String annotationClassFqName, @NotNull String annotationParameters, VirtualFile virtualFile) { this.annotationClassFqName = annotationClassFqName;