diff --git a/idea/testData/decompiler/decompiledText/ClassWithClassObject.expected.kt b/idea/testData/decompiler/decompiledText/ClassWithClassObject.expected.kt index 55b53aee112..5159b9b0459 100644 --- a/idea/testData/decompiler/decompiledText/ClassWithClassObject.expected.kt +++ b/idea/testData/decompiler/decompiledText/ClassWithClassObject.expected.kt @@ -5,9 +5,9 @@ package test public final class ClassWithClassObject public constructor() { public companion object { - public final val a: test.A /* compiled code */ + public final val a: test.ClassWithClassObject.A /* compiled code */ - public final var b: test.B /* compiled code */ + public final var b: test.ClassWithClassObject.B /* compiled code */ public final val kotlin.Int.g: kotlin.Int /* compiled code */ @@ -21,4 +21,10 @@ public final class ClassWithClassObject public constructor() { } public final fun f(): kotlin.Unit { /* compiled code */ } + + public final class A public constructor() { + } + + public final class B public constructor() { + } } \ No newline at end of file diff --git a/idea/testData/decompiler/decompiledText/ClassWithClassObject/ClassWithClassObject.kt b/idea/testData/decompiler/decompiledText/ClassWithClassObject/ClassWithClassObject.kt index fd0abaf2629..fb62e8af65b 100644 --- a/idea/testData/decompiler/decompiledText/ClassWithClassObject/ClassWithClassObject.kt +++ b/idea/testData/decompiler/decompiledText/ClassWithClassObject/ClassWithClassObject.kt @@ -25,10 +25,10 @@ class ClassWithClassObject { throw RuntimeException() } } -} -class B { -} + class B { + } -class A { + class A { + } } diff --git a/idea/testData/decompiler/decompiledText/Modifiers.expected.kt b/idea/testData/decompiler/decompiledText/Modifiers.expected.kt index 6cdcdb57a09..eb107920cc3 100644 --- a/idea/testData/decompiler/decompiledText/Modifiers.expected.kt +++ b/idea/testData/decompiler/decompiledText/Modifiers.expected.kt @@ -11,4 +11,7 @@ public final data class Modifiers public constructor(x: kotlin.Int) { public final inline fun inlined(crossinline arg1: () -> kotlin.Unit, noinline arg2: () -> kotlin.Unit): kotlin.Unit { /* compiled code */ } public final tailrec fun sum(x: kotlin.Long, sum: kotlin.Long): kotlin.Long { /* compiled code */ } + + public final annotation class Ann public constructor() : kotlin.Annotation { + } } diff --git a/idea/testData/decompiler/decompiledText/Modifiers/Modifiers.kt b/idea/testData/decompiler/decompiledText/Modifiers/Modifiers.kt index 5f181e8a291..e3c60ef3cbf 100644 --- a/idea/testData/decompiler/decompiledText/Modifiers/Modifiers.kt +++ b/idea/testData/decompiler/decompiledText/Modifiers/Modifiers.kt @@ -7,6 +7,6 @@ data class Modifiers(val x: Int) { } inline fun inlined(crossinline arg1: ()->Unit, noinline arg2: ()->Unit): Unit {} -} -annotation class Ann + annotation class Ann +} diff --git a/idea/testData/decompiler/decompiledTextJs/TestPackage.expected.kt b/idea/testData/decompiler/decompiledTextJs/TestPackage.expected.kt index b830cc58f70..7b9e3f8528e 100644 --- a/idea/testData/decompiler/decompiledTextJs/TestPackage.expected.kt +++ b/idea/testData/decompiler/decompiledTextJs/TestPackage.expected.kt @@ -9,4 +9,13 @@ public val p: kotlin.Int /* compiled code */ public fun f(): kotlin.Unit { /* compiled code */ } -public fun kotlin.Int.plus(i: kotlin.Int /* = compiled code */): kotlin.Int { /* compiled code */ } \ No newline at end of file +public fun kotlin.Int.plus(i: kotlin.Int /* = compiled code */): kotlin.Int { /* compiled code */ } + +public final class Class public constructor() { + public final class Nested public constructor() { + } +} + +public interface Interface { +} + diff --git a/idea/testData/decompiler/decompiledTextJs/TestPackage/TestPackage.kt b/idea/testData/decompiler/decompiledTextJs/TestPackage/TestPackage.kt index e841d262004..6c16e362629 100644 --- a/idea/testData/decompiler/decompiledTextJs/TestPackage/TestPackage.kt +++ b/idea/testData/decompiler/decompiledTextJs/TestPackage/TestPackage.kt @@ -6,5 +6,8 @@ private var i = 2 fun Int.plus(i: Int = 1) = this + i -class ShouldNotBeVisible1 -interface ShouldNotBeVisible2 +class Class { + class Nested +} + +interface Interface diff --git a/idea/testData/decompiler/decompiledTextJs/TypeAliases.expected.kt b/idea/testData/decompiler/decompiledTextJs/TypeAliases.expected.kt new file mode 100644 index 00000000000..f6d285423c5 --- /dev/null +++ b/idea/testData/decompiler/decompiledTextJs/TypeAliases.expected.kt @@ -0,0 +1,23 @@ +// IntelliJ API Decompiler stub source generated from a class file +// Implementation of methods is not available + +package test + +@kotlin.annotation.Target public final annotation class Ann public constructor(value: kotlin.String) : kotlin.Annotation { + public final val value: kotlin.String /* compiled code */ +} + +public final class Outer public constructor() { + public final inner class Inner public constructor() { + @kotlin.Suppress public typealias TA = kotlin.collections.Map, kotlin.collections.Map> + } +} + +public final class TypeAliases public constructor() { + public final fun foo(a: dependency.A /* = () -> kotlin.Unit */, b: test.TypeAliases.B /* = (dependency.A /* = () -> kotlin.Unit */) -> kotlin.Unit */, ta: test.Outer.Inner.TA /* = kotlin.collections.Map, kotlin.collections.Map> */): kotlin.Unit { /* compiled code */ } + + @kotlin.Suppress public typealias B = (dependency.A) -> kotlin.Unit + + @test.Ann @kotlin.Suppress private typealias Parametrized = kotlin.collections.Map +} + diff --git a/idea/testData/decompiler/decompiledText/TypeAliases/Dependency.kt b/idea/testData/decompiler/decompiledTextJs/TypeAliases/Dependency.kt similarity index 100% rename from idea/testData/decompiler/decompiledText/TypeAliases/Dependency.kt rename to idea/testData/decompiler/decompiledTextJs/TypeAliases/Dependency.kt diff --git a/idea/testData/decompiler/decompiledText/TypeAliases/TypeAliases.kt b/idea/testData/decompiler/decompiledTextJs/TypeAliases/TypeAliases.kt similarity index 100% rename from idea/testData/decompiler/decompiledText/TypeAliases/TypeAliases.kt rename to idea/testData/decompiler/decompiledTextJs/TypeAliases/TypeAliases.kt diff --git a/idea/testData/decompiler/decompiledText/TypeAliases.expected.kt b/idea/testData/decompiler/decompiledTextJvm/TypeAliases.expected.kt similarity index 100% rename from idea/testData/decompiler/decompiledText/TypeAliases.expected.kt rename to idea/testData/decompiler/decompiledTextJvm/TypeAliases.expected.kt diff --git a/idea/testData/decompiler/decompiledTextJvm/TypeAliases/Dependency.kt b/idea/testData/decompiler/decompiledTextJvm/TypeAliases/Dependency.kt new file mode 100644 index 00000000000..f6e5c1108e8 --- /dev/null +++ b/idea/testData/decompiler/decompiledTextJvm/TypeAliases/Dependency.kt @@ -0,0 +1,7 @@ +package dependency + +typealias A = () -> Unit + +fun foo(a: A) { + a.invoke() +} diff --git a/idea/testData/decompiler/decompiledTextJvm/TypeAliases/TypeAliases.kt b/idea/testData/decompiler/decompiledTextJvm/TypeAliases/TypeAliases.kt new file mode 100644 index 00000000000..6f0e7ce918d --- /dev/null +++ b/idea/testData/decompiler/decompiledTextJvm/TypeAliases/TypeAliases.kt @@ -0,0 +1,28 @@ +package test + +import dependency.* +import kotlin.annotation.AnnotationTarget + +class Outer { + inner class Inner { + @Suppress("TOPLEVEL_TYPEALIASES_ONLY") + typealias TA = Map, Map> + } +} + +@Target(AnnotationTarget.TYPEALIAS) +annotation class Ann(val value: String) + +class TypeAliases { + + @Suppress("TOPLEVEL_TYPEALIASES_ONLY") + typealias B = (A) -> Unit + + fun foo(a: A, b: B, ta: Outer.Inner.TA) { + b.invoke(a) + } + + @Ann("OK") + @Suppress("TOPLEVEL_TYPEALIASES_ONLY") + private typealias Parametrized = Map +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextFromJsMetadataTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextFromJsMetadataTest.kt index a26031316b0..66ea9192f03 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextFromJsMetadataTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextFromJsMetadataTest.kt @@ -23,10 +23,12 @@ import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.ModuleKind import org.jetbrains.kotlin.idea.test.configureAs +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol import kotlin.test.assertTrue abstract class AbstractDecompiledTextFromJsMetadataTest(baseDirectory: String) : AbstractDecompiledTextBaseTest(baseDirectory, true) { - override fun getFileToDecompile(): VirtualFile = getKjsmFile(TEST_PACKAGE, getTestName(false), myModule!!) + override fun getFileToDecompile(): VirtualFile = getKjsmFile(TEST_PACKAGE, myModule!!) override fun checkPsiFile(psiFile: PsiFile) = assertTrue(psiFile is KtDecompiledFile, "Expecting decompiled kotlin javascript file, was: " + psiFile.javaClass) @@ -41,13 +43,9 @@ abstract class AbstractCommonDecompiledTextFromJsMetadataTest : AbstractDecompil abstract class AbstractJsDecompiledTextFromJsMetadataTest : AbstractDecompiledTextFromJsMetadataTest("/decompiler/decompiledTextJs") -fun getKjsmFile( - packageName: String, - className: String, - module: Module -): VirtualFile { +fun getKjsmFile(packageName: String, module: Module): VirtualFile { val root = findTestLibraryRoot(module)!! root.refresh(false, true) val packageDir = root.findFileByRelativePath(JdkAndMockLibraryProjectDescriptor.LIBRARY_NAME + "/" + packageName.replace(".", "/"))!! - return packageDir.findChild(className + ".kjsm")!! -} \ No newline at end of file + return packageDir.findChild(JsSerializerProtocol.getKjsmFilePath(FqName(packageName)).substringAfterLast('/'))!! +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextFromJsMetadataTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextFromJsMetadataTestGenerated.java index 4d49557f04a..c02059a04d7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextFromJsMetadataTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextFromJsMetadataTestGenerated.java @@ -144,12 +144,6 @@ public class CommonDecompiledTextFromJsMetadataTestGenerated extends AbstractCom doTest(fileName); } - @TestMetadata("TypeAliases") - public void testTypeAliases() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/decompiler/decompiledText/TypeAliases/"); - doTest(fileName); - } - @TestMetadata("TypeModifiers") public void testTypeModifiers() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/decompiler/decompiledText/TypeModifiers/"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextTestGenerated.java index 5cebad60402..e1d29e4da69 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/CommonDecompiledTextTestGenerated.java @@ -150,12 +150,6 @@ public class CommonDecompiledTextTestGenerated extends AbstractCommonDecompiledT doTest(fileName); } - @TestMetadata("TypeAliases") - public void testTypeAliases() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/decompiler/decompiledText/TypeAliases/"); - doTest(fileName); - } - @TestMetadata("TypeModifiers") public void testTypeModifiers() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/decompiler/decompiledText/TypeModifiers/"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JsDecompiledTextFromJsMetadataTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JsDecompiledTextFromJsMetadataTestGenerated.java index cd674a96450..12a7c64578f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JsDecompiledTextFromJsMetadataTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JsDecompiledTextFromJsMetadataTestGenerated.java @@ -42,4 +42,10 @@ public class JsDecompiledTextFromJsMetadataTestGenerated extends AbstractJsDecom doTest(fileName); } + @TestMetadata("TypeAliases") + public void testTypeAliases() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/decompiler/decompiledTextJs/TypeAliases/"); + doTest(fileName); + } + } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JvmDecompiledTextTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JvmDecompiledTextTestGenerated.java index c7c252710c4..1282bb712ec 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JvmDecompiledTextTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/JvmDecompiledTextTestGenerated.java @@ -54,4 +54,10 @@ public class JvmDecompiledTextTestGenerated extends AbstractJvmDecompiledTextTes doTest(fileName); } + @TestMetadata("TypeAliases") + public void testTypeAliases() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/decompiler/decompiledTextJvm/TypeAliases/"); + doTest(fileName); + } + }