diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt index fab6bb69af9..b8cb74cb7bf 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/di/injection.kt @@ -38,7 +38,7 @@ public fun createContainerForReplWithJava( moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory, moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: FileScopeProvider.AdditionalScopes ): ContainerForReplWithJava = createContainer("ReplWithJava") { - configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace) + configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project) useInstance(additionalFileScopeProvider) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index 83aa1d5826a..09f771e130c 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -71,7 +71,7 @@ public fun createContainerForLazyResolveWithJava( moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory, moduleContentScope: GlobalSearchScope, moduleClassResolver: ModuleClassResolver ): Pair = createContainer("LazyResolveWithJava") { - configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace) + configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project) useInstance(moduleClassResolver) @@ -92,7 +92,7 @@ public fun createContainerForTopDownAnalyzerForJvm( declarationProviderFactory: DeclarationProviderFactory, moduleContentScope: GlobalSearchScope ): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm") { - configureModule(moduleContext, KotlinJvmCheckerProvider, bindingTrace) + configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project) useInstance(declarationProviderFactory) useInstance(BodyResolveCache.ThrowException) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt index 63d278bb1ee..35b6fe8c2f4 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/KotlinJvmCheckerProvider.kt @@ -52,7 +52,7 @@ import org.jetbrains.kotlin.types.expressions.SenselessComparisonChecker import org.jetbrains.kotlin.types.flexibility import org.jetbrains.kotlin.types.isFlexible -public object KotlinJvmCheckerProvider : AdditionalCheckerProvider( +public class KotlinJvmCheckerProvider(private val module: ModuleDescriptor) : AdditionalCheckerProvider( additionalDeclarationCheckers = listOf(PlatformStaticAnnotationChecker(), LocalFunInlineChecker(), ReifiedTypeParameterAnnotationChecker(), diff --git a/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt b/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt index 7ba11e2b160..065e6623946 100644 --- a/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt @@ -53,7 +53,8 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment context, FileBasedDeclarationProviderFactory(context.storageManager, listOf(psiFile)), CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - KotlinJvmCheckerProvider, DynamicTypesSettings()) + KotlinJvmCheckerProvider(context.module), DynamicTypesSettings() + ) context.initializeModuleContents(resolveSession.getPackageFragmentProvider()) diff --git a/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt b/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt index 37e60cb697d..b1e1da7070b 100644 --- a/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt +++ b/compiler/tests/org/jetbrains/kotlin/tests/di/injection.kt @@ -34,7 +34,7 @@ import org.jetbrains.kotlin.types.expressions.FakeCallResolver public fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests { return ContainerForTests(createContainer("Tests") { - configureModule(ModuleContext(module, project), KotlinJvmCheckerProvider) + configureModule(ModuleContext(module, project), KotlinJvmCheckerProvider(module)) useImpl() }) } diff --git a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt index eb253798cf4..2d93627af24 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt @@ -401,11 +401,17 @@ public abstract class ElementResolver protected constructor( return trace } - private fun createBodyResolver(resolveSession: ResolveSession, trace: BindingTrace, file: JetFile, statementFilter: StatementFilter): BodyResolver { + private fun createBodyResolver( + resolveSession: ResolveSession, + trace: BindingTrace, + file: JetFile, + statementFilter: StatementFilter + ): BodyResolver { val globalContext = SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker()) + val module = resolveSession.getModuleDescriptor() return createContainerForBodyResolve( - globalContext.withProject(file.getProject()).withModule(resolveSession.getModuleDescriptor()), - trace, getAdditionalCheckerProvider(file), statementFilter, getDynamicTypesSettings(file) + globalContext.withProject(file.getProject()).withModule(module), + trace, createAdditionalCheckerProvider(file, module), statementFilter, getDynamicTypesSettings(file) ).get() } @@ -477,7 +483,7 @@ public abstract class ElementResolver protected constructor( return null } - protected abstract fun getAdditionalCheckerProvider(jetFile: JetFile): AdditionalCheckerProvider + protected abstract fun createAdditionalCheckerProvider(jetFile: JetFile, module: ModuleDescriptor): AdditionalCheckerProvider protected abstract fun getDynamicTypesSettings(jetFile: JetFile): DynamicTypesSettings private class BodyResolveContextForLazy( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt index b4d824fadd7..4a5179f8c2d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt @@ -215,11 +215,9 @@ private object KotlinResolveDataProvider { fun analyze(project: Project, resolveSession: ResolveSessionForBodies, analyzableElement: JetElement): AnalysisResult { try { + val module = resolveSession.getModuleDescriptor() if (analyzableElement is JetCodeFragment) { - return AnalysisResult.success( - analyzeExpressionCodeFragment(resolveSession, analyzableElement), - resolveSession.getModuleDescriptor() - ) + return AnalysisResult.success(analyzeExpressionCodeFragment(resolveSession, analyzableElement), module) } val file = analyzableElement.getContainingJetFile() @@ -232,12 +230,12 @@ private object KotlinResolveDataProvider { val targetPlatform = TargetPlatformDetector.getPlatform(analyzableElement.getContainingJetFile()) val globalContext = SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker()) - val moduleContext = globalContext.withProject(project).withModule(resolveSession.getModuleDescriptor()) + val moduleContext = globalContext.withProject(project).withModule(module) val lazyTopDownAnalyzer = createContainerForLazyBodyResolve( moduleContext, resolveSession, trace, - targetPlatform.getAdditionalCheckerProvider(), + targetPlatform.createAdditionalCheckerProvider(module), targetPlatform.getDynamicTypesSettings(), resolveSession.getBodyResolveCache() ).get() @@ -248,7 +246,7 @@ private object KotlinResolveDataProvider { ) return AnalysisResult.success( trace.getBindingContext(), - resolveSession.getModuleDescriptor() + module ) } catch (e: ProcessCanceledException) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.java index da676ed39b9..8475afbc693 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.java @@ -24,6 +24,7 @@ import com.intellij.psi.util.PsiModificationTracker; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.descriptors.ModuleDescriptor; import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingFunctionShortNameIndex; import org.jetbrains.kotlin.idea.stubindex.JetProbablyNothingPropertyShortNameIndex; import org.jetbrains.kotlin.psi.JetElement; @@ -88,8 +89,8 @@ public class ResolveElementCache extends ElementResolver implements BodyResolveC @NotNull @Override - public AdditionalCheckerProvider getAdditionalCheckerProvider(@NotNull JetFile jetFile) { - return TargetPlatformDetector.getPlatform(jetFile).getAdditionalCheckerProvider(); + public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull JetFile jetFile, @NotNull ModuleDescriptor module) { + return TargetPlatformDetector.getPlatform(jetFile).createAdditionalCheckerProvider(module); } @NotNull diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java index 03b7117e50a..b9e363fabf3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatform.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.project; import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.descriptors.ModuleDescriptor; import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider; import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider; import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider; @@ -25,11 +26,24 @@ import org.jetbrains.kotlin.types.DynamicTypesSettings; public interface TargetPlatform { @NotNull - AdditionalCheckerProvider getAdditionalCheckerProvider(); + AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module); @NotNull DynamicTypesSettings getDynamicTypesSettings(); - TargetPlatform JVM = new TargetPlatformImpl("JVM", KotlinJvmCheckerProvider.INSTANCE$, new DynamicTypesSettings()); - TargetPlatform JS = new TargetPlatformImpl("JS", KotlinJsCheckerProvider.INSTANCE$, new DynamicTypesAllowed()); + TargetPlatform JVM = new TargetPlatformImpl("JVM", new DynamicTypesSettings()) { + @NotNull + @Override + public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module) { + return new KotlinJvmCheckerProvider(module); + } + }; + + TargetPlatform JS = new TargetPlatformImpl("JS", new DynamicTypesAllowed()) { + @NotNull + @Override + public AdditionalCheckerProvider createAdditionalCheckerProvider(@NotNull ModuleDescriptor module) { + return KotlinJsCheckerProvider.INSTANCE$; + } + }; } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java index e653fc1c691..a577f7bd45f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformImpl.java @@ -17,30 +17,17 @@ package org.jetbrains.kotlin.idea.project; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider; import org.jetbrains.kotlin.types.DynamicTypesSettings; -public class TargetPlatformImpl implements TargetPlatform { - @NotNull private final String platformName; - @NotNull private final AdditionalCheckerProvider additionalCheckerProvider; - @NotNull private final DynamicTypesSettings dynamicTypesSettings; +public abstract class TargetPlatformImpl implements TargetPlatform { + private final String platformName; + private final DynamicTypesSettings dynamicTypesSettings; - public TargetPlatformImpl( - @NotNull String platformName, - @NotNull AdditionalCheckerProvider additionalCheckerProvider, - @NotNull DynamicTypesSettings dynamicTypesSettings - ) { + public TargetPlatformImpl(@NotNull String platformName, @NotNull DynamicTypesSettings dynamicTypesSettings) { this.platformName = platformName; - this.additionalCheckerProvider = additionalCheckerProvider; this.dynamicTypesSettings = dynamicTypesSettings; } - @NotNull - @Override - public AdditionalCheckerProvider getAdditionalCheckerProvider() { - return additionalCheckerProvider; - } - @NotNull @Override public DynamicTypesSettings getDynamicTypesSettings() {