diff --git a/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt b/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt new file mode 100644 index 00000000000..78b90f2fe89 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt @@ -0,0 +1,26 @@ +trait A { + fun foo(t: T): String +} + +trait B { + fun foo(t: Int) = "B" +} + +class Z1 : A, B + +class Z2 : B, A + +fun box(): String { + val z1 = Z1() + val z2 = Z2() + + return when { + z1.foo( 0) != "B" -> "Fail #1" + (z1 : A).foo( 0) != "B" -> "Fail #2" + (z1 : B).foo( 0) != "B" -> "Fail #3" + z2.foo( 0) != "B" -> "Fail #4" + (z2 : A).foo( 0) != "B" -> "Fail #5" + (z2 : B).foo( 0) != "B" -> "Fail #6" + else -> "OK" + } +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt b/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt new file mode 100644 index 00000000000..2a946f96200 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt @@ -0,0 +1,26 @@ +trait A { + fun foo(t: T): String +} + +trait B { + fun foo(a: T) = "B" +} + +class Z1 : A, B + +class Z2 : B, A + +fun box(): String { + val z1 = Z1() + val z2 = Z2() + + return when { + z1.foo( 0) != "B" -> "Fail #1" + (z1 : A).foo( 0) != "B" -> "Fail #2" + (z1 : B).foo( 0) != "B" -> "Fail #3" + z2.foo( 0) != "B" -> "Fail #4" + (z2 : A).foo( 0) != "B" -> "Fail #5" + (z2 : B).foo( 0) != "B" -> "Fail #6" + else -> "OK" + } +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/bridges/fakeGenericCovariantOverrideWithDelegation.kt b/compiler/testData/codegen/box/bridges/fakeGenericCovariantOverrideWithDelegation.kt new file mode 100644 index 00000000000..4fa2cc018a8 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/fakeGenericCovariantOverrideWithDelegation.kt @@ -0,0 +1,28 @@ +trait A { + fun foo(t: T): String +} + +trait B { + fun foo(t: Int) = "B" +} + +class Z : B + +class Z1 : A, B by Z() + +class Z2 : B by Z(), A + +fun box(): String { + val z1 = Z1() + val z2 = Z2() + + return when { + z1.foo( 0) != "B" -> "Fail #1" + (z1 : A).foo( 0) != "B" -> "Fail #2" + (z1 : B).foo( 0) != "B" -> "Fail #3" + z2.foo( 0) != "B" -> "Fail #4" + (z2 : A).foo( 0) != "B" -> "Fail #5" + (z2 : B).foo( 0) != "B" -> "Fail #6" + else -> "OK" + } +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/bridges/twoParentsWithDifferentMethodsTwoBridges.kt b/compiler/testData/codegen/box/bridges/twoParentsWithDifferentMethodsTwoBridges.kt index ea9bf3da18c..8edaa868640 100644 --- a/compiler/testData/codegen/box/bridges/twoParentsWithDifferentMethodsTwoBridges.kt +++ b/compiler/testData/codegen/box/bridges/twoParentsWithDifferentMethodsTwoBridges.kt @@ -6,17 +6,24 @@ trait B { fun foo(t: T, u: U) = "B" } -class Z : A, B { - override fun foo(t: String, u: Int) = "Z" +class Z1 : A, B { + override fun foo(t: String, u: Int) = "Z1" } +class Z2 : B, A { + override fun foo(t: String, u: Int) = "Z2" +} fun box(): String { - val z = Z() + val z1 = Z1() + val z2 = Z2() return when { - z.foo("", 0) != "Z" -> "Fail #1" - (z : A).foo("", 0) != "Z" -> "Fail #2" - (z : B).foo("", 0) != "Z" -> "Fail #3" + z1.foo("", 0) != "Z1" -> "Fail #1" + (z1 : A).foo("", 0) != "Z1" -> "Fail #2" + (z1 : B).foo("", 0) != "Z1" -> "Fail #3" + z2.foo("", 0) != "Z2" -> "Fail #4" + (z2 : A).foo("", 0) != "Z2" -> "Fail #5" + (z2 : B).foo("", 0) != "Z2" -> "Fail #6" else -> "OK" } } diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index cd31d7f57c8..62bc8be46ac 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -374,12 +374,30 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("fakeGenericContravariantOverride1.kt") + public void testFakeGenericContravariantOverride1() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt"); + doTest(fileName); + } + + @TestMetadata("fakeGenericContravariantOverride2.kt") + public void testFakeGenericContravariantOverride2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt"); + doTest(fileName); + } + @TestMetadata("fakeGenericCovariantOverride.kt") public void testFakeGenericCovariantOverride() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericCovariantOverride.kt"); doTest(fileName); } + @TestMetadata("fakeGenericCovariantOverrideWithDelegation.kt") + public void testFakeGenericCovariantOverrideWithDelegation() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericCovariantOverrideWithDelegation.kt"); + doTest(fileName); + } + @TestMetadata("fakeOverrideInTraitWithRequiredFromTraitImpl.kt") public void testFakeOverrideInTraitWithRequiredFromTraitImpl() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideInTraitWithRequiredFromTraitImpl.kt"); diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/BridgeTestGenerated.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/BridgeTestGenerated.java index 226d2286756..cc76ced549b 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/BridgeTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/BridgeTestGenerated.java @@ -81,12 +81,30 @@ public class BridgeTestGenerated extends AbstractBridgeTest { doTest(fileName); } + @TestMetadata("fakeGenericContravariantOverride1.kt") + public void testFakeGenericContravariantOverride1() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride1.kt"); + doTest(fileName); + } + + @TestMetadata("fakeGenericContravariantOverride2.kt") + public void testFakeGenericContravariantOverride2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericContravariantOverride2.kt"); + doTest(fileName); + } + @TestMetadata("fakeGenericCovariantOverride.kt") public void testFakeGenericCovariantOverride() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericCovariantOverride.kt"); doTest(fileName); } + @TestMetadata("fakeGenericCovariantOverrideWithDelegation.kt") + public void testFakeGenericCovariantOverrideWithDelegation() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeGenericCovariantOverrideWithDelegation.kt"); + doTest(fileName); + } + @TestMetadata("fakeOverrideInTraitWithRequiredFromTraitImpl.kt") public void testFakeOverrideInTraitWithRequiredFromTraitImpl() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/fakeOverrideInTraitWithRequiredFromTraitImpl.kt");