[FE] Prohibit inheritors of sealed classes which are declared in different package

#KT-13495
This commit is contained in:
Dmitriy Novozhilov
2020-11-16 16:00:38 +03:00
committed by TeamCityServer
parent e76acc8ee0
commit d605c7e491
8 changed files with 125 additions and 26 deletions
@@ -3,16 +3,22 @@
// FILE: a.kt
package foo
sealed class Base {
class A : Base()
}
// FILE: b.kt
package foo
class B : <!HIDDEN!>Base<!>()
// FILE: c.kt
package foo
class Container {
class C : <!HIDDEN, SEALED_SUPERTYPE!>Base<!>()
@@ -24,3 +30,11 @@ class Container {
class LocalClass : <!HIDDEN, SEALED_SUPERTYPE_IN_LOCAL_CLASS!>Base<!>() {} // Should be an error
}
}
// FILE: E.kt
package bar
import foo.Base
class E : <!HIDDEN!>Base<!>()
@@ -3,16 +3,22 @@
// FILE: a.kt
package foo
sealed class Base {
class A : Base()
}
// FILE: b.kt
package foo
class B : Base()
// FILE: c.kt
package foo
class Container {
class C : Base()
@@ -24,3 +30,11 @@ class Container {
class LocalClass : <!SEALED_SUPERTYPE!>Base<!>() {} // Should be an error
}
}
// FILE: E.kt
package bar
import foo.Base
class E : <!SEALED_INHERITOR_IN_DIFFERENT_PACKAGE!>Base<!>()
@@ -1,45 +1,58 @@
package
public final class B : Base {
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
}
package bar {
public sealed class Base {
internal constructor Base()
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 class A : Base {
public constructor A()
public final class E : foo.Base {
public constructor E()
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 class Container {
public constructor Container()
public final val anon: Base
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 final fun someFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
package foo {
public final class C : Base {
public constructor C()
public final class B : foo.Base {
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 inner class D : Base {
public constructor D()
public sealed class Base {
internal constructor Base()
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 class A : foo.Base {
public constructor A()
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 class Container {
public constructor Container()
public final val anon: foo.Base
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 final fun someFun(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public final class C : foo.Base {
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 inner class D : foo.Base {
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
}
}
}