diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt index e2b31af3501..a11ece8ce1c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt @@ -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() file.declarations.filterIsInstance().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 diff --git a/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt index 8b64372ea99..e49569399ed 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt @@ -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) }