Treat nested class of header class as header

Note that the quick fix to implement header class works incorrectly when
that class has nested classes at the moment; this should be fixed
separately

 #KT-15494 Fixed
 #KT-18573 Fixed
This commit is contained in:
Alexander Udalov
2017-07-21 18:22:32 +03:00
parent 56b507d141
commit d1cff41ce0
35 changed files with 348 additions and 119 deletions
@@ -2,11 +2,11 @@
package
public final header enum class Bar : kotlin.Enum<Bar> {
enum entry X
header enum entry X
enum entry Y
header enum entry Y
enum entry Z
header enum entry Z
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -22,9 +22,9 @@ public final header enum class Bar : kotlin.Enum<Bar> {
}
public final header enum class Foo : kotlin.Enum<Foo> {
enum entry A
header enum entry A
enum entry B
header enum entry B
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -1,9 +1,9 @@
package
public final header enum class En : kotlin.Enum<En> {
enum entry E1
header enum entry E1
enum entry E2
header enum entry E2
private constructor En(/*0*/ x: kotlin.Int)
private constructor En(/*0*/ s: kotlin.String)
@@ -21,7 +21,7 @@ public final header enum class En : kotlin.Enum<En> {
}
public final header enum class En2 : kotlin.Enum<En2> {
enum entry E1
header enum entry E1
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -2,11 +2,11 @@
package
public final header enum class Bar : kotlin.Enum<Bar> {
enum entry X
header enum entry X
enum entry Y
header enum entry Y
enum entry Z
header enum entry Z
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -22,9 +22,9 @@ public final header enum class Bar : kotlin.Enum<Bar> {
}
public final header enum class Foo : kotlin.Enum<Foo> {
enum entry A
header enum entry A
enum entry B
header enum entry B
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -5,7 +5,7 @@
header enum class En {
E1,
<!HEADER_ENUM_ENTRY_WITH_BODY!>E2 {
fun foo() = ""
<!HEADER_DECLARATION_WITH_BODY!>fun foo()<!> = ""
},<!>
<!HEADER_ENUM_ENTRY_WITH_BODY!>E3 { };<!>
}
@@ -1,11 +1,11 @@
package
public final header enum class En : kotlin.Enum<En> {
enum entry E1
header enum entry E1
enum entry E2
header enum entry E2
enum entry E3
header enum entry E3
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -2,11 +2,11 @@
package
public final header enum class Foo : kotlin.Enum<Foo> {
enum entry ENTRY1
header enum entry ENTRY1
enum entry ENTRY2
header enum entry ENTRY2
enum entry ENTRY3
header enum entry ENTRY3
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -17,7 +17,7 @@ public final header class Class {
}
public final header enum class En : kotlin.Enum<En> {
enum entry ENTRY
header enum entry ENTRY
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -3,23 +3,29 @@
// FILE: common.kt
header class OuterClass {
header class NestedClass {
header class DeepNested {
header class Another
class NestedClass {
class DeepNested {
class Another {
fun f(s: String)
val p: Int
}
}
}
header inner class InnerClass
inner class InnerClass {
fun f(x: Int)
val p: String
}
header companion object
companion object
}
header class OuterClassWithNamedCompanion {
header companion object Factory
companion object Factory
}
header object OuterObject {
header object NestedObject
object NestedObject
}
// MODULE: m2-jvm(m1-common)
@@ -28,11 +34,17 @@ header object OuterObject {
impl class OuterClass {
impl class NestedClass {
impl class DeepNested {
impl class Another
impl class Another {
impl fun f(s: String) {}
impl val p: Int = 42
}
}
}
impl inner class InnerClass
impl inner class InnerClass {
impl fun f(x: Int) {}
impl val p: String = ""
}
impl companion object
}
@@ -15,7 +15,9 @@ public final header class OuterClass {
public final header inner class InnerClass {
public constructor InnerClass()
public header final val p: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final header fun f(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -34,7 +36,9 @@ public final header class OuterClass {
public final header class Another {
public constructor Another()
public header final val p: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final header fun f(/*0*/ s: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -86,7 +90,9 @@ public final impl class OuterClass {
public final impl inner class InnerClass {
public constructor InnerClass()
public impl final val p: kotlin.String = ""
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final impl fun f(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -105,7 +111,9 @@ public final impl class OuterClass {
public final impl class Another {
public constructor Another()
public impl final val p: kotlin.Int = 42
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final impl fun f(/*0*/ s: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,38 @@
// !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common
// FILE: common.kt
header class B {
class N {
<!HEADER_DECLARATION_WITH_BODY, JVM:HEADER_DECLARATION_WITH_BODY!>fun body()<!> {}
<!WRONG_MODIFIER_TARGET, JVM:WRONG_MODIFIER_TARGET!>header<!> fun extraHeader()
}
}
header class C {
<!WRONG_MODIFIER_TARGET, JVM:WRONG_MODIFIER_TARGET!>header<!> class N
<!WRONG_MODIFIER_TARGET, JVM:WRONG_MODIFIER_TARGET!>header<!> enum class E
<!WRONG_MODIFIER_TARGET, JVM:WRONG_MODIFIER_TARGET!>header<!> inner class I
}
header class D {
class N
}
// MODULE: m1-jvm(m1-common)
// FILE: jvm.kt
impl class B {
impl class N {
impl fun body() {}
impl fun extraHeader() {}
}
}
impl class C {
impl class N
impl enum class E
impl inner class I
}
impl class <!HEADER_CLASS_MEMBERS_ARE_NOT_IMPLEMENTED!>D<!>
@@ -0,0 +1,132 @@
// -- Module: <m1-common> --
package
public final header class B {
public constructor B()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final header class N {
public constructor N()
public final header fun body(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final header fun extraHeader(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final header class C {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final header enum class E : kotlin.Enum<C.E> {
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: C.E): kotlin.Int
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): C.E
public final /*synthesized*/ fun values(): kotlin.Array<C.E>
}
public final header inner class I {
public constructor I()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final header class N {
public constructor N()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final header class D {
public constructor D()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final header class N {
public constructor N()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
// -- Module: <m1-jvm> --
package
public final impl class B {
public constructor B()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final impl class N {
public constructor N()
public final impl fun body(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final impl fun extraHeader(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final impl class C {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final impl enum class E : kotlin.Enum<C.E> {
private constructor E()
public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: C.E): kotlin.Int
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit
public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<C.E!>!
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): C.E
public final /*synthesized*/ fun values(): kotlin.Array<C.E>
}
public final impl inner class I {
public constructor I()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final impl class N {
public constructor N()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final impl class D {
public constructor D()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -5,7 +5,7 @@
<!WRONG_MODIFIER_TARGET!>header<!> typealias Foo = String
class Outer <!WRONG_MODIFIER_TARGET!>header<!> constructor() {
header class Nested
<!WRONG_MODIFIER_TARGET!>header<!> class Nested
<!WRONG_MODIFIER_TARGET!>header<!> init {}