MPP: Use new MPP model to find modules for 'expect'/'actual'

#KT-25955 Fixed
This commit is contained in:
Alexey Sedunov
2018-08-07 20:29:59 +03:00
committed by Mikhail Glukhikh
parent 88ac04001d
commit 49b5695664
2 changed files with 22 additions and 5 deletions
@@ -16,14 +16,24 @@ 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
import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.idea.facet.KotlinFacetType
import org.jetbrains.kotlin.idea.facet.KotlinFacetType.Companion.ID
import org.jetbrains.kotlin.idea.util.rootManager
import org.jetbrains.kotlin.resolve.TargetPlatform
internal val Module.isNewMPPModule: Boolean
get() = KotlinFacet.get(this)?.configuration?.settings?.kind?.isNewMPP ?: false
val Module.implementingModules: List<Module>
get() = cached(CachedValueProvider {
val moduleManager = ModuleManager.getInstance(project)
CachedValueProvider.Result(
ModuleManager.getInstance(project).modules.filter { name in it.findImplementedModuleNames() },
if (isNewMPPModule) {
moduleManager.getModuleDependentModules(this)
} else {
moduleManager.modules.filter { name in it.findOldFashionedImplementedModuleNames() }
},
ProjectRootModificationTracker.getInstance(project)
)
})
@@ -31,15 +41,19 @@ val Module.implementingModules: List<Module>
val Module.implementedModules: List<Module>
get() = cached<List<Module>>(
CachedValueProvider {
val modelsProvider = IdeModelsProviderImpl(project)
CachedValueProvider.Result(
findImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) },
if (isNewMPPModule) {
rootManager.dependencies.toList()
} else {
val modelsProvider = IdeModelsProviderImpl(project)
findOldFashionedImplementedModuleNames().mapNotNull { modelsProvider.findIdeModule(it) }
},
ProjectRootModificationTracker.getInstance(project)
)
}
)
private fun Module.findImplementedModuleNames(): List<String> {
private fun Module.findOldFashionedImplementedModuleNames(): List<String> {
val facet = FacetManager.getInstance(this).findFacet(
KotlinFacetType.TYPE_ID,
FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName
@@ -115,7 +115,10 @@ var CommonCompilerArguments.apiVersionView: VersionView
enum class KotlinModuleKind {
DEFAULT,
SOURCE_SET_HOLDER,
COMPILATION_AND_SOURCE_SET_HOLDER
COMPILATION_AND_SOURCE_SET_HOLDER;
val isNewMPP: Boolean
get() = this != DEFAULT
}
class KotlinFacetSettings {