[FE] Collect inheritors of sealed classes from new places in computeSealedSubclasses

#KT-13495
This commit is contained in:
Dmitriy Novozhilov
2020-11-16 12:20:15 +03:00
committed by TeamCityServer
parent 70c61be1ef
commit e76acc8ee0
17 changed files with 374 additions and 39 deletions
@@ -0,0 +1,64 @@
// ISSUE: KT-13495
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +FreedomForSealedClasses
// FILE: Base.kt
sealed class Base {
class A : Base()
}
// FILE: B.kt
class B : <!HIDDEN!>Base<!>()
// FILE: Container.kt
class Containter {
class C : <!HIDDEN, SEALED_SUPERTYPE!>Base<!>()
inner class D : <!HIDDEN, SEALED_SUPERTYPE!>Base<!>()
}
// FILE: main.kt
fun test_OK(base: Base) {
val x = when (base) {
is Base.A -> 1
is B -> 2
is Containter.C -> 3
is Containter.D -> 4
}
}
fun test_error_1(base: Base) {
val x = when (base) {
is B -> 2
is Containter.C -> 3
is Containter.D -> 4
}
}
fun test_error_2(base: Base) {
val x = when (base) {
is Base.A -> 1
is Containter.C -> 3
is Containter.D -> 4
}
}
fun test_error_3(base: Base) {
val x = when (base) {
is Base.A -> 1
is B -> 2
is Containter.D -> 4
}
}
fun test_error_4(base: Base) {
val x = when (base) {
is Base.A -> 1
is B -> 2
is Containter.C -> 3
}
}
@@ -0,0 +1,64 @@
// ISSUE: KT-13495
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +FreedomForSealedClasses
// FILE: Base.kt
sealed class Base {
class A : Base()
}
// FILE: B.kt
class B : Base()
// FILE: Container.kt
class Containter {
class C : Base()
inner class D : Base()
}
// FILE: main.kt
fun test_OK(base: Base) {
val x = when (base) {
is Base.A -> 1
is B -> 2
is Containter.C -> 3
is Containter.D -> 4
}
}
fun test_error_1(base: Base) {
val x = <!NO_ELSE_IN_WHEN!>when<!> (base) {
is B -> 2
is Containter.C -> 3
is Containter.D -> 4
}
}
fun test_error_2(base: Base) {
val x = <!NO_ELSE_IN_WHEN!>when<!> (base) {
is Base.A -> 1
is Containter.C -> 3
is Containter.D -> 4
}
}
fun test_error_3(base: Base) {
val x = <!NO_ELSE_IN_WHEN!>when<!> (base) {
is Base.A -> 1
is B -> 2
is Containter.D -> 4
}
}
fun test_error_4(base: Base) {
val x = <!NO_ELSE_IN_WHEN!>when<!> (base) {
is Base.A -> 1
is B -> 2
is Containter.C -> 3
}
}
@@ -0,0 +1,49 @@
package
public fun test_OK(/*0*/ base: Base): kotlin.Unit
public fun test_error_1(/*0*/ base: Base): kotlin.Unit
public fun test_error_2(/*0*/ base: Base): kotlin.Unit
public fun test_error_3(/*0*/ base: Base): kotlin.Unit
public fun test_error_4(/*0*/ base: Base): kotlin.Unit
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
}
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 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 Containter {
public constructor Containter()
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 C : 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 : 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
}
}
@@ -1,5 +1,4 @@
// ISSUE: KT-13495
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +FreedomForSealedClasses
// FILE: a.kt
@@ -25,14 +24,3 @@ class Container {
class LocalClass : <!HIDDEN, SEALED_SUPERTYPE_IN_LOCAL_CLASS!>Base<!>() {} // Should be an error
}
}
// FILE: d.kt
fun test(base: Base) {
val x = when (base) {
is Base.A -> 1
is B -> 2
is Container.C -> 3
is Container.D -> 4
}
}
@@ -1,5 +1,4 @@
// ISSUE: KT-13495
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +FreedomForSealedClasses
// FILE: a.kt
@@ -25,14 +24,3 @@ class Container {
class LocalClass : <!SEALED_SUPERTYPE!>Base<!>() {} // Should be an error
}
}
// FILE: d.kt
fun test(base: Base) {
val x = when (base) {
is Base.A -> 1
is B -> 2
is Container.C -> 3
is Container.D -> 4
}
}
@@ -1,7 +1,5 @@
package
public fun test(/*0*/ base: Base): kotlin.Unit
public final class B : Base {
public constructor B()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -0,0 +1,39 @@
// ISSUE: KT-13495
// !LANGUAGE: +FreedomForSealedClasses
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: base.kt
package foo
class Container {
sealed class Base
}
// FILE: a.kt
package foo
class A : <!HIDDEN, SEALED_SUPERTYPE!>Container.Base<!>()
// FILE: b.kt
package foo
class BContainer {
class B : <!HIDDEN, SEALED_SUPERTYPE!>Container.Base<!>()
inner class C : <!HIDDEN, SEALED_SUPERTYPE!>Container.Base<!>()
}
// FILE: test.kt
package foo
fun test(base: Container.Base) {
val x = when (base) {
is A -> 1
is BContainer.B -> 2
is BContainer.C -> 3
}
}
@@ -0,0 +1,39 @@
// ISSUE: KT-13495
// !LANGUAGE: +FreedomForSealedClasses
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: base.kt
package foo
class Container {
sealed class Base
}
// FILE: a.kt
package foo
class A : Container.Base()
// FILE: b.kt
package foo
class BContainer {
class B : Container.Base()
inner class C : Container.Base()
}
// FILE: test.kt
package foo
fun test(base: Container.Base) {
val x = when (base) {
is A -> 1
is BContainer.B -> 2
is BContainer.C -> 3
}
}
@@ -0,0 +1,47 @@
package
package foo {
public fun test(/*0*/ base: foo.Container.Base): kotlin.Unit
public final class A : foo.Container.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 BContainer {
public constructor BContainer()
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 B : foo.Container.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 C : foo.Container.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 class Container {
public constructor Container()
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 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
}
}
}