diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt index 51420b4a401..79a55e73637 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.context.MutableModuleContext import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.PackagePartProvider +import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl @@ -46,6 +47,7 @@ import org.jetbrains.kotlin.resolve.TopDownAnalysisMode import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import java.util.* @@ -103,7 +105,12 @@ object TopDownAnalyzerFacadeForJVM { extension.getPackageFragmentProvider(project, module, storageManager, trace, null) } - container.get().analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, additionalProviders) + module.initialize(CompositePackageFragmentProvider( + listOf(container.get().packageFragmentProvider) + + additionalProviders + )) + + container.get().analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files) for (extension in AnalysisCompletedHandlerExtension.getInstances(project)) { val result = extension.analysisCompleted(project, module, trace, files) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzerForTopLevel.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzerForTopLevel.java index ed8bd6f0672..a38577b0541 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzerForTopLevel.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzerForTopLevel.java @@ -17,25 +17,18 @@ package org.jetbrains.kotlin.resolve; import com.intellij.psi.PsiElement; -import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.descriptors.PackageFragmentProvider; -import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider; -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; 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.KotlinCodeAnalyzer; import org.jetbrains.kotlin.resolve.lazy.ImportResolver; +import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer; -import java.util.Arrays; import java.util.Collection; -import java.util.List; public class LazyTopDownAnalyzerForTopLevel { - - @NotNull private final KotlinCodeAnalyzer codeAnalyzer; - @NotNull private final LazyTopDownAnalyzer lazyTopDownAnalyzer; + private final KotlinCodeAnalyzer codeAnalyzer; + private final LazyTopDownAnalyzer lazyTopDownAnalyzer; public LazyTopDownAnalyzerForTopLevel( @NotNull LazyTopDownAnalyzer lazyTopDownAnalyzer, @@ -45,27 +38,6 @@ public class LazyTopDownAnalyzerForTopLevel { this.codeAnalyzer = codeAnalyzer; } - @NotNull - public TopDownAnalysisContext analyzeFiles( - @NotNull TopDownAnalysisMode topDownAnalysisMode, - @NotNull Collection files, - @NotNull List additionalProviders - ) { - PackageFragmentProvider provider; - if (additionalProviders.isEmpty()) { - provider = codeAnalyzer.getPackageFragmentProvider(); - } - else { - provider = new CompositePackageFragmentProvider(CollectionsKt.plus( - Arrays.asList(codeAnalyzer.getPackageFragmentProvider()), - additionalProviders)); - } - - ((ModuleDescriptorImpl) codeAnalyzer.getModuleDescriptor()).initialize(provider); - - return analyzeDeclarations(topDownAnalysisMode, files); - } - @NotNull public TopDownAnalysisContext analyzeDeclarations( @NotNull TopDownAnalysisMode topDownAnalysisMode, diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java index 12aaff6a221..41eac894029 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.context.ModuleContext; import org.jetbrains.kotlin.context.SimpleGlobalContext; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.PackageViewDescriptor; +import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider; import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; import org.jetbrains.kotlin.diagnostics.*; import org.jetbrains.kotlin.frontend.java.di.InjectionKt; @@ -59,6 +60,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics; import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver; import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; +import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.kotlin.storage.ExceptionTracker; import org.jetbrains.kotlin.storage.LockBasedStorageManager; @@ -290,12 +292,17 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest { configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) ); - DslKt.getService(container, LazyTopDownAnalyzerForTopLevel.class).analyzeFiles( - TopDownAnalysisMode.TopLevelDeclarations, files, - Collections.singletonList(DslKt.getService(container, JavaDescriptorResolver.class).getPackageFragmentProvider()) + ModuleDescriptorImpl moduleDescriptor = (ModuleDescriptorImpl) moduleContext.getModule(); + moduleDescriptor.initialize(new CompositePackageFragmentProvider(Arrays.asList( + DslKt.getService(container, KotlinCodeAnalyzer.class).getPackageFragmentProvider(), + DslKt.getService(container, JavaDescriptorResolver.class).getPackageFragmentProvider() + ))); + + DslKt.getService(container, LazyTopDownAnalyzerForTopLevel.class).analyzeDeclarations( + TopDownAnalysisMode.TopLevelDeclarations, files ); - return AnalysisResult.success(moduleTrace.getBindingContext(), moduleContext.getModule()); + return AnalysisResult.success(moduleTrace.getBindingContext(), moduleDescriptor); } private void validateAndCompareDescriptorWithFile( diff --git a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt index 93948bd0089..2e77a64b4e6 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.context.ModuleContext +import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.js.resolve.JsPlatform @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel import org.jetbrains.kotlin.resolve.createContainer import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl +import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory @@ -50,6 +52,8 @@ fun createTopDownAnalyzerForJs( useInstance(languageVersionSettings) useImpl() useImpl() + }.apply { + get().initialize(get().packageFragmentProvider) } return storageComponentContainer.get() } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt index 5a938b18249..7d952b79f6c 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt @@ -56,7 +56,7 @@ object TopDownAnalyzerFacadeForJS { FileBasedDeclarationProviderFactory(moduleContext.storageManager, allFiles), config.configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) ) - analyzerForJs.analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, emptyList()) + analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files) return JsAnalysisResult.success(trace, moduleContext.module) }