From 3fa2b990a6fcf62e08991031f79fb35ff3e08038 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 2 Oct 2013 19:49:31 +0400 Subject: [PATCH] Don't force out of block modification after exception in analyze, use special dependency --- .../resolve/JSDeclarationsCacheProvider.java | 3 ++- .../resolve/JvmDeclarationsCacheProvider.java | 3 ++- .../plugin/caches/resolve/KotlinCacheManager.java | 12 ++++++++++++ .../plugin/project/AnalyzerFacadeWithCache.java | 14 +++++--------- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/JSDeclarationsCacheProvider.java b/idea/src/org/jetbrains/jet/plugin/caches/resolve/JSDeclarationsCacheProvider.java index fd83b53df19..b7b4924ac68 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/JSDeclarationsCacheProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/JSDeclarationsCacheProvider.java @@ -62,7 +62,8 @@ class JSDeclarationsCacheProvider extends DeclarationsCacheProvider { return Result.create( new KotlinDeclarationsCacheImpl(analyzeExhaust), - PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT + PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, + KotlinCacheManager.getInstance(project).getDeclarationsTracker() ); } } diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/JvmDeclarationsCacheProvider.java b/idea/src/org/jetbrains/jet/plugin/caches/resolve/JvmDeclarationsCacheProvider.java index c0085421ef0..22b6d84583b 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/JvmDeclarationsCacheProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/JvmDeclarationsCacheProvider.java @@ -76,7 +76,8 @@ class JvmDeclarationsCacheProvider extends DeclarationsCacheProvider { return Result.create( new KotlinDeclarationsCacheImpl(analyzeExhaust), - PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT + PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, + KotlinCacheManager.getInstance(project).getDeclarationsTracker() ); } } diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheManager.java b/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheManager.java index a67b0bb9ae2..5c8da40892e 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheManager.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheManager.java @@ -20,6 +20,8 @@ import com.google.common.collect.Maps; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.DefaultModificationTracker; +import com.intellij.openapi.util.ModificationTracker; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.plugin.project.TargetPlatform; @@ -32,6 +34,8 @@ public class KotlinCacheManager { private final Map cacheProviders = Maps.newHashMap(); + private final DefaultModificationTracker kotlinDeclarationsTracker = new DefaultModificationTracker(); + public KotlinCacheManager(@NotNull Project project) { cacheProviders.put(TargetPlatform.JVM, new JvmDeclarationsCacheProvider(project)); cacheProviders.put(TargetPlatform.JS, new JSDeclarationsCacheProvider(project)); @@ -79,4 +83,12 @@ public class KotlinCacheManager { return provider; } + + public void invalidateCache() { + kotlinDeclarationsTracker.incModificationCount(); + } + + public ModificationTracker getDeclarationsTracker() { + return kotlinDeclarationsTracker; + } } diff --git a/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java b/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java index 5ce07855b3a..f17e9d6eeae 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java @@ -25,8 +25,6 @@ import com.intellij.openapi.roots.libraries.LibraryUtil; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiManager; -import com.intellij.psi.impl.PsiModificationTrackerImpl; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; @@ -109,13 +107,7 @@ public final class AnalyzerFacadeWithCache { private static AnalyzeExhaust emptyExhaustWithDiagnosticOnFile(JetFile file, Throwable e) { BindingTraceContext bindingTraceContext = new BindingTraceContext(); bindingTraceContext.report(Errors.EXCEPTION_WHILE_ANALYZING.on(file, e)); - AnalyzeExhaust analyzeExhaust = AnalyzeExhaust.error(bindingTraceContext.getBindingContext(), e); - - // Force invalidating of headers cache - temp decision for monitoring rewrite slice bug - PsiModificationTracker tracker = PsiManager.getInstance(file.getProject()).getModificationTracker(); - ((PsiModificationTrackerImpl) tracker).incOutOfCodeBlockModificationCounter(); - - return analyzeExhaust; + return AnalyzeExhaust.error(bindingTraceContext.getBindingContext(), e); } private static final SLRUCache> PER_FILE_SESSION_CACHE = new SLRUCache>(2, 3) { @@ -176,6 +168,10 @@ public final class AnalyzerFacadeWithCache { } catch (Throwable e) { handleError(e); + + // Exception during body resolve analyze can harm internal caches in declarations cache + KotlinCacheManager.getInstance(file.getProject()).invalidateCache(); + return emptyExhaustWithDiagnosticOnFile(file, e); } }