Generate bridges in light classes

This commit is contained in:
Andrey Breslav
2014-06-16 18:33:50 +04:00
parent 93b688d19b
commit b49a203a67
6 changed files with 59 additions and 4 deletions
@@ -69,7 +69,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen<JetClassOrObject> {
}
}
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;
@@ -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(
@@ -0,0 +1,11 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
open class B<T> {
open fun foo(t: T) {}
}
class <!CONFLICTING_JVM_DECLARATIONS!>C<!> : B<String>() {
override fun foo(t: String) {}
<!CONFLICTING_JVM_DECLARATIONS!>fun foo(o: Any)<!> {}
}
@@ -0,0 +1,9 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
trait B<T> {
fun foo(t: T) {}
}
class <!CONFLICTING_JVM_DECLARATIONS!>C<!> : B<String> {
<!CONFLICTING_JVM_DECLARATIONS!>fun foo(o: Any)<!> {}
}
@@ -0,0 +1,11 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
trait B<T> {
fun foo(t: T) {}
}
class <!CONFLICTING_JVM_DECLARATIONS!>C<!> : B<String> {
override fun foo(t: String) {}
<!CONFLICTING_JVM_DECLARATIONS!>fun foo(o: Any)<!> {}
}
@@ -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);