Generate bridges in light classes
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user