diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt index d5dc69afe1d..7ecadebd2e5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/builtinSpecialBridges.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.load.java.builtinSpecialOverridden +import org.jetbrains.kotlin.load.java.getBuiltinSpecialOverridden import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure @@ -43,7 +43,7 @@ object BuiltinSpecialBridgesUtil { val functionHandle = DescriptorBasedFunctionHandle(function) val fake = !functionHandle.isDeclaration - val overriddenBuiltin = function.builtinSpecialOverridden!! + val overriddenBuiltin = function.getBuiltinSpecialOverridden()!! val reachableDeclarations = findAllReachableDeclarations(function) val needGenerateSpecialBridge = needGenerateSpecialBridge(function, reachableDeclarations, overriddenBuiltin) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt index 672b2ac1345..ac54a5a0035 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/builtinsPropertiesUtil.kt @@ -60,21 +60,24 @@ private fun CallableDescriptor.fqNameOrNull(): FqName? = fqNameUnsafe.check { it val Name.isBuiltinSpecialPropertyName: Boolean get() = this in BUILTIN_SPECIAL_PROPERTIES_SHORT_NAMES -public val CallableMemberDescriptor.builtinSpecialPropertyAccessorName: String? - get() = propertyIfAccessor.check { it.hasBuiltinSpecialPropertyFqName() }?.name?.asString() +public fun CallableMemberDescriptor.getBuiltinSpecialPropertyAccessorName(): String? { + return propertyIfAccessor.check { it.hasBuiltinSpecialPropertyFqName() }?.name?.asString() +} @Suppress("UNCHECKED_CAST") -val T.builtinSpecialOverridden: T? get() { +fun T.getBuiltinSpecialOverridden(): T? { return firstOverridden { it.propertyIfAccessor.hasBuiltinSpecialPropertyFqName() } as T? } -fun CallableMemberDescriptor.overridesBuiltinSpecialDeclaration(): Boolean = builtinSpecialOverridden != null +fun CallableMemberDescriptor.overridesBuiltinSpecialDeclaration(): Boolean = getBuiltinSpecialOverridden() != null -public val CallableMemberDescriptor.jvmMethodNameIfSpecial: String? - get() = builtinOverriddenThatAffectsJvmName?.builtinSpecialPropertyAccessorName +public fun CallableMemberDescriptor.getJvmMethodNameIfSpecial(): String? { + return getBuiltinOverriddenThatAffectsJvmName()?.getBuiltinSpecialPropertyAccessorName() +} -private val CallableMemberDescriptor.builtinOverriddenThatAffectsJvmName: CallableMemberDescriptor? - get() = if (hasBuiltinSpecialPropertyFqName() || original.isFromJava) builtinSpecialOverridden else null +private fun CallableMemberDescriptor.getBuiltinOverriddenThatAffectsJvmName(): CallableMemberDescriptor? { + return if (hasBuiltinSpecialPropertyFqName() || original.isFromJava) getBuiltinSpecialOverridden() else null +} private val CallableMemberDescriptor.isFromJava: Boolean get() = propertyIfAccessor is JavaCallableMemberDescriptor @@ -85,12 +88,10 @@ private val CallableMemberDescriptor.propertyIfAccessor: CallableDescriptor val CallableMemberDescriptor.hasErasedValueParametersInJava: Boolean get() = fqNameOrNull() in BUILTIN_METHODS_ERASED_VALUE_PARAMETERS_FQ_NAMES - -val FunctionDescriptor.overriddenBuiltinFunctionWithErasedValueParametersInJava: FunctionDescriptor? - get() { - if (!name.sameAsBuiltinMethodWithErasedValueParameters) return null - return firstOverridden { it.hasErasedValueParametersInJava } as FunctionDescriptor? - } +fun FunctionDescriptor.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(): FunctionDescriptor? { + if (!name.sameAsBuiltinMethodWithErasedValueParameters) return null + return firstOverridden { it.hasErasedValueParametersInJava } as FunctionDescriptor? +} private fun CallableMemberDescriptor.firstOverridden( predicate: (CallableMemberDescriptor) -> Boolean @@ -122,14 +123,13 @@ enum class SpecialSignatureInfo(val signature: String?) { GENERIC_PARAMETER(null) } -val CallableMemberDescriptor.specialSignatureInfo: SpecialSignatureInfo? - get() { - val builtinFqName = firstOverridden { it is FunctionDescriptor && it.hasErasedValueParametersInJava }?.fqNameOrNull() - ?: return null +fun CallableMemberDescriptor.getSpecialSignatureInfo(): SpecialSignatureInfo? { + val builtinFqName = firstOverridden { it is FunctionDescriptor && it.hasErasedValueParametersInJava }?.fqNameOrNull() + ?: return null - return when (builtinFqName) { - in BUILTIN_METHODS_ERASED_COLLECTION_PARAMETER_FQ_NAMES -> SpecialSignatureInfo.ONE_COLLECTION_PARAMETER - in BUILTIN_METHODS_GENERIC_PARAMETERS_FQ_NAMES -> SpecialSignatureInfo.GENERIC_PARAMETER - else -> error("Unexpected kind of special builtin: $builtinFqName") - } + return when (builtinFqName) { + in BUILTIN_METHODS_ERASED_COLLECTION_PARAMETER_FQ_NAMES -> SpecialSignatureInfo.ONE_COLLECTION_PARAMETER + in BUILTIN_METHODS_GENERIC_PARAMETERS_FQ_NAMES -> SpecialSignatureInfo.GENERIC_PARAMETER + else -> error("Unexpected kind of special builtin: $builtinFqName") } +} diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 8b3b5f67d8f..d85d137ae04 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -106,7 +106,7 @@ public class LazyJavaClassMemberScope( = properties.any { property -> doesClassOverridesProperty(property) } private fun PropertyDescriptor.findGetterOverride(): JavaMethodDescriptor? { - val getterName = getter?.builtinSpecialOverridden?.builtinSpecialPropertyAccessorName ?: JvmAbi.getterName(name.asString()) + val getterName = getter?.getBuiltinSpecialOverridden()?.getBuiltinSpecialPropertyAccessorName() ?: JvmAbi.getterName(name.asString()) return memberIndex().findMethodsByName(Name.identifier(getterName)).firstNotNullResult factory@{ javaMethod -> val descriptor = resolveMethodToFunctionDescriptor(javaMethod) @@ -273,7 +273,7 @@ public class LazyJavaClassMemberScope( ): JavaMethodDescriptor? { val overriddenCandidates = - getFunctionsFromSupertypes(methodDescriptor.name).map { it.overriddenBuiltinFunctionWithErasedValueParametersInJava }.filterNotNull() + getFunctionsFromSupertypes(methodDescriptor.name).map { it.getOverriddenBuiltinFunctionWithErasedValueParametersInJava() }.filterNotNull() if (overriddenCandidates.isEmpty()) return null