[IR] Replaced K/N findPackage with common getPackageFragment
This commit is contained in:
@@ -250,7 +250,7 @@ abstract class Symbols<out T : CommonBackendContext>(
|
||||
symbol is IrSimpleFunctionSymbol && symbol.owner.let { function ->
|
||||
function.name.asString() == "<get-isInitialized>" &&
|
||||
function.isTopLevel &&
|
||||
function.getPackageFragment()!!.fqName.asString() == "kotlin" &&
|
||||
function.getPackageFragment().fqName.asString() == "kotlin" &&
|
||||
function.valueParameters.isEmpty() &&
|
||||
symbol.owner.extensionReceiverParameter?.type?.classOrNull?.owner.let { receiverClass ->
|
||||
receiverClass?.fqNameWhenAvailable?.toUnsafe() == StandardNames.FqNames.kProperty0
|
||||
|
||||
+1
-1
@@ -582,7 +582,7 @@ class ExpressionCodegen(
|
||||
// Copy-pasted bytecode blocks are not suspension points.
|
||||
symbol.owner.isInline ->
|
||||
if (symbol.owner.name.asString() == "suspendCoroutineUninterceptedOrReturn" &&
|
||||
symbol.owner.getPackageFragment()?.fqName == FqName("kotlin.coroutines.intrinsics")
|
||||
symbol.owner.getPackageFragment().fqName == FqName("kotlin.coroutines.intrinsics")
|
||||
)
|
||||
SuspensionPointKind.ALWAYS
|
||||
else
|
||||
|
||||
+1
-1
@@ -119,5 +119,5 @@ private class AssertionLowering(private val context: JvmBackendContext) :
|
||||
}
|
||||
|
||||
private val IrFunction.isAssert: Boolean
|
||||
get() = name.asString() == "assert" && getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME
|
||||
get() = name.asString() == "assert" && getPackageFragment().fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME
|
||||
}
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ private class PropertyReferenceDelegationTransformer(val context: JvmBackendCont
|
||||
}
|
||||
|
||||
private val IrStatement.isStdlibCall: Boolean
|
||||
get() = this is IrCall && symbol.owner.getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME
|
||||
get() = this is IrCall && symbol.owner.getPackageFragment().fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME
|
||||
|
||||
// Some receivers don't need to be stored in fields and can be reevaluated every time an accessor is called:
|
||||
private fun IrExpression.canInline(visibleScopes: Set<IrDeclarationParent>): Boolean = when (this) {
|
||||
|
||||
+1
-1
@@ -89,7 +89,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : FileL
|
||||
|
||||
val ownerClass = declaration.parent as? IrClass ?: return true // locals are always accessible
|
||||
val scopeClassOrPackage = inlineScopeResolver.findContainer(currentScope!!.irElement) ?: return false
|
||||
val samePackage = ownerClass.getPackageFragment()?.fqName == scopeClassOrPackage.getPackageFragment()?.fqName
|
||||
val samePackage = ownerClass.getPackageFragment().fqName == scopeClassOrPackage.getPackageFragment()?.fqName
|
||||
return when {
|
||||
jvmVisibility == 0 /* package only */ -> samePackage
|
||||
jvmVisibility == Opcodes.ACC_PRIVATE -> ownerClass == scopeClassOrPackage
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@ internal const val ARRAY_OF_NAME = "arrayOf"
|
||||
|
||||
internal fun IrFunction.isArrayOf(): Boolean {
|
||||
val parent = when (val directParent = parent) {
|
||||
is IrClass -> directParent.getPackageFragment() ?: return false
|
||||
is IrClass -> directParent.getPackageFragment()
|
||||
is IrPackageFragment -> directParent
|
||||
else -> return false
|
||||
}
|
||||
|
||||
+2
-2
@@ -65,8 +65,8 @@ class IrInlineScopeResolver(context: JvmBackendContext) : IrInlineReferenceLocat
|
||||
get() = isInline && DescriptorVisibilities.isPrivate(visibility)
|
||||
|
||||
private fun IrFunction.isCoroutineIntrinsic(): Boolean =
|
||||
(name.asString() == "suspendCoroutine" && getPackageFragment()?.fqName == FqName("kotlin.coroutines")) ||
|
||||
(name.asString() == "suspendCoroutineUninterceptedOrReturn" && getPackageFragment()?.fqName == FqName("kotlin.coroutines.intrinsics"))
|
||||
(name.asString() == "suspendCoroutine" && getPackageFragment().fqName == FqName("kotlin.coroutines")) ||
|
||||
(name.asString() == "suspendCoroutineUninterceptedOrReturn" && getPackageFragment().fqName == FqName("kotlin.coroutines.intrinsics"))
|
||||
|
||||
fun findContainer(scope: IrElement): IrDeclarationContainer? =
|
||||
findContainer(scope, approximateToPackage = false)
|
||||
|
||||
+1
-1
@@ -452,7 +452,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
||||
}
|
||||
|
||||
private val IrSimpleFunction.isBuiltIn: Boolean
|
||||
get() = getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME ||
|
||||
get() = getPackageFragment().fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME ||
|
||||
parent.safeAs<IrClass>()?.fqNameWhenAvailable?.toUnsafe()?.let(JavaToKotlinClassMap::mapKotlinToJava) != null
|
||||
|
||||
// From BuiltinMethodsWithDifferentJvmName.isBuiltinFunctionWithDifferentNameInJvm, BuiltinMethodsWithDifferentJvmName.getJvmName
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ class DescriptorMetadataSerializer(
|
||||
is DescriptorMetadataSource.Class -> serializer!!.classProto(metadata.descriptor).build()
|
||||
is DescriptorMetadataSource.Script -> serializer!!.classProto(metadata.descriptor).build()
|
||||
is DescriptorMetadataSource.File ->
|
||||
serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.descriptors).apply {
|
||||
serializer!!.packagePartProto(irClass.getPackageFragment().fqName, metadata.descriptors).apply {
|
||||
serializerExtension.serializeJvmPackage(this, type)
|
||||
}.build()
|
||||
is DescriptorMetadataSource.Function -> {
|
||||
|
||||
-1
@@ -95,7 +95,6 @@ class WasmCompiledModuleFragment(val irBuiltIns: IrBuiltIns) {
|
||||
val declaration = (ir as? IrSymbol)?.owner as? IrDeclarationWithName
|
||||
if (declaration != null) {
|
||||
val packageFragment = declaration.getPackageFragment()
|
||||
?: error("Referencing declaration without package fragment ${declaration.fqNameWhenAvailable}")
|
||||
if (packageFragment is IrExternalPackageFragment) {
|
||||
error("Referencing declaration without package fragment ${declaration.fqNameWhenAvailable}")
|
||||
}
|
||||
|
||||
@@ -273,12 +273,13 @@ val IrDeclaration.parentAsClass: IrClass
|
||||
get() = parent as? IrClass
|
||||
?: error("Parent of this declaration is not a class: ${render()}")
|
||||
|
||||
tailrec fun IrElement.getPackageFragment(): IrPackageFragment? {
|
||||
if (this is IrPackageFragment) return this
|
||||
return when (val parent = (this as? IrDeclaration)?.parent) {
|
||||
is IrPackageFragment -> parent
|
||||
else -> parent?.getPackageFragment()
|
||||
}
|
||||
fun IrElement.getPackageFragment(): IrPackageFragment? =
|
||||
this as? IrPackageFragment ?: (this as? IrDeclaration)?.getPackageFragment()
|
||||
|
||||
tailrec fun IrDeclaration.getPackageFragment(): IrPackageFragment {
|
||||
val parent = this.parent
|
||||
return parent as? IrPackageFragment
|
||||
?: (parent as IrDeclaration).getPackageFragment()
|
||||
}
|
||||
|
||||
fun IrConstructorCall.isAnnotation(name: FqName) = symbol.owner.parentAsClass.fqNameWhenAvailable == name
|
||||
@@ -484,12 +485,7 @@ fun IrMemberAccessExpression<IrFunctionSymbol>.copyValueArgumentsFrom(
|
||||
}
|
||||
|
||||
val IrDeclaration.fileOrNull: IrFile?
|
||||
get() = when (val parent = parent) {
|
||||
is IrFile -> parent
|
||||
is IrPackageFragment -> null
|
||||
is IrDeclaration -> parent.fileOrNull
|
||||
else -> TODO("Unexpected declaration parent")
|
||||
}
|
||||
get() = getPackageFragment() as? IrFile
|
||||
|
||||
val IrDeclaration.file: IrFile
|
||||
get() = fileOrNull ?: TODO("Unknown file")
|
||||
|
||||
Reference in New Issue
Block a user