[SLC] SymbolKotlinAsJavaSupport: implement getKotlinInternalClasses
^KTIJ-24067
This commit is contained in:
committed by
Space Team
parent
e81f34d4b0
commit
f9d5534689
+26
-2
@@ -11,6 +11,8 @@ import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analysis.decompiled.light.classes.DecompiledLightClassesFactory
|
||||
import org.jetbrains.kotlin.analysis.decompiled.light.classes.KtLightClassForDecompiledDeclaration
|
||||
import org.jetbrains.kotlin.analysis.decompiler.psi.file.KtClsFile
|
||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.analysis.providers.createAllLibrariesModificationTracker
|
||||
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
||||
@@ -130,8 +132,30 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
||||
|
||||
override fun getScriptClasses(scriptFqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> = error("Should not be called")
|
||||
|
||||
//TODO Implement if necessary for symbol
|
||||
override fun getKotlinInternalClasses(fqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> = emptyList()
|
||||
override fun getKotlinInternalClasses(fqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> {
|
||||
val facadeKtFiles = project.createDeclarationProvider(scope).findInternalFilesForFacade(fqName)
|
||||
if (facadeKtFiles.isEmpty()) return emptyList()
|
||||
|
||||
val partShortName = fqName.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 psiFile = facadeKtFile.manager.findFile(partClassFile) as? KtClsFile ?: facadeKtFile
|
||||
val javaClsClass = DecompiledLightClassesFactory.createClsJavaClassFromVirtualFile(
|
||||
mirrorFile = psiFile,
|
||||
classFile = partClassFile,
|
||||
correspondingClassOrObject = null,
|
||||
project = project,
|
||||
) ?: return@mapNotNull null
|
||||
|
||||
KtLightClassForDecompiledDeclaration(javaClsClass, javaClsClass.parent, psiFile, null)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun findFilesForFacade(facadeFqName: FqName, searchScope: GlobalSearchScope): Collection<KtFile> {
|
||||
return project.createDeclarationProvider(searchScope).findFilesForFacade(facadeFqName)
|
||||
|
||||
+6
@@ -319,6 +319,12 @@ public class SymbolLightClassesByFqNameForLibraryTestGenerated extends AbstractS
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("InternalFacadeClass.kt")
|
||||
public void testInternalFacadeClass() throws Exception {
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultiFile.kt")
|
||||
public void testMultiFile() throws Exception {
|
||||
|
||||
+6
@@ -319,6 +319,12 @@ public class SymbolLightClassesParentingForLibraryTestGenerated extends Abstract
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("InternalFacadeClass.kt")
|
||||
public void testInternalFacadeClass() throws Exception {
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultiFile.kt")
|
||||
public void testMultiFile() throws Exception {
|
||||
|
||||
+6
@@ -461,6 +461,12 @@ public class SymbolLightClassesByFqNameForSourceTestGenerated extends AbstractSy
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("InternalFacadeClass.kt")
|
||||
public void testInternalFacadeClass() throws Exception {
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultiFile.kt")
|
||||
public void testMultiFile() throws Exception {
|
||||
|
||||
+6
@@ -461,6 +461,12 @@ public class SymbolLightClassesParentingForSourceTestGenerated extends AbstractS
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("InternalFacadeClass.kt")
|
||||
public void testInternalFacadeClass() throws Exception {
|
||||
runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultiFile.kt")
|
||||
public void testMultiFile() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user