Refactor property calls in reflection, fix some corner cases

- compute a FunctionCaller instance for getter and setter so that "call" only
  delegates to that FunctionCaller's "call", in the same way it's done in
  KFunctionImpl
- use RuntimeTypeMapper.mapPropertySignature to get the exact origin and
  signature of a property and its accessors. This makes unwrapFakeOverride call
  unnecessary and also fixes some cases like private Java fields
- temporarily drop custom range checks, will be re-added soon
This commit is contained in:
Alexander Udalov
2015-08-04 05:10:27 +03:00
parent a91729e041
commit 9c522b4d49
18 changed files with 249 additions and 205 deletions
@@ -303,6 +303,18 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege
doTestWithJava(fileName);
}
@TestMetadata("mutatePrivateJavaInstanceField")
public void testMutatePrivateJavaInstanceField() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/reflection/mutatePrivateJavaInstanceField/");
doTestWithJava(fileName);
}
@TestMetadata("mutatePrivateJavaStaticField")
public void testMutatePrivateJavaStaticField() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/reflection/mutatePrivateJavaStaticField/");
doTestWithJava(fileName);
}
@TestMetadata("noConflictOnKotlinGetterAndJavaField")
public void testNoConflictOnKotlinGetterAndJavaField() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/reflection/noConflictOnKotlinGetterAndJavaField/");
@@ -3537,6 +3537,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib(fileName);
}
@TestMetadata("privatePlatformStaticVarInObject.kt")
public void testPrivatePlatformStaticVarInObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/properties/privatePlatformStaticVarInObject.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("privatePropertyCallIsAccessibleOnAccessors.kt")
public void testPrivatePropertyCallIsAccessibleOnAccessors() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/properties/privatePropertyCallIsAccessibleOnAccessors.kt");