IR: IrMemberWithContainerSource
This commit is contained in:
@@ -272,7 +272,7 @@ abstract class InlineCodegen<out T : BaseExpressionCodegen>(
|
|||||||
|
|
||||||
abstract fun extractDefaultLambdas(node: MethodNode): List<DefaultLambda>
|
abstract fun extractDefaultLambdas(node: MethodNode): List<DefaultLambda>
|
||||||
|
|
||||||
abstract fun isLoadedFromBytecode(memberDescriptor: CallableMemberDescriptor): Boolean
|
abstract fun descriptorIsDeserialized(memberDescriptor: CallableMemberDescriptor): Boolean
|
||||||
|
|
||||||
fun generateAndInsertFinallyBlocks(
|
fun generateAndInsertFinallyBlocks(
|
||||||
intoNode: MethodNode,
|
intoNode: MethodNode,
|
||||||
@@ -528,7 +528,7 @@ abstract class InlineCodegen<out T : BaseExpressionCodegen>(
|
|||||||
mangleSuspendInlineFunctionAsmMethodIfNeeded(functionDescriptor, jvmSignature.asmMethod)
|
mangleSuspendInlineFunctionAsmMethodIfNeeded(functionDescriptor, jvmSignature.asmMethod)
|
||||||
|
|
||||||
val directMember = getDirectMemberAndCallableFromObject(functionDescriptor)
|
val directMember = getDirectMemberAndCallableFromObject(functionDescriptor)
|
||||||
if (!isBuiltInArrayIntrinsic(functionDescriptor) && !isLoadedFromBytecode(directMember)) {
|
if (!isBuiltInArrayIntrinsic(functionDescriptor) && !descriptorIsDeserialized(directMember)) {
|
||||||
val node = sourceCompiler.doCreateMethodNodeFromSource(functionDescriptor, jvmSignature, callDefault, asmMethod)
|
val node = sourceCompiler.doCreateMethodNodeFromSource(functionDescriptor, jvmSignature, callDefault, asmMethod)
|
||||||
node.node.preprocessSuspendMarkers(forInline = true, keepFakeContinuation = false)
|
node.node.preprocessSuspendMarkers(forInline = true, keepFakeContinuation = false)
|
||||||
return node
|
return node
|
||||||
|
|||||||
@@ -211,6 +211,6 @@ class PsiInlineCodegen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isLoadedFromBytecode(memberDescriptor: CallableMemberDescriptor): Boolean =
|
override fun descriptorIsDeserialized(memberDescriptor: CallableMemberDescriptor): Boolean =
|
||||||
memberDescriptor is DescriptorWithContainerSource
|
memberDescriptor is DescriptorWithContainerSource
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-10
@@ -17,10 +17,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBasedPropertyDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBasedSimpleFunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.toIrBasedKotlinType
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||||
@@ -165,12 +162,8 @@ class IrInlineCodegen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isLoadedFromBytecode(memberDescriptor: CallableMemberDescriptor): Boolean =
|
override fun descriptorIsDeserialized(memberDescriptor: CallableMemberDescriptor): Boolean =
|
||||||
when (memberDescriptor) {
|
((memberDescriptor as IrBasedDeclarationDescriptor<*>).owner as IrMemberWithContainerSource).parentClassId != null
|
||||||
is IrBasedSimpleFunctionDescriptor -> memberDescriptor.owner.classId != null
|
|
||||||
is IrBasedPropertyDescriptor -> memberDescriptor.owner.classId != null
|
|
||||||
else -> false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class IrExpressionLambdaImpl(
|
class IrExpressionLambdaImpl(
|
||||||
|
|||||||
+2
-5
@@ -394,7 +394,7 @@ fun IrSimpleType.isRawType(): Boolean =
|
|||||||
hasAnnotation(JvmGeneratorExtensions.RAW_TYPE_ANNOTATION_FQ_NAME)
|
hasAnnotation(JvmGeneratorExtensions.RAW_TYPE_ANNOTATION_FQ_NAME)
|
||||||
|
|
||||||
internal fun classFileContainsMethod(function: IrFunction, context: JvmBackendContext, name: String): Boolean? {
|
internal fun classFileContainsMethod(function: IrFunction, context: JvmBackendContext, name: String): Boolean? {
|
||||||
val classId = function.classId ?: return null
|
val classId = function.parentClassId ?: return null
|
||||||
val originalDescriptor = context.methodSignatureMapper.mapSignatureWithGeneric(function).asmMethod.descriptor
|
val originalDescriptor = context.methodSignatureMapper.mapSignatureWithGeneric(function).asmMethod.descriptor
|
||||||
val descriptor = if (function.isSuspend)
|
val descriptor = if (function.isSuspend)
|
||||||
listOf(*Type.getArgumentTypes(originalDescriptor), Type.getObjectType("kotlin/coroutines/Continuation"))
|
listOf(*Type.getArgumentTypes(originalDescriptor), Type.getObjectType("kotlin/coroutines/Continuation"))
|
||||||
@@ -403,10 +403,7 @@ internal fun classFileContainsMethod(function: IrFunction, context: JvmBackendCo
|
|||||||
return classFileContainsMethod(classId, context.state, Method(name, descriptor))
|
return classFileContainsMethod(classId, context.state, Method(name, descriptor))
|
||||||
}
|
}
|
||||||
|
|
||||||
val IrFunction.classId: ClassId?
|
val IrMemberWithContainerSource.parentClassId: ClassId?
|
||||||
get() = (containerSource as? JvmPackagePartSource)?.classId ?: (parent as? IrClass)?.classId
|
|
||||||
|
|
||||||
val IrProperty.classId: ClassId?
|
|
||||||
get() = (containerSource as? JvmPackagePartSource)?.classId ?: (parent as? IrClass)?.classId
|
get() = (containerSource as? JvmPackagePartSource)?.classId ?: (parent as? IrClass)?.classId
|
||||||
|
|
||||||
// Translated into IR-based terms from classifierDescriptor?.classId
|
// Translated into IR-based terms from classifierDescriptor?.classId
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.IrStatement
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
|
|
||||||
interface IrSymbolOwner : IrElement {
|
interface IrSymbolOwner : IrElement {
|
||||||
val symbol: IrSymbol
|
val symbol: IrSymbol
|
||||||
@@ -66,3 +67,7 @@ interface IrDeclarationWithName : IrDeclaration {
|
|||||||
interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner {
|
interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner {
|
||||||
val modality: Modality
|
val modality: Modality
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface IrMemberWithContainerSource : IrDeclarationWithName {
|
||||||
|
val containerSource: DeserializedContainerSource?
|
||||||
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
|
|||||||
abstract class IrFunction :
|
abstract class IrFunction :
|
||||||
IrDeclarationBase(),
|
IrDeclarationBase(),
|
||||||
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
|
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
|
||||||
|
IrMemberWithContainerSource,
|
||||||
IrMetadataSourceOwner {
|
IrMetadataSourceOwner {
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
@@ -49,8 +50,6 @@ abstract class IrFunction :
|
|||||||
|
|
||||||
abstract var body: IrBody?
|
abstract var body: IrBody?
|
||||||
|
|
||||||
abstract val containerSource: DeserializedContainerSource?
|
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
typeParameters.forEach { it.accept(visitor, data) }
|
typeParameters.forEach { it.accept(visitor, data) }
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
|
|
||||||
abstract class IrProperty : IrDeclarationBase(), IrOverridableMember, IrMetadataSourceOwner, IrAttributeContainer {
|
abstract class IrProperty :
|
||||||
|
IrDeclarationBase(), IrOverridableMember, IrMetadataSourceOwner, IrAttributeContainer, IrMemberWithContainerSource {
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
abstract override val descriptor: PropertyDescriptor
|
abstract override val descriptor: PropertyDescriptor
|
||||||
abstract override val symbol: IrPropertySymbol
|
abstract override val symbol: IrPropertySymbol
|
||||||
@@ -40,8 +41,6 @@ abstract class IrProperty : IrDeclarationBase(), IrOverridableMember, IrMetadata
|
|||||||
abstract var getter: IrSimpleFunction?
|
abstract var getter: IrSimpleFunction?
|
||||||
abstract var setter: IrSimpleFunction?
|
abstract var setter: IrSimpleFunction?
|
||||||
|
|
||||||
abstract val containerSource: DeserializedContainerSource?
|
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitProperty(this, data)
|
visitor.visitProperty(this, data)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user