FIR: Properly deserialize upper bounds of classes type parameters
^KT-46661 Fixed
This commit is contained in:
committed by
teamcityserver
parent
858e3584a9
commit
d4586cefb4
@@ -1,23 +0,0 @@
|
||||
// KT-16291 Smart cast doesn't work when getting class of instance
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
class Foo {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other === null || other::class != this::class) return false
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
fun test(f: Foo?): KClass<out Foo>? = if (f != null) f::class else null
|
||||
|
||||
fun test2(): KClass<out Foo>? {
|
||||
var f: Foo? = null
|
||||
if (f != null) {
|
||||
run { f = null }
|
||||
return <!RETURN_TYPE_MISMATCH!><!EXPRESSION_OF_NULLABLE_TYPE_IN_CLASS_LITERAL_LHS!>f<!>::class<!>
|
||||
}
|
||||
return null
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// KT-16291 Smart cast doesn't work when getting class of instance
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
+4
-4
@@ -21,9 +21,9 @@ interface<!SYNTAX!><!> {
|
||||
|
||||
}
|
||||
|
||||
enum class<!SYNTAX!><!> {
|
||||
<!UPPER_BOUND_VIOLATED!>enum class<!SYNTAX!><!> {
|
||||
|
||||
}
|
||||
}<!>
|
||||
|
||||
annotation class<!SYNTAX!><!> {
|
||||
|
||||
@@ -48,9 +48,9 @@ class Outer {
|
||||
|
||||
}
|
||||
|
||||
enum class<!SYNTAX!><!> {
|
||||
<!UPPER_BOUND_VIOLATED!>enum class<!SYNTAX!><!> {
|
||||
|
||||
}
|
||||
}<!>
|
||||
|
||||
annotation class<!SYNTAX!><!> {
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// COMPARE_WITH_LIGHT_TREE
|
||||
// FILE: test.kt
|
||||
enum class MyEnum(): <!CLASS_IN_SUPERTYPE_FOR_ENUM!>MyClass<!>() {}
|
||||
enum class MyEnum2(): MyTrait {}
|
||||
enum class MyEnum3(): <!CLASS_IN_SUPERTYPE_FOR_ENUM, FINAL_SUPERTYPE!>MyEnumBase<!>() {}
|
||||
enum class MyEnum3(): <!UPPER_BOUND_VIOLATED{LT}!><!CLASS_IN_SUPERTYPE_FOR_ENUM, FINAL_SUPERTYPE, UPPER_BOUND_VIOLATED{PSI}!>MyEnumBase<!>()<!> {}
|
||||
|
||||
open class MyClass() {}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// COMPARE_WITH_LIGHT_TREE
|
||||
// FILE: test.kt
|
||||
enum class MyEnum(): <!CLASS_IN_SUPERTYPE_FOR_ENUM!>MyClass<!>() {}
|
||||
enum class MyEnum2(): MyTrait {}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FIR_IDE_IGNORE
|
||||
enum class<!SYNTAX!><!> {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
// WITH_RUNTIME
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
class Foo<T : Enum<T>>(val values: Array<T>)
|
||||
|
||||
fun foo(x: Array<out Enum<*>>) {
|
||||
val y = <!NEW_INFERENCE_ERROR!>Foo(x)<!>
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_RUNTIME
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// FIR_IDENTICAL
|
||||
// FIR_IDE_IGNORE
|
||||
// !DIAGNOSTICS: -REDECLARATION -DUPLICATE_CLASS_NAMES
|
||||
|
||||
class C {
|
||||
@@ -15,4 +16,4 @@ class C {
|
||||
|
||||
class C1<<!SYNTAX!>in<!>> {}
|
||||
|
||||
class C2(val<!SYNTAX!><!>) {}
|
||||
class C2(val<!SYNTAX!><!>) {}
|
||||
|
||||
+1
-1
@@ -21,6 +21,6 @@ object<!SYNTAX!><!> {
|
||||
|
||||
}
|
||||
|
||||
enum class<!SYNTAX!><!> {}
|
||||
<!UPPER_BOUND_VIOLATED!>enum class<!SYNTAX!><!> {}<!>
|
||||
|
||||
annotation class<!SYNTAX!><!> {}
|
||||
|
||||
Reference in New Issue
Block a user