diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt index 4208e501587..537e912efe4 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt @@ -149,6 +149,11 @@ class CliLightClassGenerationSupport(project: Project) : LightClassGenerationSup KtLightClassForFacade.createForFacade(psiManager, facadeFqName, scope, filesForFacade)) } + override fun getMultifilePartClasses(partFqName: FqName, scope: GlobalSearchScope): Collection { + // + return emptyList() + } + override fun findFilesForFacade(facadeFqName: FqName, scope: GlobalSearchScope): Collection { if (facadeFqName.isRoot) return emptyList() diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java index 0f6837728d6..a2a13658070 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java @@ -92,6 +92,7 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM findClassesAndObjects(qualifiedName, scope, answer); answer.addAll(lightClassGenerationSupport.getFacadeClasses(qualifiedName, scope)); + answer.addAll(lightClassGenerationSupport.getMultifilePartClasses(qualifiedName, scope)); return sortByClasspath(answer, scope).toArray(new PsiClass[answer.size()]); } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java index fec95f17d92..9ec68d37c08 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java @@ -75,6 +75,9 @@ public abstract class LightClassGenerationSupport { @NotNull public abstract Collection getFacadeClasses(@NotNull FqName facadeFqName, @NotNull GlobalSearchScope scope); + @NotNull + public abstract Collection getMultifilePartClasses(@NotNull FqName partFqName, @NotNull GlobalSearchScope scope); + @NotNull public abstract Collection getFacadeClassesInPackage(@NotNull FqName packageFqName, @NotNull GlobalSearchScope scope); @@ -86,5 +89,4 @@ public abstract class LightClassGenerationSupport { @NotNull public abstract LightClassConstructionContext getContextForFacade(@NotNull Collection files); - } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index f0974d44412..67d08fbe662 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -174,6 +174,24 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG } } + override fun getMultifilePartClasses(partFqName: FqName, scope: GlobalSearchScope): Collection { + val facadeKtFiles = StaticFacadeIndexUtil.getMultifileClassForPart(partFqName, scope, project) + val partShortName = partFqName.shortName().asString() + val partClassFileShortName = partShortName + ".class" + + return facadeKtFiles.mapNotNull { facadeKtFile -> + if (facadeKtFile is KtClsFile) { + val partClassFile = facadeKtFile.virtualFile.parent.findChild(partClassFileShortName) ?: return@mapNotNull null + val javaClsClass = createClsJavaClassFromVirtualFile(facadeKtFile, partClassFile, null) ?: return@mapNotNull null + KtLightClassForDecompiledDeclaration(javaClsClass, null, facadeKtFile) + } + else { + // TODO should we build light classes for parts from source? + null + } + } + } + fun createLightClassForFileFacade( facadeFqName: FqName, facadeFiles: List,