81414d758d
This commit changes the behavior of KT-59138 effectively declining it in 2.0. However, we plan to implement KT-59138 behavior under a feature flag in 2.0 (see KT-66447), and switch this feature on version 2.x. Also, this commit implements the LC resolution about postponing KT-57014 change. We don't have KT-57014 described behavior in 2.0 anymore. However, we plan to implement a deprecation warning here, see KT-65578. After this commit, 6 diagnostic tests become incorrectly broken: - 5 tests from PurelyImplementedCollection group - a test platformTypes/nullableTypeArgument.kt This commit also breaks currently fixed-in-k2 KT-50134 (it is fixed again in the following commits), as well as KT-58933 (it will remain not fixed till we enable KT-59138 behavior again). #KT-65596 In Progress #KT-57014 In Progress #KT-58933 Submitted
59 lines
1.3 KiB
Kotlin
Vendored
59 lines
1.3 KiB
Kotlin
Vendored
// !LANGUAGE: +ExpectedTypeFromCast
|
|
// !DIAGNOSTICS: -UNUSED_VARIABLE -DEBUG_INFO_LEAKING_THIS
|
|
|
|
// FILE: a/View.java
|
|
package a;
|
|
|
|
public class View {
|
|
|
|
}
|
|
|
|
// FILE: a/Test.java
|
|
package a;
|
|
|
|
public class Test {
|
|
public <T extends View> T findViewById(int id);
|
|
}
|
|
|
|
// FILE: 1.kt
|
|
package a
|
|
|
|
|
|
class X : View()
|
|
|
|
class Y<T> : View()
|
|
|
|
val xExplicit: X = Test().findViewById(0)
|
|
val xCast = Test().findViewById(0) as X
|
|
|
|
val xCastExplicitType = Test().findViewById<X>(0) as X
|
|
val xSafeCastExplicitType = Test().findViewById<X>(0) as? X
|
|
|
|
val yExplicit: Y<String> = Test().findViewById(0)
|
|
val yCast = Test().findViewById(0) as Y<String>
|
|
|
|
|
|
class TestChild : Test() {
|
|
val xExplicit: X = findViewById(0)
|
|
val xCast = findViewById(0) as X
|
|
|
|
val yExplicit: Y<String> = findViewById(0)
|
|
val yCast = findViewById(0) as Y<String>
|
|
}
|
|
|
|
fun test(t: Test) {
|
|
val xExplicit: X = t.findViewById(0)
|
|
val xCast = t.findViewById(0) as X
|
|
|
|
val yExplicit: Y<String> = t.findViewById(0)
|
|
val yCast = t.findViewById(0) as Y<String>
|
|
}
|
|
|
|
fun test2(t: Test?) {
|
|
val xSafeCallSafeCast = t?.findViewById(0) <!USELESS_CAST!>as? X<!>
|
|
val xSafeCallSafeCastExplicitType = t?.findViewById<X>(0) <!USELESS_CAST!>as? X<!>
|
|
|
|
val xSafeCallCast = t?.findViewById(0) as X
|
|
val xSafeCallCastExplicitType = t<!UNNECESSARY_SAFE_CALL!>?.<!>findViewById<X>(0) as X
|
|
}
|