Misc: Eliminate instances of IdeModifiableModelsProviderImpl or dispose them after use
This commit is contained in:
@@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.project
|
package org.jetbrains.kotlin.idea.caches.project
|
||||||
|
|
||||||
|
import com.intellij.facet.FacetManager
|
||||||
import com.intellij.facet.FacetTypeRegistry
|
import com.intellij.facet.FacetTypeRegistry
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
|
import com.intellij.openapi.externalSystem.service.project.IdeModelsProviderImpl
|
||||||
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
|
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.module.impl.scopes.LibraryScopeBase
|
import com.intellij.openapi.module.impl.scopes.LibraryScopeBase
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
@@ -121,21 +121,20 @@ private fun ideaModelDependencies(
|
|||||||
return result.filterNot { it is LibraryInfo && it.platform != platform }
|
return result.filterNot { it is LibraryInfo && it.platform != platform }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Module.findImplementedModuleNames(modelsProvider: IdeModifiableModelsProvider): List<String> {
|
fun Module.findImplementedModuleNames(): List<String> {
|
||||||
val facetModel = modelsProvider.getModifiableFacetModel(this)
|
val facet = FacetManager.getInstance(this).findFacet(
|
||||||
val facet = facetModel.findFacet(
|
KotlinFacetType.TYPE_ID,
|
||||||
KotlinFacetType.TYPE_ID,
|
FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName
|
||||||
FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName
|
|
||||||
)
|
)
|
||||||
return facet?.configuration?.settings?.implementedModuleNames ?: emptyList()
|
return facet?.configuration?.settings?.implementedModuleNames ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Module.findImplementedModules() = this.cached<List<Module>>(
|
fun Module.findImplementedModules() = this.cached<List<Module>>(
|
||||||
CachedValueProvider {
|
CachedValueProvider {
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
val modelsProvider = IdeModelsProviderImpl(project)
|
||||||
CachedValueProvider.Result(
|
CachedValueProvider.Result(
|
||||||
findImplementedModuleNames(modelsProvider).mapNotNull { modelsProvider.findIdeModule(it) },
|
findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) },
|
||||||
ProjectRootModificationTracker.getInstance(project)
|
ProjectRootModificationTracker.getInstance(project)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
+7
-11
@@ -5,23 +5,22 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.project
|
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.Module
|
||||||
|
import com.intellij.openapi.module.ModuleManager
|
||||||
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
import com.intellij.psi.util.CachedValueProvider
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
|
||||||
fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider) =
|
fun Module.findImplementingModules() =
|
||||||
modelsProvider.modules.filter { name in it.findImplementedModuleNames(modelsProvider) }
|
ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() }
|
||||||
|
|
||||||
val Module.implementingModules: List<Module>
|
val Module.implementingModules: List<Module>
|
||||||
get() = cached(CachedValueProvider {
|
get() = cached(CachedValueProvider {
|
||||||
CachedValueProvider.Result(
|
CachedValueProvider.Result(
|
||||||
findImplementingModules(IdeModifiableModelsProviderImpl(project)),
|
findImplementingModules(),
|
||||||
ProjectRootModificationTracker.getInstance(project)
|
ProjectRootModificationTracker.getInstance(project)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -32,11 +31,8 @@ private fun Module.getModuleInfo(baseModuleSourceInfo: ModuleSourceInfo): Module
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo): List<ModuleSourceInfo> {
|
private fun Module.findImplementingModuleInfos(moduleSourceInfo: ModuleSourceInfo) =
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
findImplementingModules().mapNotNull { it.getModuleInfo(moduleSourceInfo) }
|
||||||
val implementingModules = findImplementingModules(modelsProvider)
|
|
||||||
return implementingModules.mapNotNull { it.getModuleInfo(moduleSourceInfo) }
|
|
||||||
}
|
|
||||||
|
|
||||||
val ModuleDescriptor.implementingDescriptors: List<ModuleDescriptor>
|
val ModuleDescriptor.implementingDescriptors: List<ModuleDescriptor>
|
||||||
get() {
|
get() {
|
||||||
|
|||||||
+8
-4
@@ -110,10 +110,14 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr
|
|||||||
val sdkVersion = module.sdk?.version
|
val sdkVersion = module.sdk?.version
|
||||||
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
|
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true)
|
try {
|
||||||
val facetSettings = facet.configuration.settings
|
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true)
|
||||||
facetSettings.initializeIfNeeded(module, null, TargetPlatformKind.Jvm(JvmTarget.JVM_1_8))
|
val facetSettings = facet.configuration.settings
|
||||||
(facetSettings.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget = "1.8"
|
facetSettings.initializeIfNeeded(module, null, TargetPlatformKind.Jvm(JvmTarget.JVM_1_8))
|
||||||
|
(facetSettings.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget = "1.8"
|
||||||
|
} finally {
|
||||||
|
modelsProvider.dispose()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea
|
package org.jetbrains.kotlin.idea
|
||||||
|
|
||||||
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.JdkOrderEntry
|
import com.intellij.openapi.roots.JdkOrderEntry
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
@@ -24,7 +23,7 @@ class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() {
|
|||||||
val module = ProjectFileIndex.getInstance(project).getModuleForFile(file)
|
val module = ProjectFileIndex.getInstance(project).getModuleForFile(file)
|
||||||
if (module?.targetPlatform != TargetPlatformKind.Common) return null
|
if (module?.targetPlatform != TargetPlatformKind.Common) return null
|
||||||
|
|
||||||
val implementingModule = module.findImplementingModules(IdeModifiableModelsProviderImpl(project)).find {
|
val implementingModule = module.findImplementingModules().find {
|
||||||
it.targetPlatform is TargetPlatformKind.Jvm
|
it.targetPlatform is TargetPlatformKind.Jvm
|
||||||
} ?: return null
|
} ?: return null
|
||||||
|
|
||||||
|
|||||||
@@ -35,14 +35,18 @@ class MakeModuleExperimentalFix(
|
|||||||
|
|
||||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true)
|
try {
|
||||||
val facetSettings = facet.configuration.settings
|
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true)
|
||||||
val compilerSettings = facetSettings.compilerSettings ?: CompilerSettings().also {
|
val facetSettings = facet.configuration.settings
|
||||||
facetSettings.compilerSettings = it
|
val compilerSettings = facetSettings.compilerSettings ?: CompilerSettings().also {
|
||||||
}
|
facetSettings.compilerSettings = it
|
||||||
|
}
|
||||||
|
|
||||||
compilerSettings.additionalArguments += " $compilerArgument"
|
compilerSettings.additionalArguments += " $compilerArgument"
|
||||||
facetSettings.updateMergedArguments()
|
facetSettings.updateMergedArguments()
|
||||||
|
} finally {
|
||||||
|
modelsProvider.dispose()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean {
|
override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user