From b5fef84e9c323458b8638524a2387e8be02c2b85 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 25 Jan 2017 16:46:56 +0300 Subject: [PATCH] Update tests on decompiled text for JS Because .kjsm files now contain all declarations from the package (contrary to the JVM decompiler which produces one file for one class/package facade), some common decompiled text tests started to behave differently on JVM and JS. Update two of them (Modifiers, ClassWithClassObject) to make results the same, copy another (TypeAliases) to JVM-/JS-specific tests with different outputs --- .../ClassWithClassObject.expected.kt | 10 +++++-- .../ClassWithClassObject.kt | 8 +++--- .../decompiledText/Modifiers.expected.kt | 3 ++ .../decompiledText/Modifiers/Modifiers.kt | 4 +-- .../decompiledTextJs/TestPackage.expected.kt | 11 +++++++- .../TestPackage/TestPackage.kt | 7 +++-- .../decompiledTextJs/TypeAliases.expected.kt | 23 +++++++++++++++ .../TypeAliases/Dependency.kt | 0 .../TypeAliases/TypeAliases.kt | 0 .../TypeAliases.expected.kt | 0 .../TypeAliases/Dependency.kt | 7 +++++ .../TypeAliases/TypeAliases.kt | 28 +++++++++++++++++++ ...bstractDecompiledTextFromJsMetadataTest.kt | 14 ++++------ ...mpiledTextFromJsMetadataTestGenerated.java | 6 ---- .../CommonDecompiledTextTestGenerated.java | 6 ---- ...mpiledTextFromJsMetadataTestGenerated.java | 6 ++++ .../JvmDecompiledTextTestGenerated.java | 6 ++++ 17 files changed, 108 insertions(+), 31 deletions(-) create mode 100644 idea/testData/decompiler/decompiledTextJs/TypeAliases.expected.kt rename idea/testData/decompiler/{decompiledText => decompiledTextJs}/TypeAliases/Dependency.kt (100%) rename idea/testData/decompiler/{decompiledText => decompiledTextJs}/TypeAliases/TypeAliases.kt (100%) rename idea/testData/decompiler/{decompiledText => decompiledTextJvm}/TypeAliases.expected.kt (100%) create mode 100644 idea/testData/decompiler/decompiledTextJvm/TypeAliases/Dependency.kt create mode 100644 idea/testData/decompiler/decompiledTextJvm/TypeAliases/TypeAliases.kt 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); + } + }