Erased casts supported
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
trait Map<K, out V>
|
||||
trait MutableMap<K, V>: Map<K, V> {
|
||||
fun set(k: K, v: V)
|
||||
}
|
||||
|
||||
fun p(p: Map<String, Int>) {
|
||||
if (p is MutableMap<String, Int>) {
|
||||
p[""] = 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
fun f(a: Array<out Number>) = a is Array<Int>
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
open class BaseTwo<A, B>
|
||||
open class DerivedWithOne<D>: BaseTwo<D, String>()
|
||||
|
||||
// a is BaseTwo<T, U> => if (a is DerivedWithOne<?>) a is DerivedWithOne<T>
|
||||
fun <T, U> testing(a: BaseTwo<T, U>) = a is DerivedWithOne<T>
|
||||
@@ -0,0 +1,5 @@
|
||||
open class Base<A>
|
||||
class Some: Base<Int>()
|
||||
|
||||
// a is Some => a is Base<Int>
|
||||
fun f(a: Some) = a is Base<Int>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
open class A
|
||||
open class B: A()
|
||||
|
||||
open class Base<out T>
|
||||
open class SubBase<T> : Base<T>()
|
||||
|
||||
// l is Base<+B> => if (l is SubBase<?>) l is SubBase<+B> => l is SubBase<+A>
|
||||
fun ff(l: Base<B>) = l is SubBase<out A>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
open class A
|
||||
open class B: A()
|
||||
|
||||
open class Base<in T>
|
||||
class SubBase: Base<A>()
|
||||
|
||||
// f is SubBase => f is Base<A> => (Base<Contravariant T>, B <: A) f is Base<B>
|
||||
fun test(f: SubBase) = f is Base<B>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
open class A
|
||||
open class B: A()
|
||||
|
||||
open class Base<out T>
|
||||
class SubBase: Base<B>()
|
||||
|
||||
// f is SubBase => (SubBase <: Base<B>) f is Base<B> => (B <: A, Base<Covariant T> => SubBase <: Base<A>) f is Base<A>
|
||||
fun test(f: SubBase) = f is Base<A>
|
||||
@@ -0,0 +1,9 @@
|
||||
trait A
|
||||
trait B: A
|
||||
trait D
|
||||
|
||||
trait BaseSuper<T>
|
||||
trait BaseImpl: BaseSuper<D>
|
||||
trait DerivedSuper<out S>: <!INCONSISTENT_TYPE_PARAMETER_VALUES!>BaseSuper<S>, BaseImpl<!>
|
||||
|
||||
fun test(t: BaseSuper<B>) = t is DerivedSuper<A>
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
open class BaseMulti<out A, B>
|
||||
class SomeMultiDerived<out D>: BaseMulti<D, Any>()
|
||||
|
||||
// t is BaseMulti<+String, String> => if (t is SomeMultiDerived<?>) => t is SomeMultiDerived<+String> =>
|
||||
// => (String <: Any, SomeMultiDerived<Covariant D>) t is SomeMultiDerived<+Any>
|
||||
fun someDerived(t: BaseMulti<String, String>) = t is SomeMultiDerived<Any>
|
||||
@@ -0,0 +1,5 @@
|
||||
open class Base<A>
|
||||
class Some: Base<Int>()
|
||||
|
||||
// No erased types in check
|
||||
fun <A> f(a: Base<A>) = a is Some
|
||||
@@ -0,0 +1,8 @@
|
||||
open class A
|
||||
open class B: A()
|
||||
|
||||
open class Base<out T>
|
||||
open class SubBase<T> : Base<T>()
|
||||
|
||||
|
||||
fun ff(l: Base<B>) = l is <!CANNOT_CHECK_FOR_ERASED!>SubBase<A><!>
|
||||
@@ -0,0 +1,6 @@
|
||||
trait A
|
||||
trait B: A
|
||||
|
||||
trait Base<T>
|
||||
|
||||
fun <T> test(a: Base<B>) where T: Base<A> = a is <!CANNOT_CHECK_FOR_ERASED!>T<!>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
open class A
|
||||
open class B: A()
|
||||
open class D
|
||||
|
||||
open class Base<out T, out U>
|
||||
open class Derived<out S>: Base<S, S>()
|
||||
|
||||
fun test(a: Base<D, B>) = a is <!CANNOT_CHECK_FOR_ERASED!>Derived<A><!>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
open class A
|
||||
open class B: A()
|
||||
open class D
|
||||
|
||||
open class Base<out T, out U>
|
||||
open class Derived<out S>: Base<S, S>()
|
||||
|
||||
fun test(a: Base<B, D>) = a is <!CANNOT_CHECK_FOR_ERASED!>Derived<A><!>
|
||||
@@ -0,0 +1,3 @@
|
||||
trait A
|
||||
trait B
|
||||
fun testing(a: A) = a as B
|
||||
@@ -0,0 +1 @@
|
||||
fun <T: Any> testing(a: T?) = a is T
|
||||
@@ -0,0 +1 @@
|
||||
fun <T> testing(a: T) = a is T
|
||||
@@ -0,0 +1 @@
|
||||
fun testing(a: Any) = a is <!UNRESOLVED_REFERENCE!>UnresolvedType<!><Int>
|
||||
@@ -0,0 +1,6 @@
|
||||
open class RecA<T>: <!CYCLIC_INHERITANCE_HIERARCHY!>RecB<T><!>()
|
||||
open class RecB<T>: <!CYCLIC_INHERITANCE_HIERARCHY!>RecA<T><!>()
|
||||
open class SelfR<T>: <!CYCLIC_INHERITANCE_HIERARCHY!>SelfR<T><!>()
|
||||
|
||||
fun test(f: SelfR<String>) = f is <!CANNOT_CHECK_FOR_ERASED!>RecA<String><!>
|
||||
fun test(f: RecB<String>) = f is RecA<String>
|
||||
@@ -6,7 +6,7 @@ public fun foo(a: Any) {
|
||||
a is Map<out Any?, Any?>
|
||||
a is Map<*, *>
|
||||
a is Map<<!SYNTAX!><!>>
|
||||
a is <!CANNOT_CHECK_FOR_ERASED!>List<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Map<!>><!>
|
||||
a is List<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Map<!>>
|
||||
a is <!NO_TYPE_ARGUMENTS_ON_RHS_OF_IS_EXPRESSION!>List<!>
|
||||
a is Int
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ public fun foo(a: Any, <!UNUSED_PARAMETER!>b<!>: <!WRONG_NUMBER_OF_TYPE_ARGUMENT
|
||||
is Map<out Any?, Any?> -> {}
|
||||
is Map<*, *> -> {}
|
||||
is Map<<!SYNTAX!><!>> -> {}
|
||||
is <!CANNOT_CHECK_FOR_ERASED!>List<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Map<!>><!> -> {}
|
||||
is List<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Map<!>> -> {}
|
||||
is <!NO_TYPE_ARGUMENTS_ON_RHS_OF_IS_EXPRESSION!>List<!> -> {}
|
||||
is Int -> {}
|
||||
else -> {}
|
||||
|
||||
Reference in New Issue
Block a user