diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index df8808acb96..a826e437f40 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -446,7 +446,7 @@ public class JetTypeMapper extends BindingTraceAware { ) { DeclarationDescriptor functionParent = functionDescriptor.getOriginal().getContainingDeclaration(); - functionDescriptor = unwrapFakeOverride(functionDescriptor); + functionDescriptor = unwrapFakeOverride(functionDescriptor.getOriginal()); JvmMethodSignature descriptor = mapSignature(functionDescriptor.getOriginal(), true, kind); Type owner; diff --git a/compiler/testData/codegen/box/fakeOverride/diamondFunction.kt b/compiler/testData/codegen/box/fakeOverride/diamondFunction.kt new file mode 100644 index 00000000000..7c150aaaa7b --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/diamondFunction.kt @@ -0,0 +1,31 @@ +trait T { + fun foo(): Unit +} + +open class A : T { + override fun foo() {} +} + +trait B : T + +class C : A(), B +class D : B, A() +class E : A(), B, T +class F : B, A(), T +class G : A(), T, B +class H : B, T, A() +class I : T, A(), B +class J : T, B, A() + +fun box(): String { + C().foo() + D().foo() + E().foo() + F().foo() + G().foo() + H().foo() + I().foo() + J().foo() + + return "OK" +} diff --git a/compiler/testData/codegen/box/fakeOverride/function.kt b/compiler/testData/codegen/box/fakeOverride/function.kt new file mode 100644 index 00000000000..1158cddb0c9 --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/function.kt @@ -0,0 +1,35 @@ +trait T { + fun foo(): Unit +} + +open class A : T { + override fun foo(): Unit {} +} + +class B : A(), T +class C : T, A() + +trait U : T +class D : U, A() +class E : A(), U +class F : U, T, A() +class G : T, U, A() +class H : U, A(), T +class I : T, A(), U +class J : A(), U, T +class K : A(), T, U + +fun box(): String { + B().foo() + C().foo() + D().foo() + E().foo() + F().foo() + G().foo() + H().foo() + I().foo() + J().foo() + K().foo() + + return "OK" +} diff --git a/compiler/testData/codegen/box/fakeOverride/propertyGetter.kt b/compiler/testData/codegen/box/fakeOverride/propertyGetter.kt new file mode 100644 index 00000000000..0c86e6eacab --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/propertyGetter.kt @@ -0,0 +1,37 @@ +trait T { + val foo: String +} + +open class A : T { + override val foo: String = "" +} + +class B : A(), T +class C : T, A() + +trait U : T + +class D : U, A() +class E : A(), U +class F : U, T, A() +class G : T, U, A() +class H : U, A(), T +class I : T, A(), U +class J : A(), U, T +class K : A(), T, U + +fun box(): String { + B().foo + C().foo + + D().foo + E().foo + F().foo + G().foo + H().foo + I().foo + J().foo + K().foo + + return "OK" +} diff --git a/compiler/testData/codegen/box/fakeOverride/propertySetter.kt b/compiler/testData/codegen/box/fakeOverride/propertySetter.kt new file mode 100644 index 00000000000..2103491b1ad --- /dev/null +++ b/compiler/testData/codegen/box/fakeOverride/propertySetter.kt @@ -0,0 +1,18 @@ +trait T { + var result: String +} + +open class A : T { + override var result: String + get() = "" + set(value) {} +} + +class B : A(), T +class C : T, A() + +fun box(): String { + B().result = "" + C().result = "" + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 44bfd68e6a7..6dec0ea06a6 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.codegen.generated.AbstractBlackBoxCodegenTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/codegen/box") -@InnerTestClasses({BlackBoxCodegenTestGenerated.Arrays.class, BlackBoxCodegenTestGenerated.Bridges.class, BlackBoxCodegenTestGenerated.BuiltinStubMethods.class, BlackBoxCodegenTestGenerated.CallableReference.class, BlackBoxCodegenTestGenerated.Casts.class, BlackBoxCodegenTestGenerated.Classes.class, BlackBoxCodegenTestGenerated.Closures.class, BlackBoxCodegenTestGenerated.Constants.class, BlackBoxCodegenTestGenerated.ControlStructures.class, BlackBoxCodegenTestGenerated.DefaultArguments.class, BlackBoxCodegenTestGenerated.DelegatedProperty.class, BlackBoxCodegenTestGenerated.Elvis.class, BlackBoxCodegenTestGenerated.Enum.class, BlackBoxCodegenTestGenerated.ExclExcl.class, BlackBoxCodegenTestGenerated.ExtensionFunctions.class, BlackBoxCodegenTestGenerated.ExtensionProperties.class, BlackBoxCodegenTestGenerated.FieldRename.class, BlackBoxCodegenTestGenerated.Finally.class, BlackBoxCodegenTestGenerated.Functions.class, BlackBoxCodegenTestGenerated.InnerNested.class, BlackBoxCodegenTestGenerated.Instructions.class, BlackBoxCodegenTestGenerated.Intrinsics.class, BlackBoxCodegenTestGenerated.Labels.class, BlackBoxCodegenTestGenerated.LocalClasses.class, BlackBoxCodegenTestGenerated.MultiDecl.class, BlackBoxCodegenTestGenerated.Namespace.class, BlackBoxCodegenTestGenerated.Objects.class, BlackBoxCodegenTestGenerated.OperatorConventions.class, BlackBoxCodegenTestGenerated.PrimitiveTypes.class, BlackBoxCodegenTestGenerated.Properties.class, BlackBoxCodegenTestGenerated.Reflection.class, BlackBoxCodegenTestGenerated.SafeCall.class, BlackBoxCodegenTestGenerated.SamConstructors.class, BlackBoxCodegenTestGenerated.Strings.class, BlackBoxCodegenTestGenerated.Super.class, BlackBoxCodegenTestGenerated.ToArray.class, BlackBoxCodegenTestGenerated.Traits.class, BlackBoxCodegenTestGenerated.TypeInfo.class, BlackBoxCodegenTestGenerated.TypeMapping.class, BlackBoxCodegenTestGenerated.Unit.class, BlackBoxCodegenTestGenerated.Vararg.class, BlackBoxCodegenTestGenerated.When.class}) +@InnerTestClasses({BlackBoxCodegenTestGenerated.Arrays.class, BlackBoxCodegenTestGenerated.Bridges.class, BlackBoxCodegenTestGenerated.BuiltinStubMethods.class, BlackBoxCodegenTestGenerated.CallableReference.class, BlackBoxCodegenTestGenerated.Casts.class, BlackBoxCodegenTestGenerated.Classes.class, BlackBoxCodegenTestGenerated.Closures.class, BlackBoxCodegenTestGenerated.Constants.class, BlackBoxCodegenTestGenerated.ControlStructures.class, BlackBoxCodegenTestGenerated.DefaultArguments.class, BlackBoxCodegenTestGenerated.DelegatedProperty.class, BlackBoxCodegenTestGenerated.Elvis.class, BlackBoxCodegenTestGenerated.Enum.class, BlackBoxCodegenTestGenerated.ExclExcl.class, BlackBoxCodegenTestGenerated.ExtensionFunctions.class, BlackBoxCodegenTestGenerated.ExtensionProperties.class, BlackBoxCodegenTestGenerated.FakeOverride.class, BlackBoxCodegenTestGenerated.FieldRename.class, BlackBoxCodegenTestGenerated.Finally.class, BlackBoxCodegenTestGenerated.Functions.class, BlackBoxCodegenTestGenerated.InnerNested.class, BlackBoxCodegenTestGenerated.Instructions.class, BlackBoxCodegenTestGenerated.Intrinsics.class, BlackBoxCodegenTestGenerated.Labels.class, BlackBoxCodegenTestGenerated.LocalClasses.class, BlackBoxCodegenTestGenerated.MultiDecl.class, BlackBoxCodegenTestGenerated.Namespace.class, BlackBoxCodegenTestGenerated.Objects.class, BlackBoxCodegenTestGenerated.OperatorConventions.class, BlackBoxCodegenTestGenerated.PrimitiveTypes.class, BlackBoxCodegenTestGenerated.Properties.class, BlackBoxCodegenTestGenerated.Reflection.class, BlackBoxCodegenTestGenerated.SafeCall.class, BlackBoxCodegenTestGenerated.SamConstructors.class, BlackBoxCodegenTestGenerated.Strings.class, BlackBoxCodegenTestGenerated.Super.class, BlackBoxCodegenTestGenerated.ToArray.class, BlackBoxCodegenTestGenerated.Traits.class, BlackBoxCodegenTestGenerated.TypeInfo.class, BlackBoxCodegenTestGenerated.TypeMapping.class, BlackBoxCodegenTestGenerated.Unit.class, BlackBoxCodegenTestGenerated.Vararg.class, BlackBoxCodegenTestGenerated.When.class}) public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInBox() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/codegen/box"), Pattern.compile("^(.+)\\.kt$"), true); @@ -2274,6 +2274,34 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { } + @TestMetadata("compiler/testData/codegen/box/fakeOverride") + public static class FakeOverride extends AbstractBlackBoxCodegenTest { + public void testAllFilesPresentInFakeOverride() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/codegen/box/fakeOverride"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("diamondFunction.kt") + public void testDiamondFunction() throws Exception { + doTest("compiler/testData/codegen/box/fakeOverride/diamondFunction.kt"); + } + + @TestMetadata("function.kt") + public void testFunction() throws Exception { + doTest("compiler/testData/codegen/box/fakeOverride/function.kt"); + } + + @TestMetadata("propertyGetter.kt") + public void testPropertyGetter() throws Exception { + doTest("compiler/testData/codegen/box/fakeOverride/propertyGetter.kt"); + } + + @TestMetadata("propertySetter.kt") + public void testPropertySetter() throws Exception { + doTest("compiler/testData/codegen/box/fakeOverride/propertySetter.kt"); + } + + } + @TestMetadata("compiler/testData/codegen/box/fieldRename") public static class FieldRename extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInFieldRename() throws Exception { @@ -4936,6 +4964,7 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { suite.addTestSuite(ExclExcl.class); suite.addTestSuite(ExtensionFunctions.class); suite.addTestSuite(ExtensionProperties.class); + suite.addTestSuite(FakeOverride.class); suite.addTestSuite(FieldRename.class); suite.addTestSuite(Finally.class); suite.addTest(Functions.innerSuite());