drop caches on low memory + make field volatile for correct interthread visibility

This commit is contained in:
Maxim.Mossienko
2013-08-21 17:30:29 +02:00
parent cb56ac2833
commit 29671b9718
@@ -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<String, List<PsiFile>> myExternalAnnotations = new ConcurrentSoftValueHashMap<String, List<PsiFile>>(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;