IR: IrMemberWithContainerSource

This commit is contained in:
Georgy Bronnikov
2020-11-27 11:29:02 +03:00
parent 14b773c1fd
commit c0cd9064d7
7 changed files with 16 additions and 23 deletions
@@ -17,10 +17,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.IrBasedPropertyDescriptor
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.descriptors.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.classOrNull
@@ -165,12 +162,8 @@ class IrInlineCodegen(
)
}
override fun isLoadedFromBytecode(memberDescriptor: CallableMemberDescriptor): Boolean =
when (memberDescriptor) {
is IrBasedSimpleFunctionDescriptor -> memberDescriptor.owner.classId != null
is IrBasedPropertyDescriptor -> memberDescriptor.owner.classId != null
else -> false
}
override fun descriptorIsDeserialized(memberDescriptor: CallableMemberDescriptor): Boolean =
((memberDescriptor as IrBasedDeclarationDescriptor<*>).owner as IrMemberWithContainerSource).parentClassId != null
}
class IrExpressionLambdaImpl(
@@ -394,7 +394,7 @@ fun IrSimpleType.isRawType(): Boolean =
hasAnnotation(JvmGeneratorExtensions.RAW_TYPE_ANNOTATION_FQ_NAME)
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 descriptor = if (function.isSuspend)
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))
}
val IrFunction.classId: ClassId?
get() = (containerSource as? JvmPackagePartSource)?.classId ?: (parent as? IrClass)?.classId
val IrProperty.classId: ClassId?
val IrMemberWithContainerSource.parentClassId: ClassId?
get() = (containerSource as? JvmPackagePartSource)?.classId ?: (parent as? IrClass)?.classId
// Translated into IR-based terms from classifierDescriptor?.classId