don't report unnecessary smart cast on receiver

This commit is contained in:
Svetlana Isakova
2013-12-03 14:19:11 +04:00
parent 33c04bde9a
commit 46b77f4472
6 changed files with 20 additions and 7 deletions
@@ -35,8 +35,9 @@ public class AutoCastServiceImpl implements AutoCastService {
@NotNull
@Override
public List<ReceiverValue> getVariantsForReceiver(@NotNull ReceiverValue receiverValue) {
List<ReceiverValue> variants = Lists.newArrayList(AutoCastUtils.getAutoCastVariants(bindingContext, dataFlowInfo, receiverValue));
List<ReceiverValue> variants = Lists.newArrayList();
variants.add(receiverValue);
variants.addAll(AutoCastUtils.getAutoCastVariants(bindingContext, dataFlowInfo, receiverValue));
return variants;
}
@@ -3,8 +3,8 @@ package d
fun bar(a: Any?) {
if (a != null) {
<!DEBUG_INFO_AUTOCAST!>a<!>.foo() //overload resolution ambiguity
<!DEBUG_INFO_AUTOCAST!>a<!>.sure() //overload resolution ambiguity
a.foo() //overload resolution ambiguity
a.sure() //overload resolution ambiguity
}
}
@@ -183,7 +183,7 @@ fun returnFunctionLiteral(a: Any?): Function0<Int> =
fun mergeAutocasts(a: Any?) {
if (a is String || a is Int) {
a.<!UNRESOLVED_REFERENCE!>compareTo<!>("")
<!DEBUG_INFO_AUTOCAST!>a<!>.toString()
a.toString()
}
if (a is Int || a is String) {
a.<!UNRESOLVED_REFERENCE!>compareTo<!>("")
@@ -0,0 +1,7 @@
fun Any?.foo() {}
fun test(a: Any?) {
if (a != null) {
a.foo()
}
}
@@ -6173,6 +6173,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/diagnostics/tests/smartCasts/noErrorCheckForPackageLevelVal.kt");
}
@TestMetadata("noUnnecessarySmartCastForReceiver.kt")
public void testNoUnnecessarySmartCastForReceiver() throws Exception {
doTest("compiler/testData/diagnostics/tests/smartCasts/noUnnecessarySmartCastForReceiver.kt");
}
@TestMetadata("thisWithLabel.kt")
public void testThisWithLabel() throws Exception {
doTest("compiler/testData/diagnostics/tests/smartCasts/thisWithLabel.kt");
+3 -3
View File
@@ -165,11 +165,11 @@ fun declarations(a: Any?) {
fun vars(a: Any?) {
var <warning>b</warning>: Int = 0
if (a is Int) {
b = <info descr="Automatically cast to jet.Int"><warning>a</warning></info>
b = <warning><info descr="Automatically cast to jet.Int">a</info></warning>
}
}
fun returnFunctionLiteralBlock(<info>a</info>: Any?): Function0<Int> {
if (<info>a</info> is Int) return { <info><info descr="Automatically cast to jet.Int">a</info></info> }
if (<info>a</info> is Int) return { <info descr="Automatically cast to jet.Int"><info>a</info></info> }
else return { 1 }
}
fun returnFunctionLiteral(<info>a</info>: Any?): Function0<Int> =
@@ -179,7 +179,7 @@ fun returnFunctionLiteral(<info>a</info>: Any?): Function0<Int> =
fun merge<TYPO descr="Typo: In word 'Autocasts'">Autocasts</TYPO>(a: Any?) {
if (a is String || a is Int) {
a.<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: compareTo">compareTo</error>("")
<info descr="Automatically cast to jet.Any">a</info>.toString()
a.toString()
}
if (a is Int || a is String) {
a.<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: compareTo">compareTo</error>("")