diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt index 1e07157dc1f..212e38791bb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt @@ -52,7 +52,7 @@ abstract class AbstractResolverForProject( assert(moduleInfoToResolvableInfo.values.toSet() == modules.toSet()) } - abstract fun sdkDependency(module: M): M? + abstract fun sdkDependency(module: M, ownerModuleDescriptor: ModuleDescriptorImpl?): M? abstract fun modulesContent(module: M): ModuleContent abstract fun builtInsForModule(module: M): KotlinBuiltIns abstract fun createResolverForModule(descriptor: ModuleDescriptor, moduleInfo: M): ResolverForModule @@ -68,7 +68,7 @@ abstract class AbstractResolverForProject( LazyModuleDependencies( projectContext.storageManager, module, - sdkDependency(module), + sdkDependency(module, moduleDescriptor), this ) ) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/ResolverForSingleModuleProject.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/ResolverForSingleModuleProject.kt index e2c36115eb4..d0ca5e77b57 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/ResolverForSingleModuleProject.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/ResolverForSingleModuleProject.kt @@ -35,7 +35,7 @@ class ResolverForSingleModuleProject( EmptyResolverForProject(), PackageOracleFactory.OptimisticFactory ) { - override fun sdkDependency(module: M): M? = sdkDependency + override fun sdkDependency(module: M, ownerModuleDescriptor: ModuleDescriptorImpl?): M? = sdkDependency init { knownDependencyModuleDescriptors.forEach { (module, descriptor) -> @@ -61,4 +61,4 @@ class ResolverForSingleModuleProject( this, languageVersionSettings ) -} \ No newline at end of file +} diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 1e449e6e4bc..6040a0c17ce 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -96,7 +96,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { projectContext, modules ) { - override fun sdkDependency(module: TestModule): TestModule? = null + override fun sdkDependency(module: TestModule, ownerModuleDescriptor: ModuleDescriptorImpl?): TestModule? = null override fun modulesContent(module: TestModule): ModuleContent = ModuleContent(module, module.kotlinFiles, module.javaFilesScope) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt index a6d6c3ea69b..10e7d6de911 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt @@ -59,10 +59,16 @@ class IdeaResolverForProject( private val builtInsCache: BuiltInsCache = (delegateResolver as? IdeaResolverForProject)?.builtInsCache ?: BuiltInsCache(projectContext, this) - override fun sdkDependency(module: IdeaModuleInfo): SdkInfo? { + override fun sdkDependency(module: IdeaModuleInfo, ownerModuleDescriptor: ModuleDescriptorImpl?): SdkInfo? { if (projectContext.project.useCompositeAnalysis) { require(constantSdkDependencyIfAny == null) { "Shouldn't pass SDK dependency manually for composite analysis mode" } } + // This is needed for case when we find sdk dependency for module descriptor of + // that sdk itself. There was some situations when we create additional module + // descriptor for one SdkInfo + if (module is SdkInfo && ownerModuleDescriptor?.getCapability(ModuleInfo.Capability) == module) { + return module + } return constantSdkDependencyIfAny ?: module.findSdkAcrossDependencies() } @@ -133,7 +139,7 @@ class IdeaResolverForProject( private val cache = mutableMapOf() fun getOrCreateIfNeeded(module: IdeaModuleInfo): KotlinBuiltIns = projectContextFromSdkResolver.storageManager.compute { - val sdk = resolverForSdk.sdkDependency(module) + val sdk = resolverForSdk.sdkDependency(module, null) val key = module.platform.idePlatformKind.resolution.getKeyForBuiltIns(module, sdk) val cachedBuiltIns = cache[key] @@ -190,4 +196,4 @@ class IdeaResolverForProject( interface BuiltInsCacheKey { object DefaultBuiltInsKey : BuiltInsCacheKey -} \ No newline at end of file +}