diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt index d8b87d92d94..d21185e1846 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteMemberScope.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol @@ -23,6 +24,10 @@ class FirClassUseSiteMemberScope( val seen = mutableSetOf>() declaredMemberScope.processPropertiesByName(name) l@{ if (it.isStatic) return@l + if (it is FirPropertySymbol) { + val directOverridden = computeDirectOverridden(it.fir) + this@FirClassUseSiteMemberScope.directOverriddenProperties[it] = directOverridden + } seen += it processor(it) } @@ -31,9 +36,18 @@ class FirClassUseSiteMemberScope( val overriddenBy = it.getOverridden(seen) if (overriddenBy == null) { processor(it) - } else if (overriddenBy is FirPropertySymbol && it is FirPropertySymbol) { - directOverriddenProperties.getOrPut(overriddenBy) { mutableListOf() }.add(it) } } } + + private fun computeDirectOverridden(property: FirProperty): MutableList { + val result = mutableListOf() + superTypesScope.processPropertiesByName(property.name) l@{ superSymbol -> + if (superSymbol !is FirPropertySymbol) return@l + if (overrideChecker.isOverriddenProperty(property, superSymbol.fir)) { + result.add(superSymbol) + } + } + return result + } } diff --git a/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.fir.kt b/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.fir.kt deleted file mode 100644 index 56a79f9ed22..00000000000 --- a/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.fir.kt +++ /dev/null @@ -1,11 +0,0 @@ -enum class E { - ENTRY; - - override val name: String = "lol" - override val ordinal: Int = 0 - - override fun compareTo(other: E) = -1 - - override fun equals(other: Any?) = true - override fun hashCode() = -1 -} diff --git a/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.kt b/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.kt index aaf621d6bb2..a62c19554dd 100644 --- a/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.kt +++ b/compiler/testData/diagnostics/tests/enum/overrideFinalEnumMethods.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class E { ENTRY; diff --git a/compiler/testData/diagnostics/tests/j+k/properties/isName.fir.kt b/compiler/testData/diagnostics/tests/j+k/properties/isName.fir.kt deleted file mode 100644 index 3e86adc7ca0..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/properties/isName.fir.kt +++ /dev/null @@ -1,27 +0,0 @@ -// FILE: A.java - -public class A extends B { - public int isFoo() { return 0; } - public void setFoo(int x) {} -} - -// FILE: F.java - -public class F extends B { - public final int isFoo() { return 0; } - public final void setFoo(int x) {} -} - -// FILE: main.kt - -open class B { - open var isFoo: Int = 1 -} - -class C1 : A() { - override var isFoo: Int = 2 -} - -class C2 : F() { - override var isFoo: Int = 3 -} diff --git a/compiler/testData/diagnostics/tests/j+k/properties/isName.kt b/compiler/testData/diagnostics/tests/j+k/properties/isName.kt index e990adaad05..70871528759 100644 --- a/compiler/testData/diagnostics/tests/j+k/properties/isName.kt +++ b/compiler/testData/diagnostics/tests/j+k/properties/isName.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: A.java public class A extends B { diff --git a/compiler/testData/diagnostics/tests/j+k/properties/val.fir.kt b/compiler/testData/diagnostics/tests/j+k/properties/val.fir.kt deleted file mode 100644 index 63aa0476c5d..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/properties/val.fir.kt +++ /dev/null @@ -1,25 +0,0 @@ -// FILE: A.java - -public class A extends B { - public int getFoo() { return 0; } -} - -// FILE: F.java - -public class F extends B { - public final int getFoo() { return 0; } -} - -// FILE: main.kt - -open class B { - open val foo: Int = 1 -} - -class C1 : A() { - override val foo: Int = 2 -} - -class C2 : F() { - override val foo: Int = 3 -} diff --git a/compiler/testData/diagnostics/tests/j+k/properties/val.kt b/compiler/testData/diagnostics/tests/j+k/properties/val.kt index 16d31136602..1e422bef0bb 100644 --- a/compiler/testData/diagnostics/tests/j+k/properties/val.kt +++ b/compiler/testData/diagnostics/tests/j+k/properties/val.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: A.java public class A extends B { diff --git a/compiler/testData/diagnostics/tests/j+k/properties/var.fir.kt b/compiler/testData/diagnostics/tests/j+k/properties/var.fir.kt deleted file mode 100644 index 41e5c92ff12..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/properties/var.fir.kt +++ /dev/null @@ -1,42 +0,0 @@ -// FILE: A.java - -public class A extends B { - public int getFoo() { return 0; } - public void setFoo(int x) {} -} - -// FILE: F.java - -public class F extends B { - public final int getFoo() { return 0; } - public final void setFoo(int x) {} -} - -// FILE: ConflictingModality.java - -public class ConflictingModality extends B { - public final int getFoo() { return 0; } - public abstract void setFoo(int x) {} -} - -// FILE: ConflictingVisibility.java - -public class ConflictingVisibility extends B { - public int getFoo() { return 0; } - protected void setFoo(int x) {} -} - -// FILE: main.kt - -open class B { - // check that final is not overridden - open protected var foo: Int = 1 -} - -class C1 : A() { - override var foo: Int = 2 -} - -class C2 : F() { - override var foo: Int = 3 -} diff --git a/compiler/testData/diagnostics/tests/j+k/properties/var.kt b/compiler/testData/diagnostics/tests/j+k/properties/var.kt index df5441b39b8..e34a2ce1ed9 100644 --- a/compiler/testData/diagnostics/tests/j+k/properties/var.kt +++ b/compiler/testData/diagnostics/tests/j+k/properties/var.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: A.java public class A extends B {