Put not-null original type as last possible smart cast target
This fixes muted tests testSmartCast (IDE highlighting) and
testNestedSealed (Diagnostics).
Together with commit 555b3f12 this makes #KT-15901 Fixed
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
||||
// See KT-15901
|
||||
|
||||
<info>enum</info> class En { A }
|
||||
|
||||
fun foo(): Any {
|
||||
val en2: Any? = En.A
|
||||
if (en2 is En) {
|
||||
// Here we had smart casts to En / Any
|
||||
// should be always En
|
||||
val a: Any = <info descr="Smart cast to En">en2</info>
|
||||
return a
|
||||
}
|
||||
return ""
|
||||
}
|
||||
+6
-6
@@ -15,7 +15,7 @@ fun f9(a : A?) {
|
||||
a<info>?.</info><error descr="[UNRESOLVED_REFERENCE] Unresolved reference: bar">bar</error>()
|
||||
if (a is B) {
|
||||
<info descr="Smart cast to B">a</info>.bar()
|
||||
<info descr="Smart cast to A">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.foo()
|
||||
}
|
||||
a<info>?.</info>foo()
|
||||
a<info>?.</info><error descr="[UNRESOLVED_REFERENCE] Unresolved reference: bar">bar</error>()
|
||||
@@ -30,7 +30,7 @@ fun f9(a : A?) {
|
||||
return;
|
||||
}
|
||||
<info descr="Smart cast to B">a</info>.bar()
|
||||
<info descr="Smart cast to A">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.foo()
|
||||
}
|
||||
|
||||
fun fAny(a : Any?) {
|
||||
@@ -96,7 +96,7 @@ fun f12(a : A?) {
|
||||
|
||||
fun f13(a : A?) {
|
||||
if (a is B) {
|
||||
<info descr="Smart cast to A">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.bar()
|
||||
}
|
||||
else {
|
||||
@@ -109,12 +109,12 @@ fun f13(a : A?) {
|
||||
a<info>?.</info>foo()
|
||||
}
|
||||
else {
|
||||
<info descr="Smart cast to A">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.foo()
|
||||
}
|
||||
|
||||
a<info>?.</info>foo()
|
||||
if (a is B && <info descr="Smart cast to A">a</info>.foo() == Unit) {
|
||||
<info descr="Smart cast to A">a</info>.foo()
|
||||
if (a is B && <info descr="Smart cast to B">a</info>.foo() == Unit) {
|
||||
<info descr="Smart cast to B">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.bar()
|
||||
}
|
||||
else {
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ fun test(a: A?) {
|
||||
}
|
||||
|
||||
if (a is B && a is C) {
|
||||
<info descr="Smart cast to A">a</info>.foo()
|
||||
<info descr="Smart cast to B">a</info>.foo()
|
||||
}
|
||||
|
||||
if (a is B? && a is C?) {
|
||||
|
||||
Reference in New Issue
Block a user