IR: minor, deprecate nameForIrSerialization, use name instead

This commit is contained in:
Alexander Udalov
2022-12-12 22:07:20 +01:00
committed by Space Team
parent 34be0f05b2
commit 5dd1777624
8 changed files with 33 additions and 33 deletions
@@ -115,7 +115,7 @@ internal class DefaultCallInterceptor(override val interpreter: IrInterpreter) :
when { when {
Wrapper.mustBeHandledWithWrapper(enumClass) -> { Wrapper.mustBeHandledWithWrapper(enumClass) -> {
val enumEntryName = environment.convertToState(enumEntry.name.asString(), environment.irBuiltIns.stringType) 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)) Wrapper.getEnumEntry(enumClass).invokeMethod(valueOfFun, listOf(enumEntryName))
environment.mapOfEnums[enumEntry.symbol] = callStack.popState() as Complex environment.mapOfEnums[enumEntry.symbol] = callStack.popState() as Complex
} }
@@ -8,24 +8,18 @@ package org.jetbrains.kotlin.ir.interpreter
import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment 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.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
import org.jetbrains.kotlin.ir.interpreter.proxy.Proxy import org.jetbrains.kotlin.ir.interpreter.proxy.Proxy
import org.jetbrains.kotlin.ir.interpreter.stack.CallStack import org.jetbrains.kotlin.ir.interpreter.stack.CallStack
import org.jetbrains.kotlin.ir.interpreter.state.Common import org.jetbrains.kotlin.ir.interpreter.state.*
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.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.ir.util.isSubclassOf import org.jetbrains.kotlin.ir.util.isSubclassOf
import org.jetbrains.kotlin.ir.util.nameForIrSerialization import org.jetbrains.kotlin.ir.util.properties
class IrInterpreterEnvironment( class IrInterpreterEnvironment(
val irBuiltIns: IrBuiltIns, val irBuiltIns: IrBuiltIns,
@@ -144,7 +138,7 @@ class IrInterpreterEnvironment(
} }
private fun IrClassSymbol.getIrClassOfReflectionFromList(name: String): IrClassSymbol? { 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 val list = property?.getter?.returnType as? IrSimpleType
return list?.arguments?.single()?.typeOrNull?.classOrNull return list?.arguments?.single()?.typeOrNull?.classOrNull
} }
@@ -216,7 +216,7 @@ internal fun IrFieldAccessExpression.accessesTopLevelOrObjectField(): Boolean {
} }
internal fun IrClass.getOriginalPropertyByName(name: String): IrProperty { 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 return (property.getter!!.getLastOverridden() as IrSimpleFunction).correspondingPropertySymbol!!.owner
} }
@@ -5,10 +5,7 @@
package org.jetbrains.kotlin.ir.interpreter.state package org.jetbrains.kotlin.ir.interpreter.state
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.*
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.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.interpreter.createCall import org.jetbrains.kotlin.ir.interpreter.createCall
import org.jetbrains.kotlin.ir.interpreter.fqName 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.interpreter.stack.Variable
import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.isNullableAny 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.ir.util.resolveFakeOverride
import org.jetbrains.kotlin.name.Name
internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure { internal class Common private constructor(override val irClass: IrClass, override val fields: Fields) : Complex, StateWithClosure {
override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf() override val upValues: MutableMap<IrSymbol, Variable> = mutableMapOf()
@@ -42,30 +38,31 @@ internal class Common private constructor(override val irClass: IrClass, overrid
fun getIrFunction(method: java.lang.reflect.Method): IrFunction? { fun getIrFunction(method: java.lang.reflect.Method): IrFunction? {
val methodName = getKotlinName(method.declaringClass.name, method.name) 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 is IrProperty -> declaration.getter
else -> declaration as? IrFunction else -> declaration as? IrFunction
} }
} }
fun getEqualsFunction(): IrSimpleFunction { fun getEqualsFunction(): IrSimpleFunction {
return irClass.declarations return irClass.functions
.filterIsInstance<IrSimpleFunction>()
.single { .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() && it.valueParameters.size == 1 && it.valueParameters[0].type.isNullableAny()
} }
.let { it.resolveFakeOverride() as IrSimpleFunction } .let { it.resolveFakeOverride() as IrSimpleFunction }
} }
fun getHashCodeFunction(): IrSimpleFunction { fun getHashCodeFunction(): IrSimpleFunction {
return irClass.declarations.filterIsInstance<IrSimpleFunction>() return irClass.functions
.single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null } .single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
.let { it.resolveFakeOverride() as IrSimpleFunction } .let { it.resolveFakeOverride() as IrSimpleFunction }
} }
fun getToStringFunction(): IrSimpleFunction { fun getToStringFunction(): IrSimpleFunction {
return irClass.declarations.filterIsInstance<IrSimpleFunction>() return irClass.functions
.single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null } .single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
.let { it.resolveFakeOverride() as IrSimpleFunction } .let { it.resolveFakeOverride() as IrSimpleFunction }
} }
@@ -77,4 +74,4 @@ internal class Common private constructor(override val irClass: IrClass, overrid
override fun toString(): String { override fun toString(): String {
return "Common(obj='${irClass.fqName}', values=$fields)" return "Common(obj='${irClass.fqName}', values=$fields)"
} }
} }
@@ -26,7 +26,7 @@ val IrConstructor.constructedClass get() = this.parent as IrClass
val IrDeclarationParent.fqNameForIrSerialization: FqName val IrDeclarationParent.fqNameForIrSerialization: FqName
get() = when (this) { get() = when (this) {
is IrPackageFragment -> this.fqName is IrPackageFragment -> this.fqName
is IrDeclaration -> this.parent.fqNameForIrSerialization.child(this.nameForIrSerialization) is IrDeclarationWithName -> this.parent.fqNameForIrSerialization.child(this.name)
else -> error(this) else -> error(this)
} }
@@ -40,10 +40,10 @@ val IrDeclarationParent.kotlinFqName: FqName
if (isFileClass) { if (isFileClass) {
parent.kotlinFqName parent.kotlinFqName
} else { } 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) else -> error(this)
} }
@@ -54,6 +54,13 @@ val IrClass.classId: ClassId?
else -> null 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 val IrDeclaration.nameForIrSerialization: Name
get() = when (this) { get() = when (this) {
is IrDeclarationWithName -> this.name is IrDeclarationWithName -> this.name
@@ -61,6 +68,9 @@ val IrDeclaration.nameForIrSerialization: Name
else -> error(this) else -> error(this)
} }
fun IrDeclaration.getNameWithAssert(): Name =
if (this is IrDeclarationWithName) name else error(this)
val IrValueParameter.isVararg get() = this.varargElementType != null val IrValueParameter.isVararg get() = this.varargElementType != null
val IrFunction.isSuspend get() = this is IrSimpleFunction && this.isSuspend val IrFunction.isSuspend get() = this is IrSimpleFunction && this.isSuspend
@@ -14,8 +14,8 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.* 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.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.isAnonymousObject
import org.jetbrains.kotlin.ir.util.nameForIrSerialization
// TODO: Consider getting rid of this class when new self-descriptive signatures are implemented. // TODO: Consider getting rid of this class when new self-descriptive signatures are implemented.
internal object UnlinkedIrElementRenderer { internal object UnlinkedIrElementRenderer {
@@ -196,7 +196,7 @@ private fun IrSymbol.guessName(): String? {
} }
effectiveSignature.guessNameBySignature(nameSegmentsToPickUp) effectiveSignature.guessNameBySignature(nameSegmentsToPickUp)
} }
?: boundOwnerDeclarationOrNull?.nameForIrSerialization?.asString() ?: boundOwnerDeclarationOrNull?.getNameWithAssert()?.asString()
} }
private val IrSymbol.anySignature: IdSignature? private val IrSymbol.anySignature: IdSignature?
@@ -114,7 +114,7 @@ private class DeclarationsGeneratorVisitor(override val generationState: NativeG
return objectNamer.getName(parent, declaration) return objectNamer.getName(parent, declaration)
} }
return declaration.nameForIrSerialization return declaration.getNameWithAssert()
} }
private fun getFqName(declaration: IrDeclaration): FqName { private fun getFqName(declaration: IrDeclaration): FqName {
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* 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.util.statements
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid 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. // User doesn't bother about compiler-generated declarations.
// So lets filter them. // So lets filter them.
private val IrDeclaration.isGeneratedByCompiler: Boolean private val IrFunction.isGeneratedByCompiler: Boolean
get() { get() {
return origin != IrDeclarationOrigin.DEFINED || nameForIrSerialization.asString() == "Konan_start" return origin != IrDeclarationOrigin.DEFINED || name.asString() == "Konan_start"
} }
/** /**