diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index bff42b135f7..e7e3087db15 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -5,10 +5,10 @@ package org.jetbrains.kotlin.idea.caches.project +import com.intellij.facet.FacetManager import com.intellij.facet.FacetTypeRegistry import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider -import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl +import com.intellij.openapi.externalSystem.service.project.IdeModelsProviderImpl import com.intellij.openapi.module.Module import com.intellij.openapi.module.impl.scopes.LibraryScopeBase import com.intellij.openapi.project.Project @@ -121,21 +121,20 @@ private fun ideaModelDependencies( return result.filterNot { it is LibraryInfo && it.platform != platform } } -fun Module.findImplementedModuleNames(modelsProvider: IdeModifiableModelsProvider): List { - val facetModel = modelsProvider.getModifiableFacetModel(this) - val facet = facetModel.findFacet( - KotlinFacetType.TYPE_ID, - FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName +fun Module.findImplementedModuleNames(): List { + val facet = FacetManager.getInstance(this).findFacet( + KotlinFacetType.TYPE_ID, + FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName ) return facet?.configuration?.settings?.implementedModuleNames ?: emptyList() } fun Module.findImplementedModules() = this.cached>( CachedValueProvider { - val modelsProvider = IdeModifiableModelsProviderImpl(project) + val modelsProvider = IdeModelsProviderImpl(project) CachedValueProvider.Result( - findImplementedModuleNames(modelsProvider).mapNotNull { modelsProvider.findIdeModule(it) }, - ProjectRootModificationTracker.getInstance(project) + findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) }, + ProjectRootModificationTracker.getInstance(project) ) } ) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt index b4c84379f81..b33f80e796f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt @@ -5,23 +5,22 @@ package org.jetbrains.kotlin.idea.caches.project -import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider -import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl import com.intellij.openapi.module.Module +import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.roots.ProjectRootModificationTracker import com.intellij.psi.util.CachedValueProvider import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.ModuleDescriptor -fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider) = - modelsProvider.modules.filter { name in it.findImplementedModuleNames(modelsProvider) } +fun Module.findImplementingModules() = + ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() } val Module.implementingModules: List get() = cached(CachedValueProvider { CachedValueProvider.Result( - findImplementingModules(IdeModifiableModelsProviderImpl(project)), - ProjectRootModificationTracker.getInstance(project) + findImplementingModules(), + ProjectRootModificationTracker.getInstance(project) ) }) @@ -32,11 +31,8 @@ private fun Module.getModuleInfo(baseModuleSourceInfo: ModuleSourceInfo): Module else -> null } -private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo): List { - val modelsProvider = IdeModifiableModelsProviderImpl(project) - val implementingModules = findImplementingModules(modelsProvider) - return implementingModules.mapNotNull { it.getModuleInfo(moduleSourceInfo) } -} +private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo) = + findImplementingModules().mapNotNull { it.getModuleInfo(moduleSourceInfo) } val ModuleDescriptor.implementingDescriptors: List get() { diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt index b2aeba6c34d..86accb59fe0 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt @@ -110,10 +110,14 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr val sdkVersion = module.sdk?.version if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) { val modelsProvider = IdeModifiableModelsProviderImpl(project) - val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true) - val facetSettings = facet.configuration.settings - facetSettings.initializeIfNeeded(module, null, TargetPlatformKind.Jvm(JvmTarget.JVM_1_8)) - (facetSettings.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget = "1.8" + try { + val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true) + val facetSettings = facet.configuration.settings + facetSettings.initializeIfNeeded(module, null, TargetPlatformKind.Jvm(JvmTarget.JVM_1_8)) + (facetSettings.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget = "1.8" + } finally { + modelsProvider.dispose() + } } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt index 26dfaca4325..56ffaa8bc1e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt +++ b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.idea -import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl import com.intellij.openapi.project.Project import com.intellij.openapi.roots.JdkOrderEntry import com.intellij.openapi.roots.ModuleRootManager @@ -24,7 +23,7 @@ class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() { val module = ProjectFileIndex.getInstance(project).getModuleForFile(file) if (module?.targetPlatform != TargetPlatformKind.Common) return null - val implementingModule = module.findImplementingModules(IdeModifiableModelsProviderImpl(project)).find { + val implementingModule = module.findImplementingModules().find { it.targetPlatform is TargetPlatformKind.Jvm } ?: return null diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeModuleExperimentalFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeModuleExperimentalFix.kt index ab453c00b4e..da0f79d10bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeModuleExperimentalFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeModuleExperimentalFix.kt @@ -35,14 +35,18 @@ class MakeModuleExperimentalFix( override fun invoke(project: Project, editor: Editor?, file: KtFile) { val modelsProvider = IdeModifiableModelsProviderImpl(project) - val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true) - val facetSettings = facet.configuration.settings - val compilerSettings = facetSettings.compilerSettings ?: CompilerSettings().also { - facetSettings.compilerSettings = it - } + try { + val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true) + val facetSettings = facet.configuration.settings + val compilerSettings = facetSettings.compilerSettings ?: CompilerSettings().also { + facetSettings.compilerSettings = it + } - compilerSettings.additionalArguments += " $compilerArgument" - facetSettings.updateMergedArguments() + compilerSettings.additionalArguments += " $compilerArgument" + facetSettings.updateMergedArguments() + } finally { + modelsProvider.dispose() + } } override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean {