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 {
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
}
@@ -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
}
@@ -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
}
@@ -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<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? {
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<IrSimpleFunction>()
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<IrSimpleFunction>()
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<IrSimpleFunction>()
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)"
}
}
}
@@ -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
@@ -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?
@@ -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 {
@@ -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"
}
/**