Don't create light classes for platform declarations
#KT-15137 Fixed
This commit is contained in:
+3
-2
@@ -20,6 +20,7 @@ import com.intellij.openapi.util.io.FileUtil
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -69,10 +70,10 @@ object PackagePartClassUtils {
|
|||||||
|
|
||||||
@JvmStatic fun fileHasTopLevelCallables(file: KtFile): Boolean =
|
@JvmStatic fun fileHasTopLevelCallables(file: KtFile): Boolean =
|
||||||
file.declarations.any {
|
file.declarations.any {
|
||||||
it is KtProperty ||
|
(it is KtProperty ||
|
||||||
it is KtNamedFunction ||
|
it is KtNamedFunction ||
|
||||||
it is KtScript ||
|
it is KtScript ||
|
||||||
it is KtTypeAlias
|
it is KtTypeAlias) && !it.hasModifier(KtTokens.PLATFORM_KEYWORD)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic fun getFilePartShortName(fileName: String): String =
|
@JvmStatic fun getFilePartShortName(fileName: String): String =
|
||||||
|
|||||||
+2
-1
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightPsiReferenceList
|
|||||||
import org.jetbrains.kotlin.asJava.hasInterfaceDefaultImpls
|
import org.jetbrains.kotlin.asJava.hasInterfaceDefaultImpls
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -351,7 +352,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
|||||||
|
|
||||||
|
|
||||||
fun create(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
|
fun create(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
|
||||||
if (classOrObject.getContainingKtFile().isScript) {
|
if (classOrObject.getContainingKtFile().isScript || classOrObject.hasModifier(KtTokens.PLATFORM_KEYWORD)) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,13 @@ class KtFileLightClassTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
assertEquals(0, facadeFiles.size)
|
assertEquals(0, facadeFiles.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testNoFacadeForHeaderClass() {
|
||||||
|
val file = myFixture.configureByText("foo.kt", "platform fun foo(): Int") as KtFile
|
||||||
|
assertEquals(0, file.classes.size)
|
||||||
|
val facadeFiles = LightClassGenerationSupport.getInstance(project).findFilesForFacade(FqName("foo.FooKt"), GlobalSearchScope.allScope(project))
|
||||||
|
assertEquals(0, facadeFiles.size)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getTestDataPath(): String? {
|
override fun getTestDataPath(): String? {
|
||||||
return PluginTestCaseBase.getTestDataPathBase() + "/asJava/fileLightClass/"
|
return PluginTestCaseBase.getTestDataPathBase() + "/asJava/fileLightClass/"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ import com.intellij.testFramework.LightProjectDescriptor
|
|||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
|
|
||||||
// see KtFileLightClassTest
|
// see KtFileLightClassTest
|
||||||
@@ -94,6 +96,14 @@ class LightClassFromTextTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
assertEquals(exampleClass, (f.returnType as PsiClassType).resolve())
|
assertEquals(exampleClass, (f.returnType as PsiClassType).resolve())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testHeaderDeclarations() {
|
||||||
|
val contextFile = myFixture.configureByText("Header.kt", "platform class Foo\n\nplatform fun foo()\n") as KtFile
|
||||||
|
val headerClass = contextFile.declarations.single { it is KtClassOrObject }
|
||||||
|
assertEquals(0, headerClass.toLightElements().size)
|
||||||
|
val headerFunction = contextFile.declarations.single { it is KtNamedFunction }
|
||||||
|
assertEquals(0, headerFunction.toLightElements().size)
|
||||||
|
}
|
||||||
|
|
||||||
private fun classesFromText(text: String, fileName: String = "A.kt"): Array<out PsiClass> {
|
private fun classesFromText(text: String, fileName: String = "A.kt"): Array<out PsiClass> {
|
||||||
val file = KtPsiFactory(project).createFileWithLightClassSupport(fileName, text, myFixture.file)
|
val file = KtPsiFactory(project).createFileWithLightClassSupport(fileName, text, myFixture.file)
|
||||||
val classes = file.classes
|
val classes = file.classes
|
||||||
|
|||||||
Reference in New Issue
Block a user