diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index d9d49dd2ac0..76f01c4c10a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -222,9 +222,9 @@ class JavaClassUseSiteMemberScope( override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) { val potentialPropertyNames = getPropertyNamesCandidatesByAccessorName(name) - val renamedSpecialBuiltInNames = SpecialGenericSignatures.getBuiltinFunctionNamesByJvmName(name) + val renamedSpecialBuiltInName = SpecialGenericSignatures.getBuiltinFunctionNamesByJvmName(name) - if (potentialPropertyNames.isEmpty() && renamedSpecialBuiltInNames.isEmpty() && + if (potentialPropertyNames.isEmpty() && renamedSpecialBuiltInName == null && !name.sameAsBuiltinMethodWithErasedValueParameters && !name.sameAsRenamedInJvmBuiltin ) { return super.processFunctionsByName(name, processor) @@ -233,7 +233,7 @@ class JavaClassUseSiteMemberScope( val overriddenProperties = potentialPropertyNames.flatMap(this::getProperties).filterIsInstance() specialFunctions.getOrPut(name) { - doProcessSpecialFunctions(name, overriddenProperties, renamedSpecialBuiltInNames) + doProcessSpecialFunctions(name, overriddenProperties, renamedSpecialBuiltInName) }.forEach { processor(it) } @@ -242,14 +242,14 @@ class JavaClassUseSiteMemberScope( private fun doProcessSpecialFunctions( name: Name, overriddenProperties: List, - renamedSpecialBuiltInNames: List + renamedSpecialBuiltInName: Name? ): List { val result = mutableListOf() declaredMemberScope.processFunctionsByName(name) { functionSymbol -> if (functionSymbol.isStatic) return@processFunctionsByName if (overriddenProperties.none { it.isOverriddenInClassBy(functionSymbol) } && - !functionSymbol.doesOverrideRenamedBuiltins(renamedSpecialBuiltInNames) && + !functionSymbol.doesOverrideRenamedBuiltins(renamedSpecialBuiltInName) && !functionSymbol.shouldBeVisibleAsOverrideOfBuiltInWithErasedValueParameters() ) { result += functionSymbol @@ -392,19 +392,17 @@ class JavaClassUseSiteMemberScope( return upperBound.classId == StandardClassIds.Any } - private fun FirNamedFunctionSymbol.doesOverrideRenamedBuiltins(renamedSpecialBuiltInNames: List): Boolean { - return renamedSpecialBuiltInNames.any { - // e.g. 'removeAt' or 'toInt' - builtinName -> - val builtinSpecialFromSuperTypes = - getFunctionsFromSupertypes(builtinName).filter { it.getOverriddenBuiltinWithDifferentJvmName() != null } - if (builtinSpecialFromSuperTypes.isEmpty()) return@any false + private fun FirNamedFunctionSymbol.doesOverrideRenamedBuiltins(renamedSpecialBuiltInName: Name?): Boolean { + if (renamedSpecialBuiltInName == null) return false + // e.g. 'removeAt' or 'toInt' + val builtinSpecialFromSuperTypes = + getFunctionsFromSupertypes(renamedSpecialBuiltInName).filter { it.getOverriddenBuiltinWithDifferentJvmName() != null } + if (builtinSpecialFromSuperTypes.isEmpty()) return false - val currentJvmDescriptor = fir.computeJvmDescriptor(customName = builtinName.asString()) + val currentJvmDescriptor = fir.computeJvmDescriptor(customName = renamedSpecialBuiltInName.asString()) - builtinSpecialFromSuperTypes.any { builtinSpecial -> - builtinSpecial.fir.computeJvmDescriptor() == currentJvmDescriptor - } + return builtinSpecialFromSuperTypes.any { builtinSpecial -> + builtinSpecial.fir.computeJvmDescriptor() == currentJvmDescriptor } } diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/SpecialGenericSignatures.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/SpecialGenericSignatures.kt index 6314884ae22..02516c4df75 100644 --- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/SpecialGenericSignatures.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/SpecialGenericSignatures.kt @@ -127,13 +127,13 @@ open class SpecialGenericSignatures { val ORIGINAL_SHORT_NAMES: List = NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.keys.map { it.name } - val JVM_SHORT_NAME_TO_BUILTIN_SHORT_NAMES_MAP: Map> = + val JVM_SHORT_NAME_TO_BUILTIN_SHORT_NAMES_MAP: Map = NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.entries .map { Pair(it.key.name, it.value) } - .groupBy({ it.second }, { it.first }) + .associateBy({ it.second }, { it.first }) - fun getBuiltinFunctionNamesByJvmName(name: Name): List = - JVM_SHORT_NAME_TO_BUILTIN_SHORT_NAMES_MAP[name] ?: emptyList() + fun getBuiltinFunctionNamesByJvmName(name: Name): Name? = + JVM_SHORT_NAME_TO_BUILTIN_SHORT_NAMES_MAP[name] val Name.sameAsBuiltinMethodWithErasedValueParameters: Boolean get() = this in ERASED_VALUE_PARAMETERS_SHORT_NAMES diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index a1749ae64c1..03d6eb484b3 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -205,17 +205,15 @@ class LazyJavaClassMemberScope( } private fun SimpleFunctionDescriptor.doesOverrideRenamedBuiltins(): Boolean { - return SpecialGenericSignatures.getBuiltinFunctionNamesByJvmName(name).any { - // e.g. 'removeAt' or 'toInt' - builtinName -> - val builtinSpecialFromSuperTypes = - getFunctionsFromSupertypes(builtinName).filter { it.doesOverrideBuiltinWithDifferentJvmName() } - if (builtinSpecialFromSuperTypes.isEmpty()) return@any false + // e.g. 'removeAt' or 'toInt' + val builtinName = SpecialGenericSignatures.getBuiltinFunctionNamesByJvmName(name) ?: return false + val builtinSpecialFromSuperTypes = + getFunctionsFromSupertypes(builtinName).filter { it.doesOverrideBuiltinWithDifferentJvmName() } + if (builtinSpecialFromSuperTypes.isEmpty()) return false - val methodDescriptor = this.createRenamedCopy(builtinName) + val methodDescriptor = this.createRenamedCopy(builtinName) - builtinSpecialFromSuperTypes.any { doesOverrideRenamedDescriptor(it, methodDescriptor) } - } + return builtinSpecialFromSuperTypes.any { doesOverrideRenamedDescriptor(it, methodDescriptor) } } private fun SimpleFunctionDescriptor.doesOverrideSuspendFunction(): Boolean {