Fix KProperty.javaField for fake overrides

#KT-8131 Fixed
This commit is contained in:
Alexander Udalov
2016-02-20 12:45:29 +03:00
parent 534a3a11d6
commit 1c0bbcd72b
8 changed files with 106 additions and 43 deletions
@@ -0,0 +1,22 @@
// KT-8131 Cannot find backing field in ancestor class via reflection
import kotlin.reflect.*
import kotlin.reflect.jvm.*
open class TestBase {
var id = 0L
}
class TestChild : TestBase()
fun box(): String {
val property = TestChild::class.memberProperties.first { it.name == "id" } as KMutableProperty<*>
if (property.javaField == null)
return "Fail: no field"
if (property.javaGetter == null)
return "Fail: no getter"
if (property.javaSetter == null)
return "Fail: no setter"
return "OK"
}
@@ -0,0 +1,15 @@
import kotlin.reflect.*
import kotlin.reflect.jvm.*
open class TestBase {
fun id() = 0L
}
class TestChild : TestBase()
fun box(): String {
if (TestChild::class.memberFunctions.first { it.name == "id" }.javaMethod == null)
return "No method for TestChild.id()"
return "OK"
}
@@ -3987,6 +3987,27 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib(fileName);
}
@TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/fakeOverrides")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class FakeOverrides extends AbstractBlackBoxCodegenTest {
public void testAllFilesPresentInFakeOverrides() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/reflection/mapping/fakeOverrides"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("javaFieldGetterSetter.kt")
public void testJavaFieldGetterSetter() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/fakeOverrides/javaFieldGetterSetter.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("javaMethod.kt")
public void testJavaMethod() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/fakeOverrides/javaMethod.kt");
doTestWithStdlib(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/jvmStatic")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)