Fix false warning about useless cast in property and property accessor
Note that there are some other problems, for example: `val a = if (true) 1 as Number else 2`, here we'll get useless cast #KT-9551 Fixed #KT-9645 Fixed
This commit is contained in:
+4
@@ -445,6 +445,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
if (parent instanceof KtBinaryExpression || parent instanceof KtUnaryExpression) {
|
if (parent instanceof KtBinaryExpression || parent instanceof KtUnaryExpression) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// Previously we've checked that there is no expected type, therefore cast in property has an effect on inference
|
||||||
|
if (parent instanceof KtProperty || parent instanceof KtPropertyAccessor) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ fun test() : Unit {
|
|||||||
checkSubtype<Int?>(x <!USELESS_CAST!>as? Int?<!>)
|
checkSubtype<Int?>(x <!USELESS_CAST!>as? Int?<!>)
|
||||||
checkSubtype<Int?>(y as? Int?)
|
checkSubtype<Int?>(y as? Int?)
|
||||||
|
|
||||||
val <!UNUSED_VARIABLE!>s<!> = "" <!USELESS_CAST!>as Any<!>
|
val <!UNUSED_VARIABLE!>s<!> = "" as Any
|
||||||
("" as String?)?.length
|
("" as String?)?.length
|
||||||
(data@("" as String?))?.length
|
(data@("" as String?))?.length
|
||||||
(<!WRONG_ANNOTATION_TARGET!>@MustBeDocumented()<!>( "" as String?))?.length
|
(<!WRONG_ANNOTATION_TARGET!>@MustBeDocumented()<!>( "" as String?))?.length
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
val a = 1 as Any?
|
||||||
|
val b: Number = 1 <!USELESS_CAST!>as Number<!>
|
||||||
|
val c = null as String?
|
||||||
|
val d: Number = 1 <!USELESS_CAST!>as Int<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
val c1 get() = 1 as Number
|
||||||
|
val c2: Number get() = 1 <!USELESS_CAST!>as Number<!>
|
||||||
|
|
||||||
|
val d: Number
|
||||||
|
get() {
|
||||||
|
1 <!USELESS_CAST!>as Number<!>
|
||||||
|
return 1 <!USELESS_CAST!>as Number<!>
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public val c1: kotlin.Number
|
||||||
|
public val c2: kotlin.Number
|
||||||
|
public val d: kotlin.Number
|
||||||
|
public fun test(): kotlin.Unit
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
typealias MyString = String
|
typealias MyString = String
|
||||||
|
|
||||||
val x: MyString = ""
|
val x: MyString = ""
|
||||||
val y = x <!USELESS_CAST!>as Any<!>
|
val y = x as Any
|
||||||
|
|
||||||
interface Base
|
interface Base
|
||||||
class Derived : Base
|
class Derived : Base
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
class G<T>
|
class G<T>
|
||||||
|
|
||||||
fun foo(p: <!UNRESOLVED_REFERENCE!>P<!>) {
|
fun foo(p: <!UNRESOLVED_REFERENCE!>P<!>) {
|
||||||
val v = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>p<!> <!USELESS_CAST!>as <!NO_TYPE_ARGUMENTS_ON_RHS!>G?<!><!>
|
val v = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>p<!> as <!NO_TYPE_ARGUMENTS_ON_RHS!>G?<!>
|
||||||
checkSubtype<G<*>>(v!!)
|
checkSubtype<G<*>>(v!!)
|
||||||
}
|
}
|
||||||
@@ -2686,6 +2686,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AsInPropertyAndPropertyAccessor.kt")
|
||||||
|
public void testAsInPropertyAndPropertyAccessor() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/cast/AsInPropertyAndPropertyAccessor.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AsNothing.kt")
|
@TestMetadata("AsNothing.kt")
|
||||||
public void testAsNothing() throws Exception {
|
public void testAsNothing() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/cast/AsNothing.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/cast/AsNothing.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user