diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java index 6e96afdb699..81536a66dfc 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java @@ -69,7 +69,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen { } } - if (state.getClassBuilderMode() == ClassBuilderMode.FULL && !DescriptorUtils.isTrait(descriptor)) { + if (!DescriptorUtils.isTrait(descriptor)) { for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { if (memberDescriptor instanceof FunctionDescriptor) { FunctionDescriptor member = (FunctionDescriptor) memberDescriptor; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 131c9d65fda..c2dbc72820a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -149,6 +149,8 @@ public class FunctionCodegen extends ParentCodegenAware { generateJetValueParameterAnnotations(mv, functionDescriptor, jvmSignature); + generateBridges(functionDescriptor); + if (state.getClassBuilderMode() == ClassBuilderMode.LIGHT_CLASSES || isAbstractMethod(functionDescriptor, methodContextKind)) { generateLocalVariableTable( mv, @@ -167,8 +169,6 @@ public class FunctionCodegen extends ParentCodegenAware { endVisit(mv, null, origin.getElement()); methodContext.recordSyntheticAccessorIfNeeded(functionDescriptor, bindingContext); - - generateBridges(functionDescriptor); } private void generateParameterAnnotations( diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/class.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/class.kt new file mode 100644 index 00000000000..60324a9398b --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/class.kt @@ -0,0 +1,11 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +open class B { + open fun foo(t: T) {} +} + +class C : B() { + override fun foo(t: String) {} + + fun foo(o: Any) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/fakeOverrideTrait.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/fakeOverrideTrait.kt new file mode 100644 index 00000000000..9edaa67505c --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/fakeOverrideTrait.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +trait B { + fun foo(t: T) {} +} + +class C : B { + fun foo(o: Any) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/trait.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/trait.kt new file mode 100644 index 00000000000..347a8b77304 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/trait.kt @@ -0,0 +1,11 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +trait B { + fun foo(t: T) {} +} + +class C : B { + override fun foo(t: String) {} + + fun foo(o: Any) {} +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index a60fcfd51ad..39f2b3e93ce 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2546,7 +2546,7 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { } @TestMetadata("compiler/testData/diagnostics/tests/duplicateJvmSignature") - @InnerTestClasses({DuplicateJvmSignature.AccidentalOverrides.class, DuplicateJvmSignature.Erasure.class, DuplicateJvmSignature.FunctionAndProperty.class, DuplicateJvmSignature.SpecialNames.class, DuplicateJvmSignature.TraitImpl.class}) + @InnerTestClasses({DuplicateJvmSignature.AccidentalOverrides.class, DuplicateJvmSignature.Bridges.class, DuplicateJvmSignature.Erasure.class, DuplicateJvmSignature.FunctionAndProperty.class, DuplicateJvmSignature.SpecialNames.class, DuplicateJvmSignature.TraitImpl.class}) public static class DuplicateJvmSignature extends AbstractJetDiagnosticsTest { public void testAllFilesPresentInDuplicateJvmSignature() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/tests/duplicateJvmSignature"), Pattern.compile("^(.+)\\.kt$"), true); @@ -2635,6 +2635,29 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { } + @TestMetadata("compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges") + public static class Bridges extends AbstractJetDiagnosticsTest { + public void testAllFilesPresentInBridges() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("class.kt") + public void testClass() throws Exception { + doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/class.kt"); + } + + @TestMetadata("fakeOverrideTrait.kt") + public void testFakeOverrideTrait() throws Exception { + doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/fakeOverrideTrait.kt"); + } + + @TestMetadata("trait.kt") + public void testTrait() throws Exception { + doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/bridges/trait.kt"); + } + + } + @TestMetadata("compiler/testData/diagnostics/tests/duplicateJvmSignature/erasure") public static class Erasure extends AbstractJetDiagnosticsTest { public void testAllFilesPresentInErasure() throws Exception { @@ -2856,6 +2879,7 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { TestSuite suite = new TestSuite("DuplicateJvmSignature"); suite.addTestSuite(DuplicateJvmSignature.class); suite.addTestSuite(AccidentalOverrides.class); + suite.addTestSuite(Bridges.class); suite.addTestSuite(Erasure.class); suite.addTestSuite(FunctionAndProperty.class); suite.addTestSuite(SpecialNames.class);