Don't force out of block modification after exception in analyze, use special dependency
This commit is contained in:
@@ -62,7 +62,8 @@ class JSDeclarationsCacheProvider extends DeclarationsCacheProvider {
|
|||||||
|
|
||||||
return Result.<KotlinDeclarationsCache>create(
|
return Result.<KotlinDeclarationsCache>create(
|
||||||
new KotlinDeclarationsCacheImpl(analyzeExhaust),
|
new KotlinDeclarationsCacheImpl(analyzeExhaust),
|
||||||
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
|
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT,
|
||||||
|
KotlinCacheManager.getInstance(project).getDeclarationsTracker()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ class JvmDeclarationsCacheProvider extends DeclarationsCacheProvider {
|
|||||||
|
|
||||||
return Result.<KotlinDeclarationsCache>create(
|
return Result.<KotlinDeclarationsCache>create(
|
||||||
new KotlinDeclarationsCacheImpl(analyzeExhaust),
|
new KotlinDeclarationsCacheImpl(analyzeExhaust),
|
||||||
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
|
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT,
|
||||||
|
KotlinCacheManager.getInstance(project).getDeclarationsTracker()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import com.google.common.collect.Maps;
|
|||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.components.ServiceManager;
|
import com.intellij.openapi.components.ServiceManager;
|
||||||
import com.intellij.openapi.project.Project;
|
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.annotations.NotNull;
|
||||||
import org.jetbrains.jet.plugin.project.TargetPlatform;
|
import org.jetbrains.jet.plugin.project.TargetPlatform;
|
||||||
|
|
||||||
@@ -32,6 +34,8 @@ public class KotlinCacheManager {
|
|||||||
|
|
||||||
private final Map<TargetPlatform, DeclarationsCacheProvider> cacheProviders = Maps.newHashMap();
|
private final Map<TargetPlatform, DeclarationsCacheProvider> cacheProviders = Maps.newHashMap();
|
||||||
|
|
||||||
|
private final DefaultModificationTracker kotlinDeclarationsTracker = new DefaultModificationTracker();
|
||||||
|
|
||||||
public KotlinCacheManager(@NotNull Project project) {
|
public KotlinCacheManager(@NotNull Project project) {
|
||||||
cacheProviders.put(TargetPlatform.JVM, new JvmDeclarationsCacheProvider(project));
|
cacheProviders.put(TargetPlatform.JVM, new JvmDeclarationsCacheProvider(project));
|
||||||
cacheProviders.put(TargetPlatform.JS, new JSDeclarationsCacheProvider(project));
|
cacheProviders.put(TargetPlatform.JS, new JSDeclarationsCacheProvider(project));
|
||||||
@@ -79,4 +83,12 @@ public class KotlinCacheManager {
|
|||||||
|
|
||||||
return provider;
|
return provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void invalidateCache() {
|
||||||
|
kotlinDeclarationsTracker.incModificationCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModificationTracker getDeclarationsTracker() {
|
||||||
|
return kotlinDeclarationsTracker;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ import com.intellij.openapi.roots.libraries.LibraryUtil;
|
|||||||
import com.intellij.openapi.util.Key;
|
import com.intellij.openapi.util.Key;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiFile;
|
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.search.GlobalSearchScope;
|
||||||
import com.intellij.psi.util.CachedValue;
|
import com.intellij.psi.util.CachedValue;
|
||||||
import com.intellij.psi.util.CachedValueProvider;
|
import com.intellij.psi.util.CachedValueProvider;
|
||||||
@@ -109,13 +107,7 @@ public final class AnalyzerFacadeWithCache {
|
|||||||
private static AnalyzeExhaust emptyExhaustWithDiagnosticOnFile(JetFile file, Throwable e) {
|
private static AnalyzeExhaust emptyExhaustWithDiagnosticOnFile(JetFile file, Throwable e) {
|
||||||
BindingTraceContext bindingTraceContext = new BindingTraceContext();
|
BindingTraceContext bindingTraceContext = new BindingTraceContext();
|
||||||
bindingTraceContext.report(Errors.EXCEPTION_WHILE_ANALYZING.on(file, e));
|
bindingTraceContext.report(Errors.EXCEPTION_WHILE_ANALYZING.on(file, e));
|
||||||
AnalyzeExhaust analyzeExhaust = AnalyzeExhaust.error(bindingTraceContext.getBindingContext(), e);
|
return 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final SLRUCache<JetFile, CachedValue<CancelableResolveSession>> PER_FILE_SESSION_CACHE = new SLRUCache<JetFile, CachedValue<CancelableResolveSession>>(2, 3) {
|
private static final SLRUCache<JetFile, CachedValue<CancelableResolveSession>> PER_FILE_SESSION_CACHE = new SLRUCache<JetFile, CachedValue<CancelableResolveSession>>(2, 3) {
|
||||||
@@ -176,6 +168,10 @@ public final class AnalyzerFacadeWithCache {
|
|||||||
}
|
}
|
||||||
catch (Throwable e) {
|
catch (Throwable e) {
|
||||||
handleError(e);
|
handleError(e);
|
||||||
|
|
||||||
|
// Exception during body resolve analyze can harm internal caches in declarations cache
|
||||||
|
KotlinCacheManager.getInstance(file.getProject()).invalidateCache();
|
||||||
|
|
||||||
return emptyExhaustWithDiagnosticOnFile(file, e);
|
return emptyExhaustWithDiagnosticOnFile(file, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user