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>
|
||||
Reference in New Issue
Block a user