Move resolveImportsInAllFiles to LazyTDA#analyzeDeclarations

This does not change the behavior: in the other usage of analyzeDeclarations,
a local class is being resolved and therefore TopDownAnalysisContext there does
not contain any files where imports would be resolved
This commit is contained in:
Alexander Udalov
2016-09-26 14:54:33 +03:00
parent 7070b88ea4
commit 9c70094ceb
2 changed files with 10 additions and 32 deletions
@@ -207,6 +207,8 @@ class LazyTopDownAnalyzer(
ClassifierUsageChecker.check(declarations, trace, classifierUsageCheckers)
resolveImportsInAllFiles(c)
return c
}
@@ -216,6 +218,12 @@ class LazyTopDownAnalyzer(
}
}
private fun resolveImportsInAllFiles(c: TopDownAnalysisContext) {
for (file in c.files + c.scripts.keys.map { it.getContainingKtFile() }) {
fileScopeProvider.getImportResolver(file).forceResolveAllImports()
}
}
private fun createTypeAliasDescriptors(c: TopDownAnalysisContext, topLevelFqNames: Multimap<FqName, KtElement>, typeAliases: List<KtTypeAlias>) {
if (!languageVersionSettings.supportsFeature(LanguageFeature.TypeAliases)) return
@@ -18,24 +18,15 @@ package org.jetbrains.kotlin.resolve;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.psi.KtScript;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory;
import org.jetbrains.kotlin.resolve.lazy.ImportResolver;
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer;
import java.util.Collection;
public class LazyTopDownAnalyzerForTopLevel {
private final KotlinCodeAnalyzer codeAnalyzer;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
public LazyTopDownAnalyzerForTopLevel(
@NotNull LazyTopDownAnalyzer lazyTopDownAnalyzer,
@NotNull KotlinCodeAnalyzer codeAnalyzer
) {
public LazyTopDownAnalyzerForTopLevel(@NotNull LazyTopDownAnalyzer lazyTopDownAnalyzer) {
this.lazyTopDownAnalyzer = lazyTopDownAnalyzer;
this.codeAnalyzer = codeAnalyzer;
}
@NotNull
@@ -43,27 +34,6 @@ public class LazyTopDownAnalyzerForTopLevel {
@NotNull TopDownAnalysisMode topDownAnalysisMode,
@NotNull Collection<? extends PsiElement> elements
) {
TopDownAnalysisContext c = lazyTopDownAnalyzer.analyzeDeclarations(topDownAnalysisMode, elements, DataFlowInfoFactory.EMPTY);
resolveImportsInAllFiles(c, codeAnalyzer);
return c;
}
private static void resolveImportsInAllFiles(TopDownAnalysisContext c, KotlinCodeAnalyzer resolveSession) {
for (KtFile file : c.getFiles()) {
resolveAndCheckImports(file, resolveSession);
}
for (KtScript script : c.getScripts().keySet()) {
resolveAndCheckImports(script.getContainingKtFile(), resolveSession);
}
}
private static void resolveAndCheckImports(@NotNull KtFile file, @NotNull KotlinCodeAnalyzer resolveSession) {
ImportResolver importResolver = resolveSession.getFileScopeProvider().getImportResolver(file);
importResolver.forceResolveAllImports();
return lazyTopDownAnalyzer.analyzeDeclarations(topDownAnalysisMode, elements, DataFlowInfoFactory.EMPTY);
}
}