Add variance test for nullable and function types.

This commit is contained in:
Stanislav Erokhin
2014-12-05 20:41:11 +03:00
parent 365c8a4787
commit fced4756bb
5 changed files with 95 additions and 0 deletions
@@ -0,0 +1,12 @@
trait In<in T>
fun <T> getT(): T = null!!
trait Test<in I, out O, P> {
fun ok1(i: (O) -> I) : (I) -> O
fun ok2(i: (P) -> P) : (P) -> P
fun ok3(i: (In<I>) -> In<O>) = getT<(In<O>) -> In<I>>()
fun neOk1(i: (<!TYPE_VARIANCE_CONFLICT!>I<!>) -> <!TYPE_VARIANCE_CONFLICT!>O<!>): (<!TYPE_VARIANCE_CONFLICT!>O<!>) -> <!TYPE_VARIANCE_CONFLICT!>I<!>
fun neOk2(i: (In<<!TYPE_VARIANCE_CONFLICT!>O<!>>) -> In<<!TYPE_VARIANCE_CONFLICT!>I<!>>)
<!TYPE_VARIANCE_CONFLICT, TYPE_VARIANCE_CONFLICT!>fun neOk3()<!> = getT<(In<I>) -> In<O>>()
}
@@ -0,0 +1,21 @@
package
internal fun </*0*/ T> getT(): T
internal trait In</*0*/ in T> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait Test</*0*/ in I, /*1*/ out O, /*2*/ P> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
internal abstract fun neOk1(/*0*/ i: (I) -> O): (O) -> I
internal abstract fun neOk2(/*0*/ i: (In<O>) -> In<I>): kotlin.Unit
internal open fun neOk3(): (In<I>) -> In<O>
internal abstract fun ok1(/*0*/ i: (O) -> I): (I) -> O
internal abstract fun ok2(/*0*/ i: (P) -> P): (P) -> P
internal open fun ok3(/*0*/ i: (In<I>) -> In<O>): (In<O>) -> In<I>
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,16 @@
trait In<in I>
trait Out<out O>
trait Inv<P>
fun <T> getT(): T = null!!
trait Test<in I : Any, out O : Any, P : Any> {
fun ok1(i: I?) : O?
fun ok2(i: In<O?>?) : Out<O?>?
fun ok3(i: Inv<in O?>) = getT<Inv<in I?>>()
fun neOk1(i: <!TYPE_VARIANCE_CONFLICT(O; out; in; O?)!>O?<!>) : <!TYPE_VARIANCE_CONFLICT(I; in; out; I?)!>I?<!>
fun neOk(i: Out<<!TYPE_VARIANCE_CONFLICT(O; out; in; Out<O?>?)!>O?<!>>?) : In<<!TYPE_VARIANCE_CONFLICT(O; out; in; In<O?>?)!>O?<!>>?
fun neOk3(i: Inv<in <!TYPE_VARIANCE_CONFLICT(I; in; out; Inv<in I?>)!>I?<!>>)
<!TYPE_VARIANCE_CONFLICT(O; out; in; Inv<in O?>?)!>fun neOk4()<!> = getT<Inv<in O?>?>()
}
@@ -0,0 +1,34 @@
package
internal fun </*0*/ T> getT(): T
internal trait In</*0*/ in I> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait Inv</*0*/ P> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait Out</*0*/ out O> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait Test</*0*/ in I : kotlin.Any, /*1*/ out O : kotlin.Any, /*2*/ P : kotlin.Any> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
internal abstract fun neOk(/*0*/ i: Out<O?>?): In<O?>?
internal abstract fun neOk1(/*0*/ i: O?): I?
internal abstract fun neOk3(/*0*/ i: Inv<in I?>): kotlin.Unit
internal open fun neOk4(): Inv<in O?>?
internal abstract fun ok1(/*0*/ i: I?): O?
internal abstract fun ok2(/*0*/ i: In<O?>?): Out<O?>?
internal open fun ok3(/*0*/ i: Inv<in O?>): Inv<in I?>
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -10304,6 +10304,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("FunctionTypes.kt")
public void testFunctionTypes() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/variance/FunctionTypes.kt");
doTest(fileName);
}
@TestMetadata("InPosition.kt")
public void testInPosition() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/variance/InPosition.kt");
@@ -10316,6 +10322,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("NullableTypes.kt")
public void testNullableTypes() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/variance/NullableTypes.kt");
doTest(fileName);
}
@TestMetadata("OutPosition.kt")
public void testOutPosition() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/variance/OutPosition.kt");