Probably fix issue with creating module descriptor for SDK twice

During creation and initialization of module descriptor for sdk
  in IdeaResolverForProject.BuiltInsCache.getOrCreateIfNeeded
  AbstractResolverForProject asks for sdk dependency for module
  descriptor for this sdk, so sometimes this module descriptor was
  created twice

#KT-42001 Fixed
EA-211562
This commit is contained in:
Dmitriy Novozhilov
2020-12-18 11:25:31 +03:00
parent 6296f6dc33
commit 92adccde47
4 changed files with 14 additions and 8 deletions
@@ -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<BuiltInsCacheKey, KotlinBuiltIns>()
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
}
}