diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt index 8de27c0196c..770559a0a85 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt @@ -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") } } diff --git a/compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.kt b/compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.kt new file mode 100644 index 00000000000..f266efbce30 --- /dev/null +++ b/compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.kt @@ -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 +} diff --git a/compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.txt b/compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.txt new file mode 100644 index 00000000000..b496d16446c --- /dev/null +++ b/compiler/fir/resolve/testData/resolveWithStdlib/j+k/fieldOverride.txt @@ -0,0 +1,4 @@ +FILE: main.kt + public final fun main(b: R|B|): R|kotlin/Unit| { + R|/b|.R|/B.x|.R|kotlin/Int.plus|(Int(1)) + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java index 68ceb41fb2f..48ff2915525 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java @@ -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"); diff --git a/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.fir.kt b/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.fir.kt deleted file mode 100644 index 54d5f50f599..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.fir.kt +++ /dev/null @@ -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().size -} diff --git a/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.kt b/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.kt index d337ec5e367..2d74c8193ca 100644 --- a/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.kt +++ b/compiler/testData/diagnostics/tests/j+k/fieldOverridesField.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: A.java public class A { diff --git a/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.fir.kt b/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.fir.kt deleted file mode 100644 index d3ba6713d79..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.fir.kt +++ /dev/null @@ -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().size.checkType { _() } -} diff --git a/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.kt b/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.kt index c1f5ea4c4d5..cfe585f2278 100644 --- a/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.kt +++ b/compiler/testData/diagnostics/tests/j+k/fieldOverridesFieldOfDifferentType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !CHECK_TYPE // FILE: A.java diff --git a/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt b/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt index 6f73209dad3..54e2eb9adfe 100644 --- a/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt +++ b/compiler/testData/loadJava/compiledJava/PackageLocalVisibility.fir.txt @@ -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!| - public/*package*/ open field accessibleContext: R|ft!| - public constructor(): R|test/JFrame| }