diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt index aeca3b9d219..861ffb45620 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod -import org.jetbrains.kotlin.builtins.StandardNames.DATA_CLASS_COPY import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.light.classes.symbol.classes.* import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.DataClassResolver import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS import org.jetbrains.kotlin.util.OperatorNameConventions.TO_STRING @@ -162,7 +162,7 @@ internal class FirLightClassForSymbol( classOrObjectSymbol.getMemberScope().getCallableSymbols().forEach { symbol -> if (symbol is KtFunctionSymbol) { val name = symbol.name - if (name.isCopy || name.isComponentN) { + if (DataClassResolver.isCopy(name) || DataClassResolver.isComponentLike(name)) { componentAndCopyFunctions.add(symbol) } if (name.isFromAny) { @@ -178,17 +178,6 @@ internal class FirLightClassForSymbol( } } - private val Name.isCopy: Boolean - get() = this == DATA_CLASS_COPY - - private val Name.isComponentN: Boolean - get() { - if (isSpecial) return false - if (!identifier.startsWith("component")) return false - val n = identifier.substring("component".length).toIntOrNull() - return n != null && n > 0 - } - private val Name.isFromAny: Boolean get() = this == EQUALS || this == HASHCODE_NAME || this == TO_STRING diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt index c1ffeab0831..b163890b51b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.constructedClassType import org.jetbrains.kotlin.ir.util.isSetter import org.jetbrains.kotlin.ir.util.parentAsClass +import org.jetbrains.kotlin.resolve.DataClassResolver internal class ClassMemberGenerator( private val components: Fir2IrComponents, @@ -128,10 +129,10 @@ internal class ClassMemberGenerator( irFunction.parent is IrClass && irFunction.parentAsClass.isData -> { val lookupTag = firFunction?.symbol?.dispatchReceiverClassOrNull() when { - DataClassMembersGenerator.isComponentN(irFunction) -> + DataClassResolver.isComponentLike(irFunction.name) -> firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) } ?: DataClassMembersGenerator(components).generateDataClassComponentBody(irFunction, lookupTag!!) - DataClassMembersGenerator.isCopy(irFunction) -> + DataClassResolver.isCopy(irFunction.name) -> firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) } ?: DataClassMembersGenerator(components).generateDataClassCopyBody(irFunction, lookupTag!!) else -> diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index 5f0b481d36f..72405cd0b6c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.fir.backend.generators -import org.jetbrains.kotlin.builtins.StandardNames.DATA_CLASS_COPY import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fir.backend.Fir2IrComponents @@ -46,6 +45,7 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.DataClassMembersGenerator import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.DataClassResolver import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS import org.jetbrains.kotlin.util.OperatorNameConventions.TO_STRING @@ -246,7 +246,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { } fun generateComponentBody(irFunction: IrFunction) { - val index = getComponentIndex(irFunction)!! + val index = DataClassResolver.getComponentIndex(irFunction.name.asString()) val valueParameter = irClass.primaryConstructor!!.valueParameters[index - 1] val irProperty = irDataClassMembersGenerator.getProperty(null, valueParameter)!! irDataClassMembersGenerator.generateComponentFunction(irFunction, irProperty) @@ -327,24 +327,4 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { parent = irFunction } } - - companion object { - fun isCopy(irFunction: IrFunction): Boolean = - irFunction.name == DATA_CLASS_COPY - - fun isComponentN(irFunction: IrFunction): Boolean { - if (irFunction.name.isSpecial) { - return false - } - val name = irFunction.name.identifier - if (!name.startsWith("component")) { - return false - } - val n = getComponentIndex(irFunction) - return n != null && n > 0 - } - - fun getComponentIndex(irFunction: IrFunction): Int? = - irFunction.name.identifier.substring("component".length).toIntOrNull() - } } diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/DataClassResolver.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/DataClassResolver.kt index 42124ec75e9..d547a167486 100644 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/DataClassResolver.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/DataClassResolver.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.resolve +import org.jetbrains.kotlin.builtins.StandardNames.DATA_CLASS_COPY import org.jetbrains.kotlin.name.Name object DataClassResolver { @@ -27,4 +28,6 @@ object DataClassResolver { return true } -} \ No newline at end of file + + fun isCopy(name: Name): Boolean = name == DATA_CLASS_COPY +}