diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt index 25f65a40541..c57beebf158 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/CallInterceptor.kt @@ -115,7 +115,7 @@ internal class DefaultCallInterceptor(override val interpreter: IrInterpreter) : when { Wrapper.mustBeHandledWithWrapper(enumClass) -> { val enumEntryName = environment.convertToState(enumEntry.name.asString(), environment.irBuiltIns.stringType) - val valueOfFun = enumClass.declarations.single { it.nameForIrSerialization.asString() == "valueOf" } as IrFunction + val valueOfFun = enumClass.functions.single { it.name.asString() == "valueOf" } Wrapper.getEnumEntry(enumClass).invokeMethod(valueOfFun, listOf(enumEntryName)) environment.mapOfEnums[enumEntry.symbol] = callStack.popState() as Complex } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreterEnvironment.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreterEnvironment.kt index d1ba717be50..2353069231e 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreterEnvironment.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreterEnvironment.kt @@ -8,24 +8,18 @@ package org.jetbrains.kotlin.ir.interpreter import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.ir.interpreter.proxy.Proxy import org.jetbrains.kotlin.ir.interpreter.stack.CallStack -import org.jetbrains.kotlin.ir.interpreter.state.Common -import org.jetbrains.kotlin.ir.interpreter.state.Complex -import org.jetbrains.kotlin.ir.interpreter.state.ExceptionState -import org.jetbrains.kotlin.ir.interpreter.state.Primitive -import org.jetbrains.kotlin.ir.interpreter.state.State -import org.jetbrains.kotlin.ir.interpreter.state.Wrapper +import org.jetbrains.kotlin.ir.interpreter.state.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.isSubclassOf -import org.jetbrains.kotlin.ir.util.nameForIrSerialization +import org.jetbrains.kotlin.ir.util.properties class IrInterpreterEnvironment( val irBuiltIns: IrBuiltIns, @@ -144,7 +138,7 @@ class IrInterpreterEnvironment( } private fun IrClassSymbol.getIrClassOfReflectionFromList(name: String): IrClassSymbol? { - val property = this.owner.declarations.singleOrNull { it.nameForIrSerialization.asString() == name } as? IrProperty + val property = this.owner.properties.singleOrNull { it.name.asString() == name } val list = property?.getter?.returnType as? IrSimpleType return list?.arguments?.single()?.typeOrNull?.classOrNull } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt index 4719013ad98..8a1f9e33be9 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt @@ -216,7 +216,7 @@ internal fun IrFieldAccessExpression.accessesTopLevelOrObjectField(): Boolean { } internal fun IrClass.getOriginalPropertyByName(name: String): IrProperty { - val property = this.declarations.single { it.nameForIrSerialization.asString() == name } as IrProperty + val property = this.properties.single { it.name.asString() == name } return (property.getter!!.getLastOverridden() as IrSimpleFunction).correspondingPropertySymbol!!.owner } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt index f258d13067a..d48d35e9d33 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.ir.interpreter.state -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrProperty -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.interpreter.createCall import org.jetbrains.kotlin.ir.interpreter.fqName @@ -17,9 +14,8 @@ import org.jetbrains.kotlin.ir.interpreter.stack.Fields import org.jetbrains.kotlin.ir.interpreter.stack.Variable import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.isNullableAny -import org.jetbrains.kotlin.ir.util.nameForIrSerialization +import org.jetbrains.kotlin.ir.util.functions import org.jetbrains.kotlin.ir.util.resolveFakeOverride -import org.jetbrains.kotlin.name.Name internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure { override val upValues: MutableMap = mutableMapOf() @@ -42,30 +38,31 @@ internal class Common private constructor(override val irClass: IrClass, overrid fun getIrFunction(method: java.lang.reflect.Method): IrFunction? { val methodName = getKotlinName(method.declaringClass.name, method.name) - return when (val declaration = irClass.declarations.singleOrNull { it.nameForIrSerialization.asString() == methodName }) { + return when (val declaration = + irClass.declarations.singleOrNull { it is IrDeclarationWithName && it.name.asString() == methodName } + ) { is IrProperty -> declaration.getter else -> declaration as? IrFunction } } fun getEqualsFunction(): IrSimpleFunction { - return irClass.declarations - .filterIsInstance() + return irClass.functions .single { - it.name == Name.identifier("equals") && it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null + it.name.asString() == "equals" && it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null && it.valueParameters.size == 1 && it.valueParameters[0].type.isNullableAny() } .let { it.resolveFakeOverride() as IrSimpleFunction } } fun getHashCodeFunction(): IrSimpleFunction { - return irClass.declarations.filterIsInstance() + return irClass.functions .single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null } .let { it.resolveFakeOverride() as IrSimpleFunction } } fun getToStringFunction(): IrSimpleFunction { - return irClass.declarations.filterIsInstance() + return irClass.functions .single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null } .let { it.resolveFakeOverride() as IrSimpleFunction } } @@ -77,4 +74,4 @@ internal class Common private constructor(override val irClass: IrClass, overrid override fun toString(): String { return "Common(obj='${irClass.fqName}', values=$fields)" } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt index 0161a280115..ad3580abbb0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt @@ -26,7 +26,7 @@ val IrConstructor.constructedClass get() = this.parent as IrClass val IrDeclarationParent.fqNameForIrSerialization: FqName get() = when (this) { is IrPackageFragment -> this.fqName - is IrDeclaration -> this.parent.fqNameForIrSerialization.child(this.nameForIrSerialization) + is IrDeclarationWithName -> this.parent.fqNameForIrSerialization.child(this.name) else -> error(this) } @@ -40,10 +40,10 @@ val IrDeclarationParent.kotlinFqName: FqName if (isFileClass) { parent.kotlinFqName } else { - parent.kotlinFqName.child(nameForIrSerialization) + parent.kotlinFqName.child(name) } } - is IrDeclaration -> this.parent.kotlinFqName.child(nameForIrSerialization) + is IrDeclarationWithName -> this.parent.kotlinFqName.child(name) else -> error(this) } @@ -54,6 +54,13 @@ val IrClass.classId: ClassId? else -> null } +@Suppress("unused") +@Deprecated( + "This function is deprecated because it has confusing name and behavior. " + + "Please use IrDeclarationWithName.name or IrDeclaration.getNameWithAssert", + ReplaceWith("(this as? IrDeclarationWithName)?.name", "org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName"), + DeprecationLevel.ERROR +) val IrDeclaration.nameForIrSerialization: Name get() = when (this) { is IrDeclarationWithName -> this.name @@ -61,6 +68,9 @@ val IrDeclaration.nameForIrSerialization: Name else -> error(this) } +fun IrDeclaration.getNameWithAssert(): Name = + if (this is IrDeclarationWithName) name else error(this) + val IrValueParameter.isVararg get() = this.varargElementType != null val IrFunction.isSuspend get() = this is IrSimpleFunction && this.isSuspend diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/UnlinkedIrElementRenderer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/UnlinkedIrElementRenderer.kt index 66eec7243a2..99948df7d39 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/UnlinkedIrElementRenderer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/unlinked/UnlinkedIrElementRenderer.kt @@ -14,8 +14,8 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature.* +import org.jetbrains.kotlin.ir.util.getNameWithAssert import org.jetbrains.kotlin.ir.util.isAnonymousObject -import org.jetbrains.kotlin.ir.util.nameForIrSerialization // TODO: Consider getting rid of this class when new self-descriptive signatures are implemented. internal object UnlinkedIrElementRenderer { @@ -196,7 +196,7 @@ private fun IrSymbol.guessName(): String? { } effectiveSignature.guessNameBySignature(nameSegmentsToPickUp) } - ?: boundOwnerDeclarationOrNull?.nameForIrSerialization?.asString() + ?: boundOwnerDeclarationOrNull?.getNameWithAssert()?.asString() } private val IrSymbol.anySignature: IdSignature? diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt index 6fa48ab8957..af565609107 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt @@ -114,7 +114,7 @@ private class DeclarationsGeneratorVisitor(override val generationState: NativeG return objectNamer.getName(parent, declaration) } - return declaration.nameForIrSerialization + return declaration.getNameWithAssert() } private fun getFqName(declaration: IrDeclaration): FqName { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt index f5466a155c4..23fff448e62 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/coverage/CoverageRegionCollector.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.util.nameForIrSerialization import org.jetbrains.kotlin.ir.util.statements import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid @@ -56,9 +55,9 @@ internal class CoverageRegionCollector(private val fileFilter: (IrFile) -> Boole // User doesn't bother about compiler-generated declarations. // So lets filter them. -private val IrDeclaration.isGeneratedByCompiler: Boolean +private val IrFunction.isGeneratedByCompiler: Boolean get() { - return origin != IrDeclarationOrigin.DEFINED || nameForIrSerialization.asString() == "Konan_start" + return origin != IrDeclarationOrigin.DEFINED || name.asString() == "Konan_start" } /**