From 25abdf9fdb947f6b8c3c616b994ea70bd81c6135 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 17 Mar 2016 22:26:46 +0300 Subject: [PATCH] Tests for declaration mappings dumping from compiler --- build.xml | 2 +- .../codegen/dumpDeclarations/annotation.json | 18 + .../codegen/dumpDeclarations/annotation.kt | 12 + .../dumpDeclarations/classMembers.json | 158 ++++++++ .../codegen/dumpDeclarations/classMembers.kt | 92 +++++ .../codegen/dumpDeclarations/classes.json | 351 ++++++++++++++++++ .../codegen/dumpDeclarations/classes.kt | 58 +++ .../codegen/dumpDeclarations/interfaces.json | 204 ++++++++++ .../codegen/dumpDeclarations/interfaces.kt | 32 ++ .../dumpDeclarations/localClasses.json | 89 +++++ .../codegen/dumpDeclarations/localClasses.kt | 38 ++ .../multifileFacadeMembers.json | 57 +++ .../multifileFacadeMembers.kt | 42 +++ .../dumpDeclarations/topLevelMembers.json | 49 +++ .../dumpDeclarations/topLevelMembers.kt | 39 ++ .../codegen/AbstractDumpDeclarationsTest.kt | 79 ++++ .../DumpDeclarationsTestGenerated.java | 79 ++++ .../kotlin/generators/tests/GenerateTests.kt | 4 + 18 files changed, 1402 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/dumpDeclarations/annotation.json create mode 100644 compiler/testData/codegen/dumpDeclarations/annotation.kt create mode 100644 compiler/testData/codegen/dumpDeclarations/classMembers.json create mode 100644 compiler/testData/codegen/dumpDeclarations/classMembers.kt create mode 100644 compiler/testData/codegen/dumpDeclarations/classes.json create mode 100644 compiler/testData/codegen/dumpDeclarations/classes.kt create mode 100644 compiler/testData/codegen/dumpDeclarations/interfaces.json create mode 100644 compiler/testData/codegen/dumpDeclarations/interfaces.kt create mode 100644 compiler/testData/codegen/dumpDeclarations/localClasses.json create mode 100644 compiler/testData/codegen/dumpDeclarations/localClasses.kt create mode 100644 compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.json create mode 100644 compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.kt create mode 100644 compiler/testData/codegen/dumpDeclarations/topLevelMembers.json create mode 100644 compiler/testData/codegen/dumpDeclarations/topLevelMembers.kt create mode 100644 compiler/tests/org/jetbrains/kotlin/codegen/AbstractDumpDeclarationsTest.kt create mode 100644 compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java diff --git a/build.xml b/build.xml index 45e1f49f2e3..30362dfac37 100644 --- a/build.xml +++ b/build.xml @@ -926,7 +926,7 @@ - + diff --git a/compiler/testData/codegen/dumpDeclarations/annotation.json b/compiler/testData/codegen/dumpDeclarations/annotation.json new file mode 100644 index 00000000000..ea12df103ee --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/annotation.json @@ -0,0 +1,18 @@ +[ + { + "declaration": "final annotation class Ann : kotlin.Annotation defined in root package", + "visibility": "internal", + "class": "Ann", + "members": [ + {"visibility": "public", "declaration": "final val i: kotlin.Int", "name": "i", "desc": "()I"}, + {"visibility": "public", "declaration": "final val s: kotlin.Short", "name": "s", "desc": "()S"}, + {"visibility": "public", "declaration": "final val f: kotlin.Float", "name": "f", "desc": "()F"}, + {"visibility": "public", "declaration": "final val d: kotlin.Double", "name": "d", "desc": "()D"}, + {"visibility": "public", "declaration": "final val l: kotlin.Long", "name": "l", "desc": "()J"}, + {"visibility": "public", "declaration": "final val b: kotlin.Byte", "name": "b", "desc": "()B"}, + {"visibility": "public", "declaration": "final val bool: kotlin.Boolean", "name": "bool", "desc": "()Z"}, + {"visibility": "public", "declaration": "final val c: kotlin.Char", "name": "c", "desc": "()C"}, + {"visibility": "public", "declaration": "final val str: kotlin.String", "name": "str", "desc": "()Ljava/lang/String;"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/annotation.kt b/compiler/testData/codegen/dumpDeclarations/annotation.kt new file mode 100644 index 00000000000..69f7e6818a0 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/annotation.kt @@ -0,0 +1,12 @@ +@Retention(AnnotationRetention.RUNTIME) +internal annotation class Ann( + val i: Int, + val s: Short, + val f: Float, + val d: Double, + val l: Long, + val b: Byte, + val bool: Boolean, + val c: Char, + val str: String +) \ No newline at end of file diff --git a/compiler/testData/codegen/dumpDeclarations/classMembers.json b/compiler/testData/codegen/dumpDeclarations/classMembers.json new file mode 100644 index 00000000000..6a80caa7385 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/classMembers.json @@ -0,0 +1,158 @@ +[ + { + "declaration": "final class ClassWithProperties defined in root package", + "visibility": "public", + "class": "ClassWithProperties", + "members": [ + {"visibility": "public", "declaration": "final val publicVal: kotlin.Int", "name": "publicVal", "desc": "I"}, + {"visibility": "public", "declaration": "final fun (): kotlin.Int", "name": "getPublicVal", "desc": "()I"}, + {"visibility": "public", "declaration": "final var publicVar: kotlin.Int", "name": "publicVar", "desc": "I"}, + {"visibility": "public", "declaration": "final fun (): kotlin.Int", "name": "getPublicVar", "desc": "()I"}, + {"visibility": "public", "declaration": "final fun (: kotlin.Int): kotlin.Unit", "name": "setPublicVar", "desc": "(I)V"}, + {"visibility": "internal", "declaration": "final val internalVal: kotlin.Long", "name": "internalVal", "desc": "J"}, + {"visibility": "internal", "declaration": "final fun (): kotlin.Long", "name": "getInternalVal$java_integration_test", "desc": "()J"}, + {"visibility": "internal", "declaration": "final var internalVar: kotlin.Long", "name": "internalVar", "desc": "J"}, + {"visibility": "internal", "declaration": "final fun (): kotlin.Long", "name": "getInternalVar$java_integration_test", "desc": "()J"}, + {"visibility": "internal", "declaration": "final fun (: kotlin.Long): kotlin.Unit", "name": "setInternalVar$java_integration_test", "desc": "(J)V"}, + {"visibility": "protected", "declaration": "final val protectedVal: kotlin.String", "name": "protectedVal", "desc": "Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final fun (): kotlin.String", "name": "getProtectedVal", "desc": "()Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final var protectedVar: kotlin.String", "name": "protectedVar", "desc": "Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final fun (): kotlin.String", "name": "getProtectedVar", "desc": "()Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setProtectedVar", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "private", "declaration": "final val privateVal: kotlin.Any?", "name": "privateVal", "desc": "Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "final var privateVar: kotlin.Any?", "name": "privateVar", "desc": "Ljava/lang/Object;"}, + {"visibility": "public", "declaration": "constructor ClassWithProperties()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class ClassWithLateinit defined in root package", + "visibility": "public", + "class": "ClassWithLateinit", + "members": [ + {"visibility": "public", "declaration": "final lateinit var publicVar: kotlin.String", "name": "publicVar", "desc": "Ljava/lang/String;"}, + {"visibility": "public", "declaration": "final fun (): kotlin.String", "name": "getPublicVar", "desc": "()Ljava/lang/String;"}, + {"visibility": "public", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setPublicVar", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "public", "declaration": "final lateinit var publicVarInternalSet: kotlin.String", "name": "publicVarInternalSet", "desc": "Ljava/lang/String;"}, + {"visibility": "public", "declaration": "final fun (): kotlin.String", "name": "getPublicVarInternalSet", "desc": "()Ljava/lang/String;"}, + {"visibility": "internal", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setPublicVarInternalSet$java_integration_test", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "internal", "declaration": "final lateinit var internalVar: kotlin.String", "name": "internalVar", "desc": "Ljava/lang/String;"}, + {"visibility": "internal", "declaration": "final fun (): kotlin.String", "name": "getInternalVar$java_integration_test", "desc": "()Ljava/lang/String;"}, + {"visibility": "internal", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setInternalVar$java_integration_test", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "internal", "declaration": "final lateinit var internalVarPrivateSet: kotlin.String", "name": "internalVarPrivateSet", "desc": "Ljava/lang/String;"}, + {"visibility": "internal", "declaration": "final fun (): kotlin.String", "name": "getInternalVarPrivateSet$java_integration_test", "desc": "()Ljava/lang/String;"}, + {"visibility": "private", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setInternalVarPrivateSet", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "protected", "declaration": "final lateinit var protectedVar: kotlin.String", "name": "protectedVar", "desc": "Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final fun (): kotlin.String", "name": "getProtectedVar", "desc": "()Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setProtectedVar", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "protected", "declaration": "final lateinit var protectedVarPrivateSet: kotlin.String", "name": "protectedVarPrivateSet", "desc": "Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final fun (): kotlin.String", "name": "getProtectedVarPrivateSet", "desc": "()Ljava/lang/String;"}, + {"visibility": "private", "declaration": "final fun (: kotlin.String): kotlin.Unit", "name": "setProtectedVarPrivateSet", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "private", "declaration": "final lateinit var privateVar: kotlin.Any", "name": "privateVar", "desc": "Ljava/lang/Object;"}, + {"visibility": "public", "declaration": "constructor ClassWithLateinit()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class ClassWithFields defined in root package", + "visibility": "public", + "class": "ClassWithFields", + "members": [ + {"visibility": "public", "declaration": "final val publicVal: kotlin.Int", "name": "publicVal", "desc": "I"}, + {"visibility": "public", "declaration": "final var publicVar: kotlin.Int", "name": "publicVar", "desc": "I"}, + {"visibility": "internal", "declaration": "final val internalVal: kotlin.Long", "name": "internalVal", "desc": "J"}, + {"visibility": "internal", "declaration": "final var internalVar: kotlin.Long", "name": "internalVar", "desc": "J"}, + {"visibility": "protected", "declaration": "final val protectedVal: kotlin.String", "name": "protectedVal", "desc": "Ljava/lang/String;"}, + {"visibility": "protected", "declaration": "final var protectedVar: kotlin.String", "name": "protectedVar", "desc": "Ljava/lang/String;"}, + {"visibility": "public", "declaration": "constructor ClassWithFields()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class ClassWithConstructors defined in root package", + "visibility": "public", + "class": "ClassWithConstructors", + "members": [ + {"visibility": "public", "declaration": "final val a: kotlin.Any", "name": "a", "desc": "Ljava/lang/Object;"}, + {"visibility": "public", "declaration": "final fun (): kotlin.Any", "name": "getA", "desc": "()Ljava/lang/Object;"}, + {"visibility": "public", "declaration": "constructor ClassWithConstructors(a: kotlin.Any, b: kotlin.Int)", "name": "", "desc": "(Ljava/lang/Object;I)V"}, + {"visibility": "public", "declaration": "constructor ClassWithConstructors(a: kotlin.String)", "name": "", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "internal", "declaration": "constructor ClassWithConstructors(a: kotlin.Int)", "name": "", "desc": "(I)V"}, + {"visibility": "protected", "declaration": "constructor ClassWithConstructors(a: kotlin.Any)", "name": "", "desc": "(Ljava/lang/Object;)V"} + ] + }, + { + "declaration": "final class ClassWithFunctions defined in root package", + "visibility": "public", + "class": "ClassWithFunctions", + "members": [ + {"visibility": "public", "declaration": "final fun publicFun(): kotlin.Unit", "name": "publicFun", "desc": "()V"}, + {"visibility": "internal", "declaration": "final fun internalFun(param1: kotlin.Int): kotlin.Unit", "name": "internalFun$java_integration_test", "desc": "(I)V"}, + {"visibility": "protected", "declaration": "final fun protectedFun(a: kotlin.String, b: kotlin.Long): kotlin.Unit", "name": "protectedFun", "desc": "(Ljava/lang/String;J)V"}, + {"visibility": "private", "declaration": "final fun privateFun(x: kotlin.Any): kotlin.Unit", "name": "privateFun", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "internal", "declaration": "final fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads$java_integration_test", "desc": "(Ljava/lang/String;Ljava/lang/Long;)V"}, + {"visibility": "internal", "declaration": "final fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads$java_integration_test$default", "desc": "(LClassWithFunctions;Ljava/lang/String;Ljava/lang/Long;ILjava/lang/Object;)V"}, + {"visibility": "internal", "declaration": "final fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads$java_integration_test", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "internal", "declaration": "final fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads$java_integration_test", "desc": "()V"}, + {"visibility": "public", "declaration": "constructor ClassWithFunctions()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjectWithProperties defined in root package", + "visibility": "public", + "class": "ObjectWithProperties", + "members": [ + {"visibility": "public", "declaration": "final val publicVal: kotlin.Int", "name": "publicVal", "desc": "I"}, + {"visibility": "public", "declaration": "final fun (): kotlin.Int", "name": "getPublicVal", "desc": "()I"}, + {"visibility": "public", "declaration": "final var publicVar: kotlin.Int", "name": "publicVar", "desc": "I"}, + {"visibility": "public", "declaration": "final fun (): kotlin.Int", "name": "getPublicVar", "desc": "()I"}, + {"visibility": "public", "declaration": "final fun (: kotlin.Int): kotlin.Unit", "name": "setPublicVar", "desc": "(I)V"}, + {"visibility": "internal", "declaration": "final val internalVal: kotlin.Long", "name": "internalVal", "desc": "J"}, + {"visibility": "internal", "declaration": "final fun (): kotlin.Long", "name": "getInternalVal$java_integration_test", "desc": "()J"}, + {"visibility": "internal", "declaration": "final var internalVar: kotlin.Long", "name": "internalVar", "desc": "J"}, + {"visibility": "internal", "declaration": "final fun (): kotlin.Long", "name": "getInternalVar$java_integration_test", "desc": "()J"}, + {"visibility": "internal", "declaration": "final fun (: kotlin.Long): kotlin.Unit", "name": "setInternalVar$java_integration_test", "desc": "(J)V"}, + {"visibility": "private", "declaration": "final val privateVal: kotlin.Any?", "name": "privateVal", "desc": "Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "final var privateVar: kotlin.Any?", "name": "privateVar", "desc": "Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "constructor ObjectWithProperties()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LObjectWithProperties;"}, + {"visibility": "public", "declaration": "object ObjectWithProperties", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjectWithFields defined in root package", + "visibility": "public", + "class": "ObjectWithFields", + "members": [ + {"visibility": "public", "declaration": "final val publicVal: kotlin.Int", "name": "publicVal", "desc": "I"}, + {"visibility": "public", "declaration": "final var publicVar: kotlin.Int", "name": "publicVar", "desc": "I"}, + {"visibility": "internal", "declaration": "final val internalVal: kotlin.Long", "name": "internalVal", "desc": "J"}, + {"visibility": "internal", "declaration": "final var internalVar: kotlin.Long", "name": "internalVar", "desc": "J"}, + {"visibility": "private", "declaration": "constructor ObjectWithFields()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LObjectWithFields;"}, + {"visibility": "public", "declaration": "object ObjectWithFields", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class ObjectWithFunctions defined in root package", + "visibility": "public", + "class": "ObjectWithFunctions", + "members": [ + {"visibility": "public", "declaration": "final fun publicFun(): kotlin.Unit", "name": "publicFun", "desc": "()V"}, + {"visibility": "internal", "declaration": "final fun internalFun(param1: kotlin.Int): kotlin.Unit", "name": "internalFun$java_integration_test", "desc": "(I)V"}, + {"visibility": "protected", "declaration": "final fun protectedFun(a: kotlin.String, b: kotlin.Long): kotlin.Unit", "name": "protectedFun", "desc": "(Ljava/lang/String;J)V"}, + {"visibility": "private", "declaration": "final fun privateFun(x: kotlin.Any): kotlin.Unit", "name": "privateFun", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "public", "declaration": "constructor ObjectWithFunctions()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjectWithConst defined in root package", + "visibility": "public", + "class": "ObjectWithConst", + "members": [ + {"visibility": "public", "declaration": "const final val publicConst: kotlin.Int", "name": "publicConst", "desc": "I"}, + {"visibility": "internal", "declaration": "const final val internalConst: kotlin.Int", "name": "internalConst", "desc": "I"}, + {"visibility": "private", "declaration": "const final val privateConst: kotlin.Int", "name": "privateConst", "desc": "I"}, + {"visibility": "private", "declaration": "constructor ObjectWithConst()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LObjectWithConst;"}, + {"visibility": "public", "declaration": "object ObjectWithConst", "name": "", "desc": "()V"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/classMembers.kt b/compiler/testData/codegen/dumpDeclarations/classMembers.kt new file mode 100644 index 00000000000..4550efb6821 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/classMembers.kt @@ -0,0 +1,92 @@ +public class ClassWithProperties { + + public val publicVal: Int = 1 + public var publicVar: Int = 1 + internal val internalVal: Long = 1 + internal var internalVar: Long = 1 + protected val protectedVal: String = "" + protected var protectedVar: String = "" + private val privateVal: Any? = 1 + private var privateVar: Any? = 1 + +} + +public class ClassWithLateinit { + + public lateinit var publicVar: String + public lateinit var publicVarInternalSet: String + internal set + + internal lateinit var internalVar: String + internal lateinit var internalVarPrivateSet: String + private set + + protected lateinit var protectedVar: String + protected lateinit var protectedVarPrivateSet: String + private set + + private lateinit var privateVar: Any + +} + +public class ClassWithFields { + + @JvmField public val publicVal: Int = 1 + @JvmField public var publicVar: Int = 1 + @JvmField internal val internalVal: Long = 1 + @JvmField internal var internalVar: Long = 1 + @JvmField protected val protectedVal: String = "" + @JvmField protected var protectedVar: String = "" + +} + +public class ClassWithConstructors(val a: Any, b: Int) { + public constructor(a: String) : this(a, 1) {} + internal constructor(a: Int) : this(a, 2) {} + protected constructor(a: Any) : this(a, 0) {} +} + +public class ClassWithFunctions { + public fun publicFun() {} + internal fun internalFun(param1: Int) {} + protected fun protectedFun(a: String, b: Long) {} + private fun privateFun(x: Any) {} + + @JvmOverloads + internal fun internalOverloads(a: String = "", b: Long? = null) {} +} + +public object ObjectWithProperties { + public val publicVal: Int = 1 + public var publicVar: Int = 1 + internal val internalVal: Long = 1 + internal var internalVar: Long = 1 + private val privateVal: Any? = 1 + private var privateVar: Any? = 1 +} + +public object ObjectWithFields { + + @JvmField public val publicVal: Int = 1 + @JvmField public var publicVar: Int = 1 + @JvmField internal val internalVal: Long = 1 + @JvmField internal var internalVar: Long = 1 + +} + +public class ObjectWithFunctions { + + public fun publicFun() {} + internal fun internalFun(param1: Int) {} + protected fun protectedFun(a: String, b: Long) {} + private fun privateFun(x: Any) {} + +} + +public object ObjectWithConst { + + public const val publicConst: Int = 2 + internal const val internalConst: Int = 3 + private const val privateConst: Int = 4 + +} diff --git a/compiler/testData/codegen/dumpDeclarations/classes.json b/compiler/testData/codegen/dumpDeclarations/classes.json new file mode 100644 index 00000000000..61868b562ee --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/classes.json @@ -0,0 +1,351 @@ +[ + { + "declaration": "object ObjPublic defined in PublicClass", + "visibility": "public", + "class": "PublicClass$ObjPublic", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPublic()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPublicClass$ObjPublic;"}, + {"visibility": "public", "declaration": "object ObjPublic", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjInternal defined in PublicClass", + "visibility": "internal", + "class": "PublicClass$ObjInternal", + "members": [ + {"visibility": "private", "declaration": "constructor ObjInternal()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPublicClass$ObjInternal;"}, + {"visibility": "internal", "declaration": "object ObjInternal", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjProtected defined in PublicClass", + "visibility": "protected", + "class": "PublicClass$ObjProtected", + "members": [ + {"visibility": "private", "declaration": "constructor ObjProtected()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPublicClass$ObjProtected;"}, + {"visibility": "protected", "declaration": "object ObjProtected", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjPrivate defined in PublicClass", + "visibility": "private", + "class": "PublicClass$ObjPrivate", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPrivate()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPublicClass$ObjPrivate;"}, + {"visibility": "private", "declaration": "object ObjPrivate", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPublic defined in PublicClass", + "visibility": "public", + "class": "PublicClass$NestedPublic", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPublic()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedInternal defined in PublicClass", + "visibility": "internal", + "class": "PublicClass$NestedInternal", + "members": [ + {"visibility": "public", "declaration": "constructor NestedInternal()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedProtected defined in PublicClass", + "visibility": "protected", + "class": "PublicClass$NestedProtected", + "members": [ + {"visibility": "public", "declaration": "constructor NestedProtected()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPrivate defined in PublicClass", + "visibility": "private", + "class": "PublicClass$NestedPrivate", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPrivate()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final inner class InnerPublic defined in PublicClass", + "visibility": "public", + "class": "PublicClass$InnerPublic", + "members": [ + {"visibility": "public", "declaration": "constructor InnerPublic()", "name": "", "desc": "(LPublicClass;)V"}, + {"name": "this$0", "desc": "LPublicClass;"} + ] + }, + { + "declaration": "final inner class InnerInternal defined in PublicClass", + "visibility": "internal", + "class": "PublicClass$InnerInternal", + "members": [ + {"visibility": "public", "declaration": "constructor InnerInternal()", "name": "", "desc": "(LPublicClass;)V"}, + {"name": "this$0", "desc": "LPublicClass;"} + ] + }, + { + "declaration": "final inner class InnerProtected defined in PublicClass", + "visibility": "protected", + "class": "PublicClass$InnerProtected", + "members": [ + {"visibility": "public", "declaration": "constructor InnerProtected()", "name": "", "desc": "(LPublicClass;)V"}, + {"name": "this$0", "desc": "LPublicClass;"} + ] + }, + { + "declaration": "final inner class InnerPrivate defined in PublicClass", + "visibility": "private", + "class": "PublicClass$InnerPrivate", + "members": [ + {"visibility": "public", "declaration": "constructor InnerPrivate()", "name": "", "desc": "(LPublicClass;)V"}, + {"name": "this$0", "desc": "LPublicClass;"} + ] + }, + { + "declaration": "companion object defined in PublicClass", + "visibility": "public", + "class": "PublicClass$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class PublicClass defined in root package", + "visibility": "public", + "class": "PublicClass", + "members": [ + {"visibility": "public", "declaration": "constructor PublicClass()", "name": "", "desc": "()V"}, + {"visibility": "public", "declaration": "final class PublicClass", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPublicClass$Companion;"} + ] + }, + { + "declaration": "companion object defined in InternalClass", + "visibility": "public", + "class": "InternalClass$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class InternalClass defined in root package", + "visibility": "internal", + "class": "InternalClass", + "members": [ + {"visibility": "public", "declaration": "constructor InternalClass()", "name": "", "desc": "()V"}, + {"visibility": "internal", "declaration": "final class InternalClass", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LInternalClass$Companion;"} + ] + }, + { + "declaration": "companion object defined in InternalClassInternalCompanion", + "visibility": "internal", + "class": "InternalClassInternalCompanion$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class InternalClassInternalCompanion defined in root package", + "visibility": "internal", + "class": "InternalClassInternalCompanion", + "members": [ + {"visibility": "public", "declaration": "constructor InternalClassInternalCompanion()", "name": "", "desc": "()V"}, + {"visibility": "internal", "declaration": "final class InternalClassInternalCompanion", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LInternalClassInternalCompanion$Companion;"} + ] + }, + { + "declaration": "companion object defined in InternalClassPrivateCompanion", + "visibility": "private", + "class": "InternalClassPrivateCompanion$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class InternalClassPrivateCompanion defined in root package", + "visibility": "internal", + "class": "InternalClassPrivateCompanion", + "members": [ + {"visibility": "public", "declaration": "constructor InternalClassPrivateCompanion()", "name": "", "desc": "()V"}, + {"visibility": "internal", "declaration": "final class InternalClassPrivateCompanion", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LInternalClassPrivateCompanion$Companion;"} + ] + }, + { + "declaration": "object ObjPublic defined in PrivateClass", + "visibility": "public", + "class": "PrivateClass$ObjPublic", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPublic()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPrivateClass$ObjPublic;"}, + {"visibility": "public", "declaration": "object ObjPublic", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjInternal defined in PrivateClass", + "visibility": "internal", + "class": "PrivateClass$ObjInternal", + "members": [ + {"visibility": "private", "declaration": "constructor ObjInternal()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPrivateClass$ObjInternal;"}, + {"visibility": "internal", "declaration": "object ObjInternal", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjProtected defined in PrivateClass", + "visibility": "protected", + "class": "PrivateClass$ObjProtected", + "members": [ + {"visibility": "private", "declaration": "constructor ObjProtected()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPrivateClass$ObjProtected;"}, + {"visibility": "protected", "declaration": "object ObjProtected", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjPrivate defined in PrivateClass", + "visibility": "private", + "class": "PrivateClass$ObjPrivate", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPrivate()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPrivateClass$ObjPrivate;"}, + {"visibility": "private", "declaration": "object ObjPrivate", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPublic defined in PrivateClass", + "visibility": "public", + "class": "PrivateClass$NestedPublic", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPublic()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedInternal defined in PrivateClass", + "visibility": "internal", + "class": "PrivateClass$NestedInternal", + "members": [ + {"visibility": "public", "declaration": "constructor NestedInternal()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedProtected defined in PrivateClass", + "visibility": "protected", + "class": "PrivateClass$NestedProtected", + "members": [ + {"visibility": "public", "declaration": "constructor NestedProtected()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPrivate defined in PrivateClass", + "visibility": "private", + "class": "PrivateClass$NestedPrivate", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPrivate()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final inner class InnerPublic defined in PrivateClass", + "visibility": "public", + "class": "PrivateClass$InnerPublic", + "members": [ + {"visibility": "public", "declaration": "constructor InnerPublic()", "name": "", "desc": "(LPrivateClass;)V"}, + {"name": "this$0", "desc": "LPrivateClass;"} + ] + }, + { + "declaration": "final inner class InnerInternal defined in PrivateClass", + "visibility": "internal", + "class": "PrivateClass$InnerInternal", + "members": [ + {"visibility": "public", "declaration": "constructor InnerInternal()", "name": "", "desc": "(LPrivateClass;)V"}, + {"name": "this$0", "desc": "LPrivateClass;"} + ] + }, + { + "declaration": "final inner class InnerProtected defined in PrivateClass", + "visibility": "protected", + "class": "PrivateClass$InnerProtected", + "members": [ + {"visibility": "public", "declaration": "constructor InnerProtected()", "name": "", "desc": "(LPrivateClass;)V"}, + {"name": "this$0", "desc": "LPrivateClass;"} + ] + }, + { + "declaration": "final inner class InnerPrivate defined in PrivateClass", + "visibility": "private", + "class": "PrivateClass$InnerPrivate", + "members": [ + {"visibility": "public", "declaration": "constructor InnerPrivate()", "name": "", "desc": "(LPrivateClass;)V"}, + {"name": "this$0", "desc": "LPrivateClass;"} + ] + }, + { + "declaration": "companion object defined in PrivateClass", + "visibility": "public", + "class": "PrivateClass$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class PrivateClass defined in root package", + "visibility": "private", + "class": "PrivateClass", + "members": [ + {"visibility": "public", "declaration": "constructor PrivateClass()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "final class PrivateClass", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPrivateClass$Companion;"} + ] + }, + { + "declaration": "companion object defined in PrivateClassInternalCompanion", + "visibility": "internal", + "class": "PrivateClassInternalCompanion$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class PrivateClassInternalCompanion defined in root package", + "visibility": "private", + "class": "PrivateClassInternalCompanion", + "members": [ + {"visibility": "public", "declaration": "constructor PrivateClassInternalCompanion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "final class PrivateClassInternalCompanion", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPrivateClassInternalCompanion$Companion;"} + ] + }, + { + "declaration": "companion object defined in PrivateClassPrivateCompanion", + "visibility": "private", + "class": "PrivateClassPrivateCompanion$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "final class PrivateClassPrivateCompanion defined in root package", + "visibility": "private", + "class": "PrivateClassPrivateCompanion", + "members": [ + {"visibility": "public", "declaration": "constructor PrivateClassPrivateCompanion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "final class PrivateClassPrivateCompanion", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPrivateClassPrivateCompanion$Companion;"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/classes.kt b/compiler/testData/codegen/dumpDeclarations/classes.kt new file mode 100644 index 00000000000..60a0ce82e0e --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/classes.kt @@ -0,0 +1,58 @@ +public class PublicClass { + + companion object {} + + public object ObjPublic + internal object ObjInternal + protected object ObjProtected + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + protected class NestedProtected + private class NestedPrivate + + public inner class InnerPublic + internal inner class InnerInternal + protected inner class InnerProtected + private inner class InnerPrivate +} + +internal class InternalClass { + companion object {} +} + +internal class InternalClassInternalCompanion { + internal companion object {} +} + +internal class InternalClassPrivateCompanion { + private companion object {} +} + +private class PrivateClass { + companion object {} + + public object ObjPublic + internal object ObjInternal + protected object ObjProtected + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + protected class NestedProtected + private class NestedPrivate + + public inner class InnerPublic + internal inner class InnerInternal + protected inner class InnerProtected + private inner class InnerPrivate +} + +private class PrivateClassInternalCompanion { + internal companion object +} +private class PrivateClassPrivateCompanion { + private companion object +} + diff --git a/compiler/testData/codegen/dumpDeclarations/interfaces.json b/compiler/testData/codegen/dumpDeclarations/interfaces.json new file mode 100644 index 00000000000..e4e86651b02 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/interfaces.json @@ -0,0 +1,204 @@ +[ + { + "declaration": "object ObjPublic defined in PublicInterface", + "visibility": "public", + "class": "PublicInterface$ObjPublic", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPublic()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPublicInterface$ObjPublic;"}, + {"visibility": "public", "declaration": "object ObjPublic", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjPrivate defined in PublicInterface", + "visibility": "private", + "class": "PublicInterface$ObjPrivate", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPrivate()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPublicInterface$ObjPrivate;"}, + {"visibility": "private", "declaration": "object ObjPrivate", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPublic defined in PublicInterface", + "visibility": "public", + "class": "PublicInterface$NestedPublic", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPublic()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPrivate defined in PublicInterface", + "visibility": "private", + "class": "PublicInterface$NestedPrivate", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPrivate()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "interface PublicInterface defined in root package", + "visibility": "public", + "class": "PublicInterface$DefaultImpls", + "members": [ + + ] + }, + { + "declaration": "companion object defined in PublicInterface", + "visibility": "public", + "class": "PublicInterface$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "interface PublicInterface defined in root package", + "visibility": "public", + "class": "PublicInterface", + "members": [ + {"visibility": "public", "declaration": "interface PublicInterface", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPublicInterface$Companion;"} + ] + }, + { + "declaration": "interface InternalInterface defined in root package", + "visibility": "internal", + "class": "InternalInterface$DefaultImpls", + "members": [ + + ] + }, + { + "declaration": "companion object defined in InternalInterface", + "visibility": "public", + "class": "InternalInterface$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "interface InternalInterface defined in root package", + "visibility": "internal", + "class": "InternalInterface", + "members": [ + {"visibility": "internal", "declaration": "interface InternalInterface", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LInternalInterface$Companion;"} + ] + }, + { + "declaration": "interface InternalInterfacePrivateCompanion defined in root package", + "visibility": "internal", + "class": "InternalInterfacePrivateCompanion$DefaultImpls", + "members": [ + + ] + }, + { + "declaration": "companion object defined in InternalInterfacePrivateCompanion", + "visibility": "private", + "class": "InternalInterfacePrivateCompanion$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "interface InternalInterfacePrivateCompanion defined in root package", + "visibility": "internal", + "class": "InternalInterfacePrivateCompanion", + "members": [ + {"visibility": "internal", "declaration": "interface InternalInterfacePrivateCompanion", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LInternalInterfacePrivateCompanion$Companion;"} + ] + }, + { + "declaration": "object ObjPublic defined in PrivateInterface", + "visibility": "public", + "class": "PrivateInterface$ObjPublic", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPublic()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPrivateInterface$ObjPublic;"}, + {"visibility": "public", "declaration": "object ObjPublic", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "object ObjPrivate defined in PrivateInterface", + "visibility": "private", + "class": "PrivateInterface$ObjPrivate", + "members": [ + {"visibility": "private", "declaration": "constructor ObjPrivate()", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LPrivateInterface$ObjPrivate;"}, + {"visibility": "private", "declaration": "object ObjPrivate", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPublic defined in PrivateInterface", + "visibility": "public", + "class": "PrivateInterface$NestedPublic", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPublic()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class NestedPrivate defined in PrivateInterface", + "visibility": "private", + "class": "PrivateInterface$NestedPrivate", + "members": [ + {"visibility": "public", "declaration": "constructor NestedPrivate()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "interface PrivateInterface defined in root package", + "visibility": "private", + "class": "PrivateInterface$DefaultImpls", + "members": [ + + ] + }, + { + "declaration": "companion object defined in PrivateInterface", + "visibility": "public", + "class": "PrivateInterface$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "interface PrivateInterface defined in root package", + "visibility": "private", + "class": "PrivateInterface", + "members": [ + {"visibility": "private", "declaration": "interface PrivateInterface", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPrivateInterface$Companion;"} + ] + }, + { + "declaration": "interface PrivateInterfacePrivateCompanion defined in root package", + "visibility": "private", + "class": "PrivateInterfacePrivateCompanion$DefaultImpls", + "members": [ + + ] + }, + { + "declaration": "companion object defined in PrivateInterfacePrivateCompanion", + "visibility": "private", + "class": "PrivateInterfacePrivateCompanion$Companion", + "members": [ + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "constructor Companion()", "name": "", "desc": "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"} + ] + }, + { + "declaration": "interface PrivateInterfacePrivateCompanion defined in root package", + "visibility": "private", + "class": "PrivateInterfacePrivateCompanion", + "members": [ + {"visibility": "private", "declaration": "interface PrivateInterfacePrivateCompanion", "name": "", "desc": "()V"}, + {"name": "Companion", "desc": "LPrivateInterfacePrivateCompanion$Companion;"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/interfaces.kt b/compiler/testData/codegen/dumpDeclarations/interfaces.kt new file mode 100644 index 00000000000..b2c524f0ad1 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/interfaces.kt @@ -0,0 +1,32 @@ +public interface PublicInterface { + + companion object {} + + public object ObjPublic + private object ObjPrivate + + public class NestedPublic + private class NestedPrivate +} + +internal interface InternalInterface { + companion object {} +} + +internal interface InternalInterfacePrivateCompanion { + private companion object {} +} + +private interface PrivateInterface { + companion object {} + + public object ObjPublic + private object ObjPrivate + + public class NestedPublic + private class NestedPrivate +} + +private interface PrivateInterfacePrivateCompanion { + private companion object +} diff --git a/compiler/testData/codegen/dumpDeclarations/localClasses.json b/compiler/testData/codegen/dumpDeclarations/localClasses.json new file mode 100644 index 00000000000..6b31a0c10dd --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/localClasses.json @@ -0,0 +1,89 @@ +[ + { + "declaration": "final inner class C defined in A.a.B", + "visibility": "local", + "class": "A$a$B$C", + "members": [ + {"visibility": "public", "declaration": "constructor C()", "name": "", "desc": "(LA$a$B;)V"}, + {"name": "this$0", "desc": "LA$a$B;"} + ] + }, + { + "declaration": "final class B defined in A.a", + "visibility": "local", + "class": "A$a$B", + "members": [ + {"visibility": "public", "declaration": "final fun s(): kotlin.String", "name": "s", "desc": "()Ljava/lang/String;"}, + {"visibility": "public", "declaration": "constructor B()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class A defined in root package", + "visibility": "public", + "class": "A", + "members": [ + {"visibility": "public", "declaration": "final fun a(): kotlin.String", "name": "a", "desc": "()Ljava/lang/String;"}, + {"visibility": "public", "declaration": "constructor A()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class B defined in B.a", + "visibility": "local", + "class": "B$a$B", + "members": [ + {"visibility": "public", "declaration": "final fun s(): kotlin.String", "name": "s", "desc": "()Ljava/lang/String;"}, + {"visibility": "public", "declaration": "constructor B()", "name": "", "desc": "(Ljava/lang/String;)V"}, + {"name": "$p", "desc": "Ljava/lang/String;"} + ] + }, + { + "declaration": "final class B defined in root package", + "visibility": "public", + "class": "B", + "members": [ + {"visibility": "public", "declaration": "final fun a(p: kotlin.String): kotlin.String", "name": "a", "desc": "(Ljava/lang/String;)Ljava/lang/String;"}, + {"visibility": "public", "declaration": "constructor B()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final fun (): kotlin.Unit defined in L.b", + "visibility": "local", + "class": "L$b$1", + "members": [ + {"visibility": "local", "declaration": "final fun (): kotlin.Unit", "name": "invoke", "desc": "()Ljava/lang/Object;"}, + {"visibility": "local", "declaration": "final fun (): kotlin.Unit", "name": "invoke", "desc": "()V"}, + {"visibility": "local", "declaration": "final fun (): kotlin.Unit", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LL$b$1;"}, + {"visibility": "public", "declaration": "final class : kotlin.jvm.internal.Lambda, () -> kotlin.Unit", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class L defined in root package", + "visibility": "public", + "class": "L", + "members": [ + {"visibility": "public", "declaration": "final fun a(lambda: () -> kotlin.Unit): kotlin.Unit", "name": "a", "desc": "(Lkotlin/jvm/functions/Function0;)V"}, + {"visibility": "public", "declaration": "final inline fun b(): kotlin.Unit", "name": "b", "desc": "()V"}, + {"visibility": "public", "declaration": "constructor L()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final fun (): kotlin.Unit defined in L.b", + "visibility": "local", + "class": "L$b$1", + "members": [ + {"visibility": "local", "declaration": "final fun (): kotlin.Unit", "name": "invoke", "desc": "()Ljava/lang/Object;"}, + {"visibility": "local", "declaration": "final fun (): kotlin.Unit", "name": "invoke", "desc": "()V"}, + {"visibility": "local", "declaration": "final fun (): kotlin.Unit", "name": "", "desc": "()V"}, + {"name": "INSTANCE", "desc": "LL$b$1;"}, + {"visibility": "public", "declaration": "final class : kotlin.jvm.internal.Lambda, () -> kotlin.Unit", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "package-fragment ", + "class": "Part2Kt", + "members": [ + {"visibility": "public", "declaration": "fun box(): kotlin.Unit", "name": "box", "desc": "()V"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/localClasses.kt b/compiler/testData/codegen/dumpDeclarations/localClasses.kt new file mode 100644 index 00000000000..6d335f2ca71 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/localClasses.kt @@ -0,0 +1,38 @@ +// FILE: Part1.kt +class A { + fun a() : String { + class B() { + fun s() : String = "OK" + + inner class C {} + + } + return B().s() + } +} + + +class B { + fun a(p: String) : String { + class B() { + fun s() : String = p + } + return B().s() + } +} + +class L { + fun a(lambda: () -> Unit) = lambda() + + inline fun b() { + a { + println("OK") + } + } + +} + +// FILE: Part2.kt +fun box() { + L().b() +} diff --git a/compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.json b/compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.json new file mode 100644 index 00000000000..483250b9d18 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.json @@ -0,0 +1,57 @@ +[ + { + "declaration": "package-fragment ", + "class": "MultifileFacade__Part1Kt", + "members": [ + {"visibility": "public", "declaration": "val publicVal: kotlin.Int", "name": "publicVal", "desc": "I"}, + {"visibility": "public", "declaration": "fun (): kotlin.Int", "name": "getPublicVal", "desc": "()I"}, + {"visibility": "public", "declaration": "var publicVar: kotlin.Int", "name": "publicVar", "desc": "I"}, + {"visibility": "public", "declaration": "fun (): kotlin.Int", "name": "getPublicVar", "desc": "()I"}, + {"visibility": "public", "declaration": "fun (: kotlin.Int): kotlin.Unit", "name": "setPublicVar", "desc": "(I)V"}, + {"visibility": "internal", "declaration": "val internalVal: kotlin.Long", "name": "internalVal", "desc": "J"}, + {"visibility": "internal", "declaration": "fun (): kotlin.Long", "name": "getInternalVal", "desc": "()J"}, + {"visibility": "internal", "declaration": "var internalVar: kotlin.Long", "name": "internalVar", "desc": "J"}, + {"visibility": "internal", "declaration": "fun (): kotlin.Long", "name": "getInternalVar", "desc": "()J"}, + {"visibility": "internal", "declaration": "fun (: kotlin.Long): kotlin.Unit", "name": "setInternalVar", "desc": "(J)V"}, + {"visibility": "private", "declaration": "val privateVal: kotlin.Any?", "name": "privateVal", "desc": "Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "var privateVar: kotlin.Any?", "name": "privateVar", "desc": "Ljava/lang/Object;"}, + {"declaration": "package-fragment ", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "final class PrivateClass defined in root package", + "visibility": "private", + "class": "PrivateClass", + "members": [ + {"visibility": "internal", "declaration": "final fun accessUsage(): kotlin.Unit", "name": "accessUsage$java_integration_test", "desc": "()V"}, + {"visibility": "public", "declaration": "constructor PrivateClass()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "package-fragment ", + "class": "MultifileFacade__Part2Kt", + "members": [ + {"visibility": "public", "declaration": "fun publicFun(): kotlin.Unit", "name": "publicFun", "desc": "()V"}, + {"visibility": "internal", "declaration": "fun internalFun(param1: kotlin.Int): kotlin.Unit", "name": "internalFun", "desc": "(I)V"}, + {"visibility": "private", "declaration": "fun privateFun(x: kotlin.Any): kotlin.Unit", "name": "privateFun", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "private", "declaration": "fun privateFun(x: kotlin.Any): kotlin.Unit", "name": "access$privateFun", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "private", "declaration": "fun (): kotlin.Int", "name": "access$getPrivateConst$p", "desc": "()I"} + ] + }, + { + "declaration": "package-fragment ", + "class": "MultifileFacade", + "members": [ + {"visibility": "internal", "declaration": "const val internalConst: kotlin.Int", "name": "internalConst", "desc": "I"}, + {"visibility": "internal", "declaration": "fun (): kotlin.Long", "name": "getInternalVal", "desc": "()J"}, + {"visibility": "internal", "declaration": "fun (): kotlin.Long", "name": "getInternalVar", "desc": "()J"}, + {"visibility": "internal", "declaration": "fun (: kotlin.Long): kotlin.Unit", "name": "setInternalVar", "desc": "(J)V"}, + {"visibility": "public", "declaration": "const val publicConst: kotlin.Int", "name": "publicConst", "desc": "I"}, + {"visibility": "public", "declaration": "fun (): kotlin.Int", "name": "getPublicVal", "desc": "()I"}, + {"visibility": "public", "declaration": "fun (): kotlin.Int", "name": "getPublicVar", "desc": "()I"}, + {"visibility": "public", "declaration": "fun (: kotlin.Int): kotlin.Unit", "name": "setPublicVar", "desc": "(I)V"}, + {"visibility": "internal", "declaration": "fun internalFun(param1: kotlin.Int): kotlin.Unit", "name": "internalFun", "desc": "(I)V"}, + {"visibility": "public", "declaration": "fun publicFun(): kotlin.Unit", "name": "publicFun", "desc": "()V"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.kt b/compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.kt new file mode 100644 index 00000000000..b3a2cdd4643 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.kt @@ -0,0 +1,42 @@ +// FILE: Part1.kt +@file:kotlin.jvm.JvmMultifileClass +@file:kotlin.jvm.JvmName("MultifileFacade") +// properties + +public val publicVal: Int = 1 +public var publicVar: Int = 1 +internal val internalVal: Long = 1 +internal var internalVar: Long = 1 +private val privateVal: Any? = 1 +private var privateVar: Any? = 1 + +//// fields +//@JvmField public val publicValField: Int = 1 +//@JvmField public var publicVarField: Int = 1 +//@JvmField internal val internalValField: Long = 1 +//@JvmField internal var internalVarField: Long = 1 + + +// FILE: Part2.kt +@file:kotlin.jvm.JvmMultifileClass +@file:kotlin.jvm.JvmName("MultifileFacade") + +// constants + +public const val publicConst: Int = 2 +internal const val internalConst: Int = 3 +private const val privateConst: Int = 4 + +// fun + +public fun publicFun() {} +internal fun internalFun(param1: Int) {} +private fun privateFun(x: Any) {} + + +private class PrivateClass { + internal fun accessUsage() { + privateFun(privateConst) + } + +} diff --git a/compiler/testData/codegen/dumpDeclarations/topLevelMembers.json b/compiler/testData/codegen/dumpDeclarations/topLevelMembers.json new file mode 100644 index 00000000000..990b91358a0 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/topLevelMembers.json @@ -0,0 +1,49 @@ +[ + { + "declaration": "final class PrivateClass defined in root package", + "visibility": "private", + "class": "PrivateClass", + "members": [ + {"visibility": "internal", "declaration": "final fun accessUsage(): kotlin.Unit", "name": "accessUsage$java_integration_test", "desc": "()V"}, + {"visibility": "public", "declaration": "constructor PrivateClass()", "name": "", "desc": "()V"} + ] + }, + { + "declaration": "package-fragment ", + "class": "TopLevelMembersKt", + "members": [ + {"visibility": "public", "declaration": "val publicVal: kotlin.Int", "name": "publicVal", "desc": "I"}, + {"visibility": "public", "declaration": "fun (): kotlin.Int", "name": "getPublicVal", "desc": "()I"}, + {"visibility": "public", "declaration": "var publicVar: kotlin.Int", "name": "publicVar", "desc": "I"}, + {"visibility": "public", "declaration": "fun (): kotlin.Int", "name": "getPublicVar", "desc": "()I"}, + {"visibility": "public", "declaration": "fun (: kotlin.Int): kotlin.Unit", "name": "setPublicVar", "desc": "(I)V"}, + {"visibility": "internal", "declaration": "val internalVal: kotlin.Long", "name": "internalVal", "desc": "J"}, + {"visibility": "internal", "declaration": "fun (): kotlin.Long", "name": "getInternalVal", "desc": "()J"}, + {"visibility": "internal", "declaration": "var internalVar: kotlin.Long", "name": "internalVar", "desc": "J"}, + {"visibility": "internal", "declaration": "fun (): kotlin.Long", "name": "getInternalVar", "desc": "()J"}, + {"visibility": "internal", "declaration": "fun (: kotlin.Long): kotlin.Unit", "name": "setInternalVar", "desc": "(J)V"}, + {"visibility": "private", "declaration": "val privateVal: kotlin.Any?", "name": "privateVal", "desc": "Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "var privateVar: kotlin.Any?", "name": "privateVar", "desc": "Ljava/lang/Object;"}, + {"visibility": "public", "declaration": "val publicValField: kotlin.Int", "name": "publicValField", "desc": "I"}, + {"visibility": "public", "declaration": "var publicVarField: kotlin.Int", "name": "publicVarField", "desc": "I"}, + {"visibility": "internal", "declaration": "val internalValField: kotlin.Long", "name": "internalValField", "desc": "J"}, + {"visibility": "internal", "declaration": "var internalVarField: kotlin.Long", "name": "internalVarField", "desc": "J"}, + {"visibility": "public", "declaration": "const val publicConst: kotlin.Int", "name": "publicConst", "desc": "I"}, + {"visibility": "internal", "declaration": "const val internalConst: kotlin.Int", "name": "internalConst", "desc": "I"}, + {"visibility": "private", "declaration": "const val privateConst: kotlin.Int", "name": "privateConst", "desc": "I"}, + {"visibility": "public", "declaration": "fun publicFun(): kotlin.Unit", "name": "publicFun", "desc": "()V"}, + {"visibility": "internal", "declaration": "fun internalFun(param1: kotlin.Int): kotlin.Unit", "name": "internalFun", "desc": "(I)V"}, + {"visibility": "private", "declaration": "fun privateFun(x: kotlin.Any?): kotlin.Unit", "name": "privateFun", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "internal", "declaration": "fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads", "desc": "(Ljava/lang/String;Ljava/lang/Long;)V"}, + {"visibility": "internal", "declaration": "fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads$default", "desc": "(Ljava/lang/String;Ljava/lang/Long;ILjava/lang/Object;)V"}, + {"visibility": "internal", "declaration": "fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads", "desc": "(Ljava/lang/String;)V"}, + {"visibility": "internal", "declaration": "fun internalOverloads(a: kotlin.String = ..., b: kotlin.Long? = ...): kotlin.Unit", "name": "internalOverloads", "desc": "()V"}, + {"declaration": "package-fragment ", "name": "", "desc": "()V"}, + {"visibility": "private", "declaration": "fun privateFun(x: kotlin.Any?): kotlin.Unit", "name": "access$privateFun", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "private", "declaration": "fun (): kotlin.Any?", "name": "access$getPrivateVal$p", "desc": "()Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "fun (): kotlin.Any?", "name": "access$getPrivateVar$p", "desc": "()Ljava/lang/Object;"}, + {"visibility": "private", "declaration": "fun (: kotlin.Any?): kotlin.Unit", "name": "access$setPrivateVar$p", "desc": "(Ljava/lang/Object;)V"}, + {"visibility": "private", "declaration": "fun (): kotlin.Int", "name": "access$getPrivateConst$p", "desc": "()I"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/topLevelMembers.kt b/compiler/testData/codegen/dumpDeclarations/topLevelMembers.kt new file mode 100644 index 00000000000..8134d1226ea --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/topLevelMembers.kt @@ -0,0 +1,39 @@ +// properties + +public val publicVal: Int = 1 +public var publicVar: Int = 1 +internal val internalVal: Long = 1 +internal var internalVar: Long = 1 +private val privateVal: Any? = 1 +private var privateVar: Any? = 1 + +// fields +@JvmField public val publicValField: Int = 1 +@JvmField public var publicVarField: Int = 1 +@JvmField internal val internalValField: Long = 1 +@JvmField internal var internalVarField: Long = 1 + +// constants + +public const val publicConst: Int = 2 +internal const val internalConst: Int = 3 +private const val privateConst: Int = 4 + +// fun + +public fun publicFun() {} +internal fun internalFun(param1: Int) {} +private fun privateFun(x: Any?) {} + +@JvmOverloads +internal fun internalOverloads(a: String = "", b: Long? = null) {} + + +private class PrivateClass { + internal fun accessUsage() { + privateFun(privateVal) + privateFun(privateVar) + privateFun(privateConst) + } + +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AbstractDumpDeclarationsTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractDumpDeclarationsTest.kt new file mode 100644 index 00000000000..9d996214b30 --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AbstractDumpDeclarationsTest.kt @@ -0,0 +1,79 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.codegen + +import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.codegen.* +import org.jetbrains.kotlin.codegen.state.GenerationState +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil +import org.jetbrains.kotlin.test.ConfigurationKind +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.TestJdkKind +import org.jetbrains.kotlin.utils.* +import java.io.File + +abstract class AbstractDumpDeclarationsTest : CodegenTestCase() { + + override fun doMultiFileTest(wholeFile: File, files: List, javaFilesDir: File?) { + val expectedResult = KotlinTestUtils.replaceExtension(wholeFile, "json") + compileAndCompareDump(files, expectedResult) + } + + + private fun compileAndCompareDump(files: List, expectedResult: File) { + configurationKind = ConfigurationKind.NO_KOTLIN_REFLECT + + val configuration = KotlinTestUtils.compilerConfigurationForTests( + configurationKind, TestJdkKind.MOCK_JDK, listOf(KotlinTestUtils.getAnnotationsJar()), emptyList()) + + myEnvironment = KotlinCoreEnvironment.createForTests( + testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + + loadMultiFiles(files) + + val declarationsFile = compileManyFilesGetDeclarationsDump(myFiles.psiFiles) + KotlinTestUtils.assertEqualsToFile(expectedResult, declarationsFile.readText()) + } + + private fun compileManyFilesGetDeclarationsDump(files: List): File { + val project = myEnvironment.project + val packagePartProvider = JvmPackagePartProvider(myEnvironment) + + val analysisResult = JvmResolveUtil.analyzeFilesWithJavaIntegrationAndCheckForErrors( + project, files, packagePartProvider) + + analysisResult.throwIfError() + + val dumpToFile = KotlinTestUtils.tmpDirForTest(this).resolve(this.name + ".json") + + val state = GenerationState( + project, ClassBuilderFactories.TEST, + analysisResult.moduleDescriptor, analysisResult.bindingContext, + files, + disableCallAssertions = false, + disableParamAssertions = false, + dumpBinarySignatureMappingTo = dumpToFile) + KotlinCodegenFacade.compileCorrectFiles(state, org.jetbrains.kotlin.codegen.CompilationErrorHandler.THROW_EXCEPTION) + + state.destroy() + + return dumpToFile + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java new file mode 100644 index 00000000000..54c1481c23c --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java @@ -0,0 +1,79 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.codegen; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("compiler/testData/codegen/dumpDeclarations") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class DumpDeclarationsTestGenerated extends AbstractDumpDeclarationsTest { + public void testAllFilesPresentInDumpDeclarations() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/dumpDeclarations"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("annotation.kt") + public void testAnnotation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/annotation.kt"); + doTest(fileName); + } + + @TestMetadata("classMembers.kt") + public void testClassMembers() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/classMembers.kt"); + doTest(fileName); + } + + @TestMetadata("classes.kt") + public void testClasses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/classes.kt"); + doTest(fileName); + } + + @TestMetadata("interfaces.kt") + public void testInterfaces() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/interfaces.kt"); + doTest(fileName); + } + + @TestMetadata("localClasses.kt") + public void testLocalClasses() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/localClasses.kt"); + doTest(fileName); + } + + @TestMetadata("multifileFacadeMembers.kt") + public void testMultifileFacadeMembers() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/multifileFacadeMembers.kt"); + doTest(fileName); + } + + @TestMetadata("topLevelMembers.kt") + public void testTopLevelMembers() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/topLevelMembers.kt"); + doTest(fileName); + } +} diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 32c4c62e3d1..fc2ccae2f80 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -238,6 +238,10 @@ fun main(args: Array) { model("codegen/defaultArguments/reflection") } + testClass() { + model("codegen/dumpDeclarations") + } + testClass() { model("loadJava/compiledJava", extension = "java", testMethod = "doTestCompiledJava") model("loadJava/compiledJavaAndKotlin", extension = "txt", testMethod = "doTestCompiledJavaAndKotlin")