[FIR-TEST] Add test with problems in mapping getter name to property name

This commit is contained in:
Dmitriy Novozhilov
2019-11-14 14:29:24 +03:00
parent 6f9e576502
commit 3a7251a90b
3 changed files with 101 additions and 0 deletions
@@ -0,0 +1,70 @@
/*
* There is some complex rules for conversions from java method `get...` to property
* (see `JavaSyntheticPropertiesScope`), but they are not supported in FIR
* It's possible to support them in `JavaClassUseSiteMemberScope`
* But problem is that we also have `FirSyntheticPropertiesScope` that creates
* synthetic properties for everithig
*
* Because of that such code is also resolves incorrect:
*
* class A {
* fun getX(): Int = 1
* }
*
* fun test(a: A) {
* a.x // resolves to `getX`
* }
*/
// FILE: A.java
public class A {
public String getVMParameters() {
return null;
}
}
// FILE: B.java
public class B {
public Integer getVmParameters() {
return null;
}
}
// FILE: C.java
public class C {
public String getVMParameters() {
return null;
}
public Integer getVmParameters() {
return null;
}
}
// FILE: main.kt
fun test_1(x: A) {
val str1 = x.<!UNRESOLVED_REFERENCE!>vmParameters<!> // OK
val str2 = x.vMParameters // should be error
}
fun test_2(x: B) {
val int = x.vmParameters // OK
val error = x.<!UNRESOLVED_REFERENCE!>vMParameters<!> // should be error
}
fun test_3(x: C) {
val error = x.vmParameters // should be error
val int = x.vMParameters // should be error
}
class Foo {
fun getX(): Int = 1
}
fun test_4(foo: Foo) {
foo.x // should be error
}
@@ -0,0 +1,26 @@
FILE: main.kt
public final fun test_1(x: R|A|): R|kotlin/Unit| {
lval str1: <ERROR TYPE REF: Unresolved name: vmParameters> = R|<local>/x|.<Unresolved name: vmParameters>#
lval str2: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/x|.R|/A.vMParameters|
}
public final fun test_2(x: R|B|): R|kotlin/Unit| {
lval int: R|ft<kotlin/Int, kotlin/Int?>!| = R|<local>/x|.R|/B.vmParameters|
lval error: <ERROR TYPE REF: Unresolved name: vMParameters> = R|<local>/x|.<Unresolved name: vMParameters>#
}
public final fun test_3(x: R|C|): R|kotlin/Unit| {
lval error: R|ft<kotlin/Int, kotlin/Int?>!| = R|<local>/x|.R|/C.vmParameters|
lval int: R|ft<kotlin/String, kotlin/String?>!| = R|<local>/x|.R|/C.vMParameters|
}
public final class Foo : R|kotlin/Any| {
public constructor(): R|Foo| {
super<R|kotlin/Any|>()
}
public final fun getX(): R|kotlin/Int| {
^getX Int(1)
}
}
public final fun test_4(foo: R|Foo|): R|kotlin/Unit| {
R|<local>/foo|.R|/Foo.x|
}
@@ -778,6 +778,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/fir/resolve/testData/resolve/problems"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("javaAccessorConversion.kt")
public void testJavaAccessorConversion() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/problems/javaAccessorConversion.kt");
}
@TestMetadata("nestedClassContructor.kt")
public void testNestedClassContructor() throws Exception {
runTest("compiler/fir/resolve/testData/resolve/problems/nestedClassContructor.kt");