From 618de5fa3272e648909df19f61a803d300b275d4 Mon Sep 17 00:00:00 2001 From: Andrei Klunnyi Date: Mon, 22 Feb 2021 19:21:51 +0100 Subject: [PATCH] KT-45074 [Sealed Interfaces]: when exhaustiveness after gradle reimport Module descriptor names in the form of 'stableName' depend on a build system. See JvmCodegenUtil#getModuleName(). For JPS we get or whereas for Gradle we get top level . This commit changes approach: ModuleDescriptor-to-Module conversion is no longer made by name. ModuleInfo is utilized instead. ^KT-45074 fixed --- .../compiler/IdeSealedClassInheritorsProvider.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IdeSealedClassInheritorsProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IdeSealedClassInheritorsProvider.kt index e3b068dd23d..493726659fd 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IdeSealedClassInheritorsProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IdeSealedClassInheritorsProvider.kt @@ -5,17 +5,18 @@ package org.jetbrains.kotlin.idea.compiler -import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.module.Module import com.intellij.psi.* import com.intellij.psi.search.* import com.intellij.psi.search.searches.ClassInheritorsSearch import com.intellij.psi.search.searches.ClassInheritorsSearch.SearchParameters +import org.jetbrains.kotlin.analyzer.moduleInfo import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.toLightClass -import org.jetbrains.kotlin.codegen.JvmCodegenUtil import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.containingPackage +import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.project.implementedDescriptors import org.jetbrains.kotlin.idea.caches.resolve.util.javaResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.util.resolveToDescriptor @@ -37,11 +38,10 @@ object IdeSealedClassInheritorsProvider : SealedClassInheritorsProvider() { val sealedKtClass = sealedClass.findPsi() as? KtClass ?: return emptyList() val searchScope: SearchScope = if (allowSealedInheritorsInDifferentFilesOfSamePackage) { val module = sealedKtClass.module ?: return emptyList() - val moduleManager = ModuleManager.getInstance(sealedKtClass.project) val modulesScope = sealedClass.module.listCommonModulesIfAny().toMutableList() - .apply { add(sealedClass.module) } - .mapNotNull { moduleManager.findModuleByName(JvmCodegenUtil.getModuleName(it))?.moduleScope } + .apply { add(module) } + .map { it.moduleScope } val mppAwareSearchScope = GlobalSearchScope.union(modulesScope) @@ -69,8 +69,9 @@ object IdeSealedClassInheritorsProvider : SealedClassInheritorsProvider() { .sortedBy(ClassDescriptor::getName) // order needs to be stable (at least for tests) } - private fun ModuleDescriptor.listCommonModulesIfAny(): Collection { + private fun ModuleDescriptor.listCommonModulesIfAny(): Collection { return implementedDescriptors.closure { it.implementedDescriptors } + .mapNotNull { (it.moduleInfo as? ModuleSourceInfo)?.module } } private fun getPackageViaDirectoryService(ktClass: KtClass): PsiPackage? {