KtFile.getClasses() returns empty array for non-jvm files
This commit is contained in:
+9
-1
@@ -12,11 +12,13 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.util.isInDumbMode
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtFileClassProvider
|
||||
import org.jetbrains.kotlin.psi.analysisContext
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||
|
||||
class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) :
|
||||
KtFileClassProvider {
|
||||
@@ -33,7 +35,13 @@ class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) :
|
||||
val result = arrayListOf<PsiClass>()
|
||||
file.declarations.filterIsInstance<KtClassOrObject>().map { it.toLightClass() }.filterNotNullTo(result)
|
||||
|
||||
val moduleInfo = file.getModuleInfoPreferringJvmPlatform()
|
||||
val moduleInfo = file.getModuleInfo()
|
||||
// prohibit obtaining light classes for non-jvm modules trough KtFiles
|
||||
// common files might be in fact compiled to jvm and thus correspond to a PsiClass
|
||||
// this API does not provide context (like GSS) to be able to determine if this file is in fact seen through a jvm module
|
||||
// this also fixes a problem where a Java JUnit run configuration producer would produce run configurations for a common file
|
||||
if (moduleInfo.platform !is JvmPlatform) return emptyArray()
|
||||
|
||||
val jvmClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
||||
val fileClassFqName = file.javaFileFacadeFqName
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
class KtFileLightClassTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
@@ -93,7 +94,7 @@ class KtFileLightClassTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
|
||||
val injectedFile = (editor as? EditorWindow)?.injectedFile
|
||||
assertEquals("Wrong injection language", "kotlin", injectedFile?.language?.id)
|
||||
assertEquals("Injected class should be `A`", "A", (injectedFile as KtFile).classes.single().name)
|
||||
assertEquals("Injected class should be `A`", "A", ((injectedFile as KtFile).declarations.single() as KtClass).toLightClass()!!.name)
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user