53d6ac24e5
* Change 1.6 to 1.7 constants * Fix SAFE_CALL_WILL_CHANGE_NULLABILITY for testData * Change EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_WARNING to EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_ERROR * Change NON_EXHAUSTIVE_WHEN_STATEMENT to NO_ELSE_IN_WHEN * Fix testData for SafeCallsAreAlwaysNullable * Change T -> T & Any in test dumps * Change INVALID_CHARACTERS_NATIVE_WARNING -> INVALID_CHARACTERS_NATIVE_ERROR * TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_WARNING -> TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_ERROR
54 lines
1.9 KiB
Kotlin
Vendored
54 lines
1.9 KiB
Kotlin
Vendored
// !CHECK_TYPE
|
|
|
|
class In<in T>() {
|
|
fun f(t : T) : Unit {}
|
|
fun f(t : Int) : Int = 1
|
|
fun f1(t : T) : Unit {}
|
|
}
|
|
|
|
class Out<out T>() {
|
|
fun f() : T {throw IllegalStateException()}
|
|
fun f(a : Int) : Int = a
|
|
}
|
|
|
|
class Inv<T>() {
|
|
fun f(t : T) : T = t
|
|
fun inf(t : T) : Unit {}
|
|
fun outf() : T {throw IllegalStateException()}
|
|
}
|
|
|
|
fun testInOut() {
|
|
In<String>().f("1");
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> In<<!REDUNDANT_PROJECTION!>in<!> String>).f("1")
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> In<*>).f(<!TYPE_MISMATCH!>"1"<!>) // Wrong Arg
|
|
|
|
In<String>().f(1);
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> In<<!REDUNDANT_PROJECTION!>in<!> String>).f(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> In<*>).f(1);
|
|
|
|
Out<Int>().f(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Out<<!REDUNDANT_PROJECTION!>out<!> Int>).f(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Out<*>).f(1)
|
|
|
|
Out<Int>().f()
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Out<<!REDUNDANT_PROJECTION!>out<!> Int>).f()
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Out<*>).f()
|
|
|
|
Inv<Int>().f(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<in Int>).f(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).f(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).f(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
|
|
|
|
Inv<Int>().inf(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<in Int>).inf(1)
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).inf(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).inf(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>) // !!
|
|
|
|
Inv<Int>().outf()
|
|
checkSubtype<Int>(<!TYPE_MISMATCH!>(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<in Int>).outf()<!>) // Type mismatch
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<out Int>).outf()
|
|
(null <!CAST_NEVER_SUCCEEDS!>as<!> Inv<*>).outf()
|
|
|
|
Inv<Int>().outf(<!TOO_MANY_ARGUMENTS!>1<!>) // Wrong Arg
|
|
}
|