diff --git a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt index f66a9dc8113..77d4fe295df 100644 --- a/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt +++ b/compiler/fir/jvm/src/org/jetbrains/kotlin/fir/scopes/jvm/JvmMappedScope.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.utils.addIfNotNull class JvmMappedScope( private val declaredMemberScope: FirScope, @@ -21,14 +22,23 @@ class JvmMappedScope( override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) { val visibleMethods = signatures.visibleMethodSignaturesByName[name] ?: return declaredMemberScope.processFunctionsByName(name, processor) + + val declared = mutableListOf() + declaredMemberScope.processFunctionsByName(name) { symbol -> + declared.addIfNotNull(symbol as FirNamedFunctionSymbol) + processor(symbol) + } + + val declaredSignatures by lazy { + declared.mapTo(mutableSetOf()) { it.fir.computeJvmDescriptorReplacingKotlinToJava() } + } + javaMappedClassUseSiteScope.processFunctionsByName(name) { symbol -> val jvmSignature = symbol.fir.computeJvmDescriptorReplacingKotlinToJava() - if (jvmSignature in visibleMethods) { + if (jvmSignature in visibleMethods && jvmSignature !in declaredSignatures) { processor(symbol) } } - - declaredMemberScope.processFunctionsByName(name, processor) } override fun processDirectOverriddenFunctionsWithBaseScope( diff --git a/compiler/testData/codegen/box/reflection/methodsFromAny/builtinFunctionsToString.kt b/compiler/testData/codegen/box/reflection/methodsFromAny/builtinFunctionsToString.kt index 5cc381840d4..5c7bc1de260 100644 --- a/compiler/testData/codegen/box/reflection/methodsFromAny/builtinFunctionsToString.kt +++ b/compiler/testData/codegen/box/reflection/methodsFromAny/builtinFunctionsToString.kt @@ -1,6 +1,5 @@ // SKIP_JDK6 // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR // FULL_JDK // WITH_REFLECT diff --git a/compiler/testData/diagnostics/tests/targetedBuiltIns/getOrDefault.fir.kt b/compiler/testData/diagnostics/tests/targetedBuiltIns/getOrDefault.fir.kt index 66aec7f85f4..b4b0ecc3eae 100644 --- a/compiler/testData/diagnostics/tests/targetedBuiltIns/getOrDefault.fir.kt +++ b/compiler/testData/diagnostics/tests/targetedBuiltIns/getOrDefault.fir.kt @@ -4,14 +4,14 @@ abstract class A : Map fun foo(x: Map, a: A, b: java.util.HashMap) { x.getOrDefault(1, "") - x.getOrDefault("", "") - x.getOrDefault(1, 2) - x.getOrDefault("", 2) + x.getOrDefault("", "") + x.getOrDefault(1, 2) + x.getOrDefault("", 2) a.getOrDefault(1, "") - a.getOrDefault("", "") - a.getOrDefault(1, 2) - a.getOrDefault("", 2) + a.getOrDefault("", "") + a.getOrDefault(1, 2) + a.getOrDefault("", 2) b.getOrDefault(1, "") b.getOrDefault("", "")