'Cast can never succeed' diagnostics improved

This commit is contained in:
Andrey Breslav
2013-09-04 13:12:07 +04:00
parent 9f4beece64
commit a28d211442
6 changed files with 250 additions and 9 deletions
@@ -0,0 +1,33 @@
// !DIAGNOSTICS: -WARNING +CAST_NEVER_SUCCEEDS
import java.lang.String as JString
import java.lang.CharSequence as JCS
fun test(
s: String,
js: JString,
cs: CharSequence,
jcs: JCS
) {
s as JString
s as JCS
s as CharSequence
s as String
js as JString
js as JCS
js as CharSequence
js as String
cs as JString
cs as JCS
cs as CharSequence
cs as String
jcs as JString
jcs as JCS
jcs as CharSequence
jcs as String
jcs <!CAST_NEVER_SUCCEEDS!>as<!> Int
s <!CAST_NEVER_SUCCEEDS!>as<!> java.lang.Integer
}
@@ -0,0 +1,21 @@
// !DIAGNOSTICS: -WARNING +CAST_NEVER_SUCCEEDS -ABSTRACT_MEMBER_NOT_IMPLEMENTED
import java.lang.CharSequence as JCS
class JSub: JCS
class Sub: CharSequence
fun test(
s: Sub,
js: JSub,
cs: CharSequence,
jcs: JCS
) {
// js as CharSequence // - this case is not supported due to limitation in PlatformToKotlinClassMap
js as JCS
s as CharSequence
s as JCS
js <!CAST_NEVER_SUCCEEDS!>as<!> Sub
s <!CAST_NEVER_SUCCEEDS!>as<!> JSub
}
@@ -0,0 +1,46 @@
// !DIAGNOSTICS: -WARNING +CAST_NEVER_SUCCEEDS
trait T1
trait T2
trait T3
open class OC1: T1
open class OC2: OC1(), T2
class FC1: OC2(), T3
trait T4: OC1
trait T5: T2
fun test<TP1: OC1, TP2: T2, TP3: OC2>(
t2: T2,
t4: T4,
fc1: FC1,
oc1: OC1,
oc2: OC2,
tp1: TP1,
tp2: TP2
) {
fc1 as FC1
fc1 as OC1
fc1 as T1
fc1 as TP1
oc1 as FC1
oc1 as OC2
oc2 as OC1
oc1 as T2
oc1 as T1
oc1 as TP1
oc1 as TP2
t2 as FC1
t2 as OC2
t4 as OC1
t2 as T2
t2 as T5
t2 as TP2
tp1 as FC1
tp1 as OC1
tp1 as OC2
tp2 as T2
tp2 as T5
tp1 as TP3
}
@@ -0,0 +1,34 @@
// !DIAGNOSTICS: -WARNING +CAST_NEVER_SUCCEEDS
trait Trait1
trait Trait2
open class OClass1
open class OClass2
class FClass1
class FClass2
fun test<TP1: OClass1, TP2: OClass2>(
t1: Trait1,
oc1: OClass1,
fc1: FClass1,
tp1: TP1
) {
t1 as Trait2
t1 as OClass2
t1 <!CAST_NEVER_SUCCEEDS!>as<!> FClass2
t1 as TP2
oc1 as Trait2
oc1 <!CAST_NEVER_SUCCEEDS!>as<!> OClass2
oc1 <!CAST_NEVER_SUCCEEDS!>as<!> FClass2
oc1 as TP2
fc1 <!CAST_NEVER_SUCCEEDS!>as<!> Trait2
fc1 <!CAST_NEVER_SUCCEEDS!>as<!> OClass2
fc1 <!CAST_NEVER_SUCCEEDS!>as<!> FClass2
fc1 as TP2
tp1 as Trait2
tp1 as OClass2
tp1 as FClass2
tp1 as TP2
}