Files
kotlin/compiler/testData/codegen/dumpDeclarations/interfaces.json
Mikhael Bogdanov b73be50e5b Move object initialization from <init> to <clinit>
Codegen generates static backing fields for object properties.
  They are initialized in class constructor but some of them are final static
  and such access is prohibited in specification but it's allowed in
  java bytecode <= 1.8. Such access in 1.9 bytecode cause
  "IllegalAccessError: Update to static final field Object.INSTANCE
  attempted from a different method (<init>) than the initializer method <clinit>"

  Added additional hidden field in interface companion to pass out
  companion instance from <clinit>.

 #KT-15894 Fixed
2017-10-11 19:20:24 +03:00

210 lines
7.9 KiB
JSON
Vendored

[
{
"declaration": "object ObjPublic defined in PublicInterface",
"visibility": "public",
"class": "PublicInterface$ObjPublic",
"members": [
{"visibility": "private", "declaration": "constructor ObjPublic()", "name": "<init>", "desc": "()V"},
{"name": "INSTANCE", "desc": "LPublicInterface$ObjPublic;"},
{"visibility": "public", "declaration": "object ObjPublic", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "object ObjPrivate defined in PublicInterface",
"visibility": "private",
"class": "PublicInterface$ObjPrivate",
"members": [
{"visibility": "private", "declaration": "constructor ObjPrivate()", "name": "<init>", "desc": "()V"},
{"name": "INSTANCE", "desc": "LPublicInterface$ObjPrivate;"},
{"visibility": "private", "declaration": "object ObjPrivate", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "final class NestedPublic defined in PublicInterface",
"visibility": "public",
"class": "PublicInterface$NestedPublic",
"members": [
{"visibility": "public", "declaration": "constructor NestedPublic()", "name": "<init>", "desc": "()V"}
]
},
{
"declaration": "final class NestedPrivate defined in PublicInterface",
"visibility": "private",
"class": "PublicInterface$NestedPrivate",
"members": [
{"visibility": "public", "declaration": "constructor NestedPrivate()", "name": "<init>", "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": "<init>", "desc": "()V"},
{"visibility": "public", "declaration": "companion object", "name": "$$INSTANCE", "desc": "LPublicInterface$Companion;"},
{"visibility": "public", "declaration": "companion object", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "interface PublicInterface defined in root package",
"visibility": "public",
"class": "PublicInterface",
"members": [
{"visibility": "public", "declaration": "interface PublicInterface", "name": "<clinit>", "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": "<init>", "desc": "()V"},
{"visibility": "public", "declaration": "companion object", "name": "$$INSTANCE", "desc": "LInternalInterface$Companion;"},
{"visibility": "public", "declaration": "companion object", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "interface InternalInterface defined in root package",
"visibility": "internal",
"class": "InternalInterface",
"members": [
{"visibility": "internal", "declaration": "interface InternalInterface", "name": "<clinit>", "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": "<init>", "desc": "()V"},
{"visibility": "private", "declaration": "companion object", "name": "$$INSTANCE", "desc": "LInternalInterfacePrivateCompanion$Companion;"},
{"visibility": "private", "declaration": "companion object", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "interface InternalInterfacePrivateCompanion defined in root package",
"visibility": "internal",
"class": "InternalInterfacePrivateCompanion",
"members": [
{"visibility": "internal", "declaration": "interface InternalInterfacePrivateCompanion", "name": "<clinit>", "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": "<init>", "desc": "()V"},
{"name": "INSTANCE", "desc": "LPrivateInterface$ObjPublic;"},
{"visibility": "public", "declaration": "object ObjPublic", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "object ObjPrivate defined in PrivateInterface",
"visibility": "private",
"class": "PrivateInterface$ObjPrivate",
"members": [
{"visibility": "private", "declaration": "constructor ObjPrivate()", "name": "<init>", "desc": "()V"},
{"name": "INSTANCE", "desc": "LPrivateInterface$ObjPrivate;"},
{"visibility": "private", "declaration": "object ObjPrivate", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "final class NestedPublic defined in PrivateInterface",
"visibility": "public",
"class": "PrivateInterface$NestedPublic",
"members": [
{"visibility": "public", "declaration": "constructor NestedPublic()", "name": "<init>", "desc": "()V"}
]
},
{
"declaration": "final class NestedPrivate defined in PrivateInterface",
"visibility": "private",
"class": "PrivateInterface$NestedPrivate",
"members": [
{"visibility": "public", "declaration": "constructor NestedPrivate()", "name": "<init>", "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": "<init>", "desc": "()V"},
{"visibility": "public", "declaration": "companion object", "name": "$$INSTANCE", "desc": "LPrivateInterface$Companion;"},
{"visibility": "public", "declaration": "companion object", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "interface PrivateInterface defined in root package",
"visibility": "private",
"class": "PrivateInterface",
"members": [
{"visibility": "private", "declaration": "interface PrivateInterface", "name": "<clinit>", "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": "<init>", "desc": "()V"},
{"visibility": "private", "declaration": "companion object", "name": "$$INSTANCE", "desc": "LPrivateInterfacePrivateCompanion$Companion;"},
{"visibility": "private", "declaration": "companion object", "name": "<clinit>", "desc": "()V"}
]
},
{
"declaration": "interface PrivateInterfacePrivateCompanion defined in root package",
"visibility": "private",
"class": "PrivateInterfacePrivateCompanion",
"members": [
{"visibility": "private", "declaration": "interface PrivateInterfacePrivateCompanion", "name": "<clinit>", "desc": "()V"},
{"name": "Companion", "desc": "LPrivateInterfacePrivateCompanion$Companion;"}
]
}
]