[FE] Collect inheritors of sealed classes from new places in computeSealedSubclasses
#KT-13495
This commit is contained in:
committed by
TeamCityServer
parent
70c61be1ef
commit
e76acc8ee0
@@ -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
|
||||
|
||||
+39
@@ -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
|
||||
}
|
||||
}
|
||||
+39
@@ -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
|
||||
}
|
||||
}
|
||||
+47
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user