From f58aca5ddfdd951101f1ecaf373863788c0a95f9 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 10 Apr 2014 17:28:38 +0400 Subject: [PATCH] Excluding top-level members of library source files when analyzing them lazily --- .../plugin/caches/resolve/KotlinResolveCache.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt b/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt index 08f6f482b31..349266d7848 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt @@ -37,6 +37,9 @@ import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.jet.lang.resolve.BindingTraceContext import com.intellij.psi.util.CachedValueProvider +import org.jetbrains.jet.asJava.LightClassUtil +import com.intellij.openapi.roots.libraries.LibraryUtil +import org.jetbrains.jet.lang.resolve.LibrarySourceHacks private val LOG = Logger.getInstance(javaClass()) @@ -59,8 +62,18 @@ class KotlinResolveCache( ApplicationUtils.warnTimeConsuming(LOG) try { + for (element in task!!.elements) { + val file = element.getContainingFile() as JetFile + val virtualFile = file.getVirtualFile() + if (LightClassUtil.belongsToKotlinBuiltIns(file) + || virtualFile != null && LibraryUtil.findLibraryEntry(virtualFile, file.getProject()) != null) { + // Library sources: mark file to skip + file.putUserData(LibrarySourceHacks.SKIP_TOP_LEVEL_MEMBERS, true) + } + } + // todo: look for pre-existing results for this element or its parents - val trace = DelegatingBindingTrace(resolveSession.getBindingContext(), "Trace for resolution of " + task!!.elements.makeString(", ")) + val trace = DelegatingBindingTrace(resolveSession.getBindingContext(), "Trace for resolution of " + task.elements.makeString(", ")) val injector = InjectorForTopDownAnalyzerForJvm( project, SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker()),