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:
@@ -52,7 +52,7 @@ abstract class AbstractResolverForProject<M : ModuleInfo>(
|
|||||||
assert(moduleInfoToResolvableInfo.values.toSet() == modules.toSet())
|
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<M>
|
abstract fun modulesContent(module: M): ModuleContent<M>
|
||||||
abstract fun builtInsForModule(module: M): KotlinBuiltIns
|
abstract fun builtInsForModule(module: M): KotlinBuiltIns
|
||||||
abstract fun createResolverForModule(descriptor: ModuleDescriptor, moduleInfo: M): ResolverForModule
|
abstract fun createResolverForModule(descriptor: ModuleDescriptor, moduleInfo: M): ResolverForModule
|
||||||
@@ -68,7 +68,7 @@ abstract class AbstractResolverForProject<M : ModuleInfo>(
|
|||||||
LazyModuleDependencies(
|
LazyModuleDependencies(
|
||||||
projectContext.storageManager,
|
projectContext.storageManager,
|
||||||
module,
|
module,
|
||||||
sdkDependency(module),
|
sdkDependency(module, moduleDescriptor),
|
||||||
this
|
this
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -35,7 +35,7 @@ class ResolverForSingleModuleProject<M : ModuleInfo>(
|
|||||||
EmptyResolverForProject(),
|
EmptyResolverForProject(),
|
||||||
PackageOracleFactory.OptimisticFactory
|
PackageOracleFactory.OptimisticFactory
|
||||||
) {
|
) {
|
||||||
override fun sdkDependency(module: M): M? = sdkDependency
|
override fun sdkDependency(module: M, ownerModuleDescriptor: ModuleDescriptorImpl?): M? = sdkDependency
|
||||||
|
|
||||||
init {
|
init {
|
||||||
knownDependencyModuleDescriptors.forEach { (module, descriptor) ->
|
knownDependencyModuleDescriptors.forEach { (module, descriptor) ->
|
||||||
@@ -61,4 +61,4 @@ class ResolverForSingleModuleProject<M : ModuleInfo>(
|
|||||||
this,
|
this,
|
||||||
languageVersionSettings
|
languageVersionSettings
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -96,7 +96,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() {
|
|||||||
projectContext,
|
projectContext,
|
||||||
modules
|
modules
|
||||||
) {
|
) {
|
||||||
override fun sdkDependency(module: TestModule): TestModule? = null
|
override fun sdkDependency(module: TestModule, ownerModuleDescriptor: ModuleDescriptorImpl?): TestModule? = null
|
||||||
|
|
||||||
override fun modulesContent(module: TestModule): ModuleContent<TestModule> =
|
override fun modulesContent(module: TestModule): ModuleContent<TestModule> =
|
||||||
ModuleContent(module, module.kotlinFiles, module.javaFilesScope)
|
ModuleContent(module, module.kotlinFiles, module.javaFilesScope)
|
||||||
|
|||||||
+9
-3
@@ -59,10 +59,16 @@ class IdeaResolverForProject(
|
|||||||
private val builtInsCache: BuiltInsCache =
|
private val builtInsCache: BuiltInsCache =
|
||||||
(delegateResolver as? IdeaResolverForProject)?.builtInsCache ?: BuiltInsCache(projectContext, this)
|
(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) {
|
if (projectContext.project.useCompositeAnalysis) {
|
||||||
require(constantSdkDependencyIfAny == null) { "Shouldn't pass SDK dependency manually for composite analysis mode" }
|
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()
|
return constantSdkDependencyIfAny ?: module.findSdkAcrossDependencies()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +139,7 @@ class IdeaResolverForProject(
|
|||||||
private val cache = mutableMapOf<BuiltInsCacheKey, KotlinBuiltIns>()
|
private val cache = mutableMapOf<BuiltInsCacheKey, KotlinBuiltIns>()
|
||||||
|
|
||||||
fun getOrCreateIfNeeded(module: IdeaModuleInfo): KotlinBuiltIns = projectContextFromSdkResolver.storageManager.compute {
|
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 key = module.platform.idePlatformKind.resolution.getKeyForBuiltIns(module, sdk)
|
||||||
val cachedBuiltIns = cache[key]
|
val cachedBuiltIns = cache[key]
|
||||||
@@ -190,4 +196,4 @@ class IdeaResolverForProject(
|
|||||||
|
|
||||||
interface BuiltInsCacheKey {
|
interface BuiltInsCacheKey {
|
||||||
object DefaultBuiltInsKey : BuiltInsCacheKey
|
object DefaultBuiltInsKey : BuiltInsCacheKey
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user