Unwrap fake override of original

This fixes a couple of verify errors related to the order of supertypes in the
class declaration
This commit is contained in:
Alexander Udalov
2013-12-09 15:46:19 +04:00
parent 68961004a5
commit ee554d2e2f
6 changed files with 152 additions and 2 deletions
@@ -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;
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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());