FIR: Allow a field override another field with the same name

This commit is contained in:
Denis Zharkov
2020-03-16 15:37:02 +03:00
parent 7203499b7a
commit e1312a752a
9 changed files with 27 additions and 39 deletions
@@ -37,7 +37,7 @@ abstract class AbstractFirOverrideScope(val session: FirSession, protected val o
}
is FirConstructor -> false
is FirProperty -> baseDeclaration is FirProperty && isOverriddenProperty(overrideCandidate, baseDeclaration)
is FirField -> false
is FirField -> baseDeclaration is FirField
else -> error("Unknown fir callable type: $overrideCandidate, $baseDeclaration")
}
}
@@ -0,0 +1,15 @@
// FILE: A.java
public class A {
public String x = "";
}
// FILE: B.java
public class B extends A {
public int x = 1;
}
// FILE: main.kt
fun main(b: B) {
b.x + 1
}
@@ -0,0 +1,4 @@
FILE: main.kt
public final fun main(b: R|B|): R|kotlin/Unit| {
R|<local>/b|.R|/B.x|.R|kotlin/Int.plus|(Int(1))
}
@@ -585,6 +585,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic
runTest("compiler/fir/resolve/testData/resolveWithStdlib/j+k/FieldAndGetter.kt");
}
@TestMetadata("fieldOverride.kt")
public void testFieldOverride() throws Exception {
runTest("compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.kt");
}
@TestMetadata("FieldSubstitution.kt")
public void testFieldSubstitution() throws Exception {
runTest("compiler/fir/resolve/testData/resolveWithStdlib/j+k/FieldSubstitution.kt");
@@ -1,17 +0,0 @@
// FILE: A.java
public class A {
public int size = 1;
}
// FILE: B.java
public class B implements A {
public int size = 1;
}
// FILE: main.kt
fun foo() {
B().<!AMBIGUITY!>size<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
public class A {
@@ -1,19 +0,0 @@
// !CHECK_TYPE
// FILE: A.java
public class A {
public int size = 1;
}
// FILE: B.java
public class B extends A {
public String size = 1;
}
// FILE: main.kt
fun foo() {
B().<!AMBIGUITY!>size<!>.<!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !CHECK_TYPE
// FILE: A.java
@@ -7,8 +7,6 @@ public open class Frame : R|kotlin/Any| {
public open class JFrame : R|awt/Frame| {
protected/*protected and package*/ open field accessibleContext: R|ft<kotlin/String, kotlin/String?>!|
public/*package*/ open field accessibleContext: R|ft<kotlin/String, kotlin/String?>!|
public constructor(): R|test/JFrame|
}