diff --git a/idea/testData/decompiler/navigation/decompiled/ExtraKt.kt b/idea/testData/decompiler/navigation/decompiled/ExtraKt.kt new file mode 100644 index 00000000000..2b724092467 --- /dev/null +++ b/idea/testData/decompiler/navigation/decompiled/ExtraKt.kt @@ -0,0 +1,6 @@ +// IntelliJ API Decompiler stub source generated from a class file +// Implementation of methods is not available + +package testData.libraries + +[public fun func(str: kotlin.String): kotlin.Unit { /* compiled code */ }] \ No newline at end of file diff --git a/idea/testData/decompiler/navigation/decompiled/LibrariesPackage.kt b/idea/testData/decompiler/navigation/decompiled/LibrariesPackage.kt index 0ff82c947d7..f19c0eabc34 100644 --- a/idea/testData/decompiler/navigation/decompiled/LibrariesPackage.kt +++ b/idea/testData/decompiler/navigation/decompiled/LibrariesPackage.kt @@ -1,38 +1,4 @@ // IntelliJ API Decompiler stub source generated from a class file // Implementation of methods is not available -package testData.libraries - -[public val globalVal: testData.libraries.Pair /* compiled code */] - -[public val globalValWithGetter: kotlin.Long /* compiled code */] - -[public val kotlin.Int.exProp: kotlin.Int /* compiled code */] - -[public val kotlin.String.exProp: kotlin.String /* compiled code */] - -[public val testData.libraries.Pair.exProp: kotlin.String /* compiled code */] - -[public fun funWithTypeParam(t: T): kotlin.Unit { /* compiled code */ }] - -[public fun funWithTypeParam(t: T): kotlin.Unit { /* compiled code */ }] - -[public fun func(): kotlin.Unit { /* compiled code */ }] - -[public fun func(cs: kotlin.CharSequence): kotlin.Unit { /* compiled code */ }] - -[public fun func(a: kotlin.Int, b: kotlin.Int): kotlin.Unit { /* compiled code */ }] - -[public fun func(a: kotlin.Int, b: kotlin.String /* = compiled code */): kotlin.Unit { /* compiled code */ }] - -[public fun func(str: kotlin.String): kotlin.Unit { /* compiled code */ }] - -[public fun genericFunc(): T { /* compiled code */ }] - -[public fun main(args: kotlin.Array): kotlin.Unit { /* compiled code */ }] - -[public fun processDouble(d: kotlin.Double): kotlin.Unit { /* compiled code */ }] - -[public fun processDouble(d: testData.libraries.Double): kotlin.Unit { /* compiled code */ }] - -[kotlin.inline public fun T.filter(predicate: (T) -> kotlin.Boolean): T? { /* compiled code */ }] \ No newline at end of file +package testData.libraries \ No newline at end of file diff --git a/idea/testData/decompiler/navigation/decompiled/MainKt.kt b/idea/testData/decompiler/navigation/decompiled/MainKt.kt new file mode 100644 index 00000000000..0a74303ae94 --- /dev/null +++ b/idea/testData/decompiler/navigation/decompiled/MainKt.kt @@ -0,0 +1,36 @@ +// IntelliJ API Decompiler stub source generated from a class file +// Implementation of methods is not available + +package testData.libraries + +[public val globalVal: testData.libraries.Pair /* compiled code */] + +[public val globalValWithGetter: kotlin.Long /* compiled code */] + +[public val kotlin.Int.exProp: kotlin.Int /* compiled code */] + +[public val kotlin.String.exProp: kotlin.String /* compiled code */] + +[public val testData.libraries.Pair.exProp: kotlin.String /* compiled code */] + +[public fun funWithTypeParam(t: T): kotlin.Unit { /* compiled code */ }] + +[public fun funWithTypeParam(t: T): kotlin.Unit { /* compiled code */ }] + +[public fun func(): kotlin.Unit { /* compiled code */ }] + +[public fun func(cs: kotlin.CharSequence): kotlin.Unit { /* compiled code */ }] + +[public fun func(a: kotlin.Int, b: kotlin.Int): kotlin.Unit { /* compiled code */ }] + +[public fun func(a: kotlin.Int, b: kotlin.String /* = compiled code */): kotlin.Unit { /* compiled code */ }] + +[public fun genericFunc(): T { /* compiled code */ }] + +[public fun main(args: kotlin.Array): kotlin.Unit { /* compiled code */ }] + +[public fun processDouble(d: kotlin.Double): kotlin.Unit { /* compiled code */ }] + +[public fun processDouble(d: testData.libraries.Double): kotlin.Unit { /* compiled code */ }] + +[kotlin.inline public fun T.filter(predicate: (T) -> kotlin.Boolean): T? { /* compiled code */ }] \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/AbstractInternalCompiledClassesTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/AbstractInternalCompiledClassesTest.kt index 8982b51f8d2..32decf847fe 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/AbstractInternalCompiledClassesTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/AbstractInternalCompiledClassesTest.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Ki import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.junit.Assert +import kotlin.test.assertFalse public abstract class AbstractInternalCompiledClassesTest : JetLightCodeInsightFixtureTestCase() { private fun isFileWithHeader(predicate: (KotlinClassHeader) -> Boolean) : VirtualFile.() -> Boolean = { @@ -61,6 +62,20 @@ public abstract class AbstractInternalCompiledClassesTest : JetLightCodeInsightF } } + protected fun doTestNoFilesAreBuiltForSyntheticClass(kind: KotlinSyntheticClass.Kind): Unit = + doTestNoClassFilesAreBuiltFor(kind.toString(), isSyntheticClassOfKind(kind)) + + protected fun doTestNoClassFilesAreBuiltFor(fileKind: String, acceptFile: VirtualFile.() -> Boolean) { + val root = NavigateToDecompiledLibraryTest.findTestLibraryRoot(myModule!!)!! + val files = arrayListOf() + root.checkRecursively { + if (acceptFile()) { + files.add(this) + } + } + assert(files.isEmpty()) { "No class files should be built for $fileKind; found ${files.size()} files: $files" } + } + protected fun doTestNoPsiFilesAreBuiltForLocalClass(kind: KotlinClass.Kind): Unit = doTestNoPsiFilesAreBuiltFor(kind.toString(), isClassOfKind(kind)) diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/InternalCompiledClassesTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/InternalCompiledClassesTest.kt index ebb63cd1261..13dd81fb54b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/InternalCompiledClassesTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/InternalCompiledClassesTest.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass.Ki public class InternalCompiledClassesTest : AbstractInternalCompiledClassesTest() { private val TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/decompiler/internalClasses" - fun testPackagePartIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(PACKAGE_PART) + fun testNoPackagePartClassesAreBuilt() = doTestNoFilesAreBuiltForSyntheticClass(PACKAGE_PART) fun testSamWrapperIsInvisible() = doTestNoPsiFilesAreBuiltForSyntheticClass(SAM_WRAPPER) diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java index 6291319223b..b5eafd50b3b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java @@ -92,6 +92,14 @@ public class NavigateToDecompiledLibraryTest extends LightCodeInsightFixtureTest doTest(); } + public void testMainKt() { + doTest(); + } + + public void testExtraKt() { + doTest(); + } + private void doTest() { classFile = getClassFile(PACKAGE, getTestName(false), myModule); PsiFile decompiledPsiFile = PsiManager.getInstance(getProject()).findFile(classFile);