Fix synthetic method generation for extension properties

If several annotated extension properties with the same name were declared in
one class, JVM issued a ClassFormatError, since we generated a synthetic method
for each of them with the same name and signature. Make the signature of this
synthetic method depend on a receiver parameter, if a property has one
This commit is contained in:
Alexander Udalov
2013-10-09 23:09:17 +04:00
parent 806d264771
commit 2445d04338
11 changed files with 114 additions and 4 deletions
@@ -266,7 +266,7 @@ public class PropertyGenTest extends CodegenTestCase {
}
private static final String TEST_SYNTHETIC_METHOD_NAME =
JvmAbi.getSyntheticMethodSignatureForAnnotatedProperty(Name.identifier("property")).getName();
JvmAbi.getSyntheticMethodSignatureForAnnotatedProperty(Name.identifier("property"), null).getName();
public void testAnnotatedClassPropertyNoField() {
loadFile("properties/annotatedClassPropertyNoField.kt");
@@ -3895,6 +3895,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest("compiler/testData/codegen/box/properties/traitExtendsClass.kt");
}
@TestMetadata("twoAnnotatedExtensionPropertiesWithoutBackingFields.kt")
public void testTwoAnnotatedExtensionPropertiesWithoutBackingFields() throws Exception {
doTest("compiler/testData/codegen/box/properties/twoAnnotatedExtensionPropertiesWithoutBackingFields.kt");
}
}
@TestMetadata("compiler/testData/codegen/box/reflection")
@@ -70,6 +70,11 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT
doTestWithAccessors("compiler/testData/loadKotlin/annotations/classMembers/EnumArgument.kt");
}
@TestMetadata("ExtensionPropertiesWithSameNameNoField.kt")
public void testExtensionPropertiesWithSameNameNoField() throws Exception {
doTestWithAccessors("compiler/testData/loadKotlin/annotations/classMembers/ExtensionPropertiesWithSameNameNoField.kt");
}
@TestMetadata("Function.kt")
public void testFunction() throws Exception {
doTestWithAccessors("compiler/testData/loadKotlin/annotations/classMembers/Function.kt");
@@ -171,6 +176,11 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT
doTestWithAccessors("compiler/testData/loadKotlin/annotations/packageMembers/EnumArgument.kt");
}
@TestMetadata("ExtensionPropertiesWithSameNameNoField.kt")
public void testExtensionPropertiesWithSameNameNoField() throws Exception {
doTestWithAccessors("compiler/testData/loadKotlin/annotations/packageMembers/ExtensionPropertiesWithSameNameNoField.kt");
}
@TestMetadata("Function.kt")
public void testFunction() throws Exception {
doTestWithAccessors("compiler/testData/loadKotlin/annotations/packageMembers/Function.kt");
@@ -72,6 +72,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso
doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/annotations/classMembers/EnumArgument.kt");
}
@TestMetadata("ExtensionPropertiesWithSameNameNoField.kt")
public void testExtensionPropertiesWithSameNameNoField() throws Exception {
doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/annotations/classMembers/ExtensionPropertiesWithSameNameNoField.kt");
}
@TestMetadata("Function.kt")
public void testFunction() throws Exception {
doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/annotations/classMembers/Function.kt");
@@ -173,6 +178,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso
doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/annotations/packageMembers/EnumArgument.kt");
}
@TestMetadata("ExtensionPropertiesWithSameNameNoField.kt")
public void testExtensionPropertiesWithSameNameNoField() throws Exception {
doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/annotations/packageMembers/ExtensionPropertiesWithSameNameNoField.kt");
}
@TestMetadata("Function.kt")
public void testFunction() throws Exception {
doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/annotations/packageMembers/Function.kt");