IR: minor, deprecate nameForIrSerialization, use name instead
This commit is contained in:
committed by
Space Team
parent
34be0f05b2
commit
5dd1777624
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
+3
-9
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+10
-13
@@ -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
|
||||
|
||||
+2
-2
@@ -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?
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+2
-3
@@ -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"
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user