Minor. Reformat
This commit is contained in:
+10
-9
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.codegen.FunctionCodegen
|
|||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
import org.jetbrains.kotlin.ir.util.dump
|
import org.jetbrains.kotlin.ir.util.dump
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
@@ -46,8 +47,7 @@ open class FunctionCodegen(private val irFunction: IrFunction, private val class
|
|||||||
fun generate() {
|
fun generate() {
|
||||||
try {
|
try {
|
||||||
doGenerate()
|
doGenerate()
|
||||||
}
|
} catch (e: Throwable) {
|
||||||
catch (e: Throwable) {
|
|
||||||
throw RuntimeException("${e.message} while generating code for:\n${irFunction.dump()}", e)
|
throw RuntimeException("${e.message} while generating code for:\n${irFunction.dump()}", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,10 +91,12 @@ open class FunctionCodegen(private val irFunction: IrFunction, private val class
|
|||||||
}
|
}
|
||||||
|
|
||||||
open protected fun createMethod(flags: Int, signature: JvmMethodGenericSignature): MethodVisitor {
|
open protected fun createMethod(flags: Int, signature: JvmMethodGenericSignature): MethodVisitor {
|
||||||
return classCodegen.visitor.newMethod(irFunction.OtherOrigin,
|
return classCodegen.visitor.newMethod(
|
||||||
|
irFunction.OtherOrigin,
|
||||||
flags,
|
flags,
|
||||||
signature.asmMethod.name, signature.asmMethod.descriptor,
|
signature.asmMethod.name, signature.asmMethod.descriptor,
|
||||||
signature.genericsSignature, null/*TODO support exception*/)
|
signature.genericsSignature, null/*TODO support exception*/
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateAnnotationDefaultValueIfNeeded(methodVisitor: MethodVisitor) {
|
private fun generateAnnotationDefaultValueIfNeeded(methodVisitor: MethodVisitor) {
|
||||||
@@ -104,7 +106,8 @@ open class FunctionCodegen(private val irFunction: IrFunction, private val class
|
|||||||
(source.getPsi() as? KtParameter)?.defaultValue?.apply {
|
(source.getPsi() as? KtParameter)?.defaultValue?.apply {
|
||||||
val defaultValue = this
|
val defaultValue = this
|
||||||
val constant = org.jetbrains.kotlin.codegen.ExpressionCodegen.getCompileTimeConstant(
|
val constant = org.jetbrains.kotlin.codegen.ExpressionCodegen.getCompileTimeConstant(
|
||||||
defaultValue, state.bindingContext, true, state.shouldInlineConstVals)
|
defaultValue, state.bindingContext, true, state.shouldInlineConstVals
|
||||||
|
)
|
||||||
assert(!state.classBuilderMode.generateBodies || constant != null) { "Default value for annotation parameter should be compile time value: " + defaultValue.text }
|
assert(!state.classBuilderMode.generateBodies || constant != null) { "Default value for annotation parameter should be compile time value: " + defaultValue.text }
|
||||||
if (constant != null) {
|
if (constant != null) {
|
||||||
val annotationCodegen = AnnotationCodegen.forAnnotationDefaultValue(methodVisitor, classCodegen, state.typeMapper)
|
val annotationCodegen = AnnotationCodegen.forAnnotationDefaultValue(methodVisitor, classCodegen, state.typeMapper)
|
||||||
@@ -137,12 +140,10 @@ fun createFrameMapWithReceivers(
|
|||||||
val receiverParameter = function.extensionReceiverParameter
|
val receiverParameter = function.extensionReceiverParameter
|
||||||
if (receiverParameter != null) {
|
if (receiverParameter != null) {
|
||||||
frameMap.enter(receiverParameter, state.typeMapper.mapType(receiverParameter))
|
frameMap.enter(receiverParameter, state.typeMapper.mapType(receiverParameter))
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
frameMap.enterTemp(parameter.asmType)
|
frameMap.enterTemp(parameter.asmType)
|
||||||
}
|
}
|
||||||
}
|
} else if (parameter.kind != JvmMethodParameterKind.VALUE) {
|
||||||
else if (parameter.kind != JvmMethodParameterKind.VALUE) {
|
|
||||||
frameMap.enterTemp(parameter.asmType)
|
frameMap.enterTemp(parameter.asmType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+43
-22
@@ -105,8 +105,7 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
if (!memberDescriptor.kind.isReal && findInterfaceImplementation(memberDescriptor) == null) {
|
if (!memberDescriptor.kind.isReal && findInterfaceImplementation(memberDescriptor) == null) {
|
||||||
if (memberDescriptor is FunctionDescriptor) {
|
if (memberDescriptor is FunctionDescriptor) {
|
||||||
generateBridges(memberDescriptor, irClass)
|
generateBridges(memberDescriptor, irClass)
|
||||||
}
|
} else if (memberDescriptor is PropertyDescriptor) {
|
||||||
else if (memberDescriptor is PropertyDescriptor) {
|
|
||||||
val getter = memberDescriptor.getter
|
val getter = memberDescriptor.getter
|
||||||
if (getter != null) {
|
if (getter != null) {
|
||||||
generateBridges(getter, irClass)
|
generateBridges(getter, irClass)
|
||||||
@@ -139,14 +138,14 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
)
|
)
|
||||||
if (!bridgesToGenerate.isEmpty()) {
|
if (!bridgesToGenerate.isEmpty()) {
|
||||||
val origin = if (descriptor.kind == DECLARATION) getSourceFromDescriptor(descriptor) else null
|
val origin = if (descriptor.kind == DECLARATION) getSourceFromDescriptor(descriptor) else null
|
||||||
val isSpecialBridge = BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(descriptor) != null
|
val isSpecialBridge =
|
||||||
|
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(descriptor) != null
|
||||||
|
|
||||||
for (bridge in bridgesToGenerate) {
|
for (bridge in bridgesToGenerate) {
|
||||||
irClass.declarations.add(createBridge(origin, descriptor, bridge.from, bridge.to, isSpecialBridge, false))
|
irClass.declarations.add(createBridge(origin, descriptor, bridge.from, bridge.to, isSpecialBridge, false))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
val specials = BuiltinSpecialBridgesUtil.generateBridgesForBuiltinSpecial(
|
val specials = BuiltinSpecialBridgesUtil.generateBridgesForBuiltinSpecial(
|
||||||
descriptor,
|
descriptor,
|
||||||
getSignatureMapper(typeMapper),
|
getSignatureMapper(typeMapper),
|
||||||
@@ -156,15 +155,18 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
if (!specials.isEmpty()) {
|
if (!specials.isEmpty()) {
|
||||||
val origin = if (descriptor.kind == DECLARATION) getSourceFromDescriptor(descriptor) else null
|
val origin = if (descriptor.kind == DECLARATION) getSourceFromDescriptor(descriptor) else null
|
||||||
for (bridge in specials) {
|
for (bridge in specials) {
|
||||||
irClass.declarations.add(createBridge(
|
irClass.declarations.add(
|
||||||
|
createBridge(
|
||||||
origin, descriptor, bridge.from, bridge.to,
|
origin, descriptor, bridge.from, bridge.to,
|
||||||
bridge.isSpecial, bridge.isDelegateToSuper))
|
bridge.isSpecial, bridge.isDelegateToSuper
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!descriptor.kind.isReal && isAbstractMethod(descriptor, OwnerKind.IMPLEMENTATION)) {
|
if (!descriptor.kind.isReal && isAbstractMethod(descriptor, OwnerKind.IMPLEMENTATION)) {
|
||||||
descriptor.getOverriddenBuiltinReflectingJvmDescriptor<CallableMemberDescriptor>() ?:
|
descriptor.getOverriddenBuiltinReflectingJvmDescriptor<CallableMemberDescriptor>()
|
||||||
error("Expect to find overridden descriptors for $descriptor")
|
?: error("Expect to find overridden descriptors for $descriptor")
|
||||||
|
|
||||||
if (!isThereOverriddenInKotlinClass(descriptor)) {
|
if (!isThereOverriddenInKotlinClass(descriptor)) {
|
||||||
val flags = Opcodes.ACC_ABSTRACT or getVisibilityAccessFlag(descriptor)
|
val flags = Opcodes.ACC_ABSTRACT or getVisibilityAccessFlag(descriptor)
|
||||||
@@ -188,7 +190,8 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
isStubDeclarationWithDelegationToSuper: Boolean
|
isStubDeclarationWithDelegationToSuper: Boolean
|
||||||
): IrFunction {
|
): IrFunction {
|
||||||
val isSpecialOrDelegationToSuper = isSpecialBridge || isStubDeclarationWithDelegationToSuper
|
val isSpecialOrDelegationToSuper = isSpecialBridge || isStubDeclarationWithDelegationToSuper
|
||||||
val flags = ACC_PUBLIC or ACC_BRIDGE or (if (!isSpecialOrDelegationToSuper) ACC_SYNTHETIC else 0) or if (isSpecialBridge) ACC_FINAL else 0 // TODO.
|
val flags =
|
||||||
|
ACC_PUBLIC or ACC_BRIDGE or (if (!isSpecialOrDelegationToSuper) ACC_SYNTHETIC else 0) or if (isSpecialBridge) ACC_FINAL else 0 // TODO.
|
||||||
val containingClass = descriptor.containingDeclaration as ClassDescriptor
|
val containingClass = descriptor.containingDeclaration as ClassDescriptor
|
||||||
//here some 'isSpecialBridge' magic
|
//here some 'isSpecialBridge' magic
|
||||||
val bridgeDescriptor = JvmFunctionDescriptorImpl(
|
val bridgeDescriptor = JvmFunctionDescriptorImpl(
|
||||||
@@ -212,12 +215,27 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val implementation = if (isSpecialBridge) delegateTo.descriptor.copyAsDeclaration() else delegateTo.descriptor
|
val implementation = if (isSpecialBridge) delegateTo.descriptor.copyAsDeclaration() else delegateTo.descriptor
|
||||||
val call = IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
val call = IrCallImpl(
|
||||||
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
|
||||||
implementation,
|
implementation,
|
||||||
null, JvmLoweredStatementOrigin.BRIDGE_DELEGATION, null)
|
null, JvmLoweredStatementOrigin.BRIDGE_DELEGATION, null
|
||||||
call.dispatchReceiver = IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, containingClass.thisAsReceiverParameter, JvmLoweredStatementOrigin.BRIDGE_DELEGATION)
|
)
|
||||||
|
call.dispatchReceiver = IrGetValueImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
containingClass.thisAsReceiverParameter,
|
||||||
|
JvmLoweredStatementOrigin.BRIDGE_DELEGATION
|
||||||
|
)
|
||||||
bridgeDescriptor.valueParameters.mapIndexed { i, valueParameterDescriptor ->
|
bridgeDescriptor.valueParameters.mapIndexed { i, valueParameterDescriptor ->
|
||||||
call.putValueArgument(i, IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, valueParameterDescriptor, JvmLoweredStatementOrigin.BRIDGE_DELEGATION))
|
call.putValueArgument(
|
||||||
|
i,
|
||||||
|
IrGetValueImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
valueParameterDescriptor,
|
||||||
|
JvmLoweredStatementOrigin.BRIDGE_DELEGATION
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
+IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, bridgeDescriptor, call)
|
+IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, bridgeDescriptor, call)
|
||||||
}.apply {
|
}.apply {
|
||||||
@@ -232,21 +250,22 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
bridgeDescriptor: FunctionDescriptor,
|
bridgeDescriptor: FunctionDescriptor,
|
||||||
delegateParameterTypes: Array<Type>?
|
delegateParameterTypes: Array<Type>?
|
||||||
) {
|
) {
|
||||||
val typeSafeBarrierDescription = BuiltinMethodsWithSpecialGenericSignature.getDefaultValueForOverriddenBuiltinFunction(overrideDescriptor) ?: return
|
val typeSafeBarrierDescription =
|
||||||
|
BuiltinMethodsWithSpecialGenericSignature.getDefaultValueForOverriddenBuiltinFunction(overrideDescriptor) ?: return
|
||||||
|
|
||||||
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(overrideDescriptor) ?:
|
BuiltinMethodsWithSpecialGenericSignature.getOverriddenBuiltinFunctionWithErasedValueParametersInJava(overrideDescriptor)
|
||||||
error("Overridden built-in method should not be null for " + overrideDescriptor)
|
?: error("Overridden built-in method should not be null for " + overrideDescriptor)
|
||||||
|
|
||||||
val conditions = bridgeDescriptor.valueParameters.withIndex().filter { (i, parameterDescriptor) ->
|
val conditions = bridgeDescriptor.valueParameters.withIndex().filter { (i, parameterDescriptor) ->
|
||||||
typeSafeBarrierDescription.checkParameter(i) ||
|
typeSafeBarrierDescription.checkParameter(i) ||
|
||||||
!(delegateParameterTypes == null || OBJECT_TYPE == delegateParameterTypes[i]) ||
|
!(delegateParameterTypes == null || OBJECT_TYPE == delegateParameterTypes[i]) ||
|
||||||
!TypeUtils.isNullableType(parameterDescriptor.type)
|
!TypeUtils.isNullableType(parameterDescriptor.type)
|
||||||
}.map { (i, parameterDescriptor) ->
|
}.map { (i, parameterDescriptor) ->
|
||||||
val checkValue = IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, parameterDescriptor, JvmLoweredStatementOrigin.BRIDGE_DELEGATION)
|
val checkValue =
|
||||||
|
IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, parameterDescriptor, JvmLoweredStatementOrigin.BRIDGE_DELEGATION)
|
||||||
if (delegateParameterTypes == null || OBJECT_TYPE == delegateParameterTypes[i]) {
|
if (delegateParameterTypes == null || OBJECT_TYPE == delegateParameterTypes[i]) {
|
||||||
irNotEquals(checkValue, irNull())
|
irNotEquals(checkValue, irNull())
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
irIs(checkValue, overrideDescriptor.valueParameters[i].type)
|
irIs(checkValue, overrideDescriptor.valueParameters[i].type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -262,7 +281,8 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
MAP_GET_OR_DEFAULT -> irGet(IrVariableSymbolImpl(bridgeDescriptor.valueParameters[1]))
|
MAP_GET_OR_DEFAULT -> irGet(IrVariableSymbolImpl(bridgeDescriptor.valueParameters[1]))
|
||||||
BuiltinMethodsWithSpecialGenericSignature.TypeSafeBarrierDescription.NULL -> irNull()
|
BuiltinMethodsWithSpecialGenericSignature.TypeSafeBarrierDescription.NULL -> irNull()
|
||||||
INDEX -> IrConstImpl.int(
|
INDEX -> IrConstImpl.int(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.builtIns.intType, typeSafeBarrierDescription.defaultValue as Int)
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, context.builtIns.intType, typeSafeBarrierDescription.defaultValue as Int
|
||||||
|
)
|
||||||
FALSE -> irFalse()
|
FALSE -> irFalse()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -283,7 +303,8 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
val isGetter = this is PropertyGetterDescriptor
|
val isGetter = this is PropertyGetterDescriptor
|
||||||
val isAccessor = this is PropertyAccessorDescriptor
|
val isAccessor = this is PropertyAccessorDescriptor
|
||||||
val directMember = getDirectMember(this)
|
val directMember = getDirectMember(this)
|
||||||
val copy = directMember.copy(directMember.containingDeclaration, directMember.modality, directMember.visibility, DECLARATION, false)
|
val copy =
|
||||||
|
directMember.copy(directMember.containingDeclaration, directMember.modality, directMember.visibility, DECLARATION, false)
|
||||||
if (isAccessor) {
|
if (isAccessor) {
|
||||||
val property = copy as PropertyDescriptor
|
val property = copy as PropertyDescriptor
|
||||||
return if (isGetter) property.getter!! else property.setter!!
|
return if (isGetter) property.getter!! else property.setter!!
|
||||||
|
|||||||
+11
-5
@@ -58,9 +58,13 @@ class InterfaceDelegationLowering(val state: GenerationState) : IrElementTransfo
|
|||||||
if (!interfaceFun.isDefinitelyNotDefaultImplsMethod()) {
|
if (!interfaceFun.isDefinitelyNotDefaultImplsMethod()) {
|
||||||
val inheritedFun =
|
val inheritedFun =
|
||||||
if (classDescriptor !== descriptor) {
|
if (classDescriptor !== descriptor) {
|
||||||
InterfaceLowering.createDefaultImplFunDescriptor(descriptor as DefaultImplsClassDescriptorImpl, interfaceFun, classDescriptor, state.typeMapper)
|
InterfaceLowering.createDefaultImplFunDescriptor(
|
||||||
}
|
descriptor as DefaultImplsClassDescriptorImpl,
|
||||||
else {
|
interfaceFun,
|
||||||
|
classDescriptor,
|
||||||
|
state.typeMapper
|
||||||
|
)
|
||||||
|
} else {
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
generateDelegationToDefaultImpl(irClass, interfaceFun, inheritedFun)
|
generateDelegationToDefaultImpl(irClass, interfaceFun, inheritedFun)
|
||||||
@@ -75,9 +79,11 @@ class InterfaceDelegationLowering(val state: GenerationState) : IrElementTransfo
|
|||||||
|
|
||||||
val interfaceDescriptor = interfaceFun.containingDeclaration as ClassDescriptor
|
val interfaceDescriptor = interfaceFun.containingDeclaration as ClassDescriptor
|
||||||
val defaultImpls = InterfaceLowering.createDefaultImplsClassDescriptor(interfaceDescriptor)
|
val defaultImpls = InterfaceLowering.createDefaultImplsClassDescriptor(interfaceDescriptor)
|
||||||
val defaultImplFun = InterfaceLowering.createDefaultImplFunDescriptor(defaultImpls, interfaceFun.original, interfaceDescriptor, state.typeMapper)
|
val defaultImplFun =
|
||||||
|
InterfaceLowering.createDefaultImplFunDescriptor(defaultImpls, interfaceFun.original, interfaceDescriptor, state.typeMapper)
|
||||||
val returnType = inheritedFun.returnType!!
|
val returnType = inheritedFun.returnType!!
|
||||||
val irCallImpl = IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, defaultImplFun, null, JvmLoweredStatementOrigin.DEFAULT_IMPLS_DELEGATION)
|
val irCallImpl =
|
||||||
|
IrCallImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, defaultImplFun, null, JvmLoweredStatementOrigin.DEFAULT_IMPLS_DELEGATION)
|
||||||
irBody.statements.add(IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, inheritedFun, irCallImpl))
|
irBody.statements.add(IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, inheritedFun, irCallImpl))
|
||||||
|
|
||||||
var shift = 0
|
var shift = 0
|
||||||
|
|||||||
+15
-7
@@ -49,7 +49,8 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
|||||||
|
|
||||||
val interfaceDescriptor = irClass.descriptor
|
val interfaceDescriptor = irClass.descriptor
|
||||||
val defaultImplsDescriptor = createDefaultImplsClassDescriptor(interfaceDescriptor)
|
val defaultImplsDescriptor = createDefaultImplsClassDescriptor(interfaceDescriptor)
|
||||||
val defaultImplsIrClass = IrClassImpl(irClass.startOffset, irClass.endOffset, JvmLoweredDeclarationOrigin.DEFAULT_IMPLS, defaultImplsDescriptor)
|
val defaultImplsIrClass =
|
||||||
|
IrClassImpl(irClass.startOffset, irClass.endOffset, JvmLoweredDeclarationOrigin.DEFAULT_IMPLS, defaultImplsDescriptor)
|
||||||
irClass.declarations.add(defaultImplsIrClass)
|
irClass.declarations.add(defaultImplsIrClass)
|
||||||
|
|
||||||
val members = defaultImplsIrClass.declarations
|
val members = defaultImplsIrClass.declarations
|
||||||
@@ -57,7 +58,8 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
|||||||
irClass.declarations.filterIsInstance<IrFunction>().forEach {
|
irClass.declarations.filterIsInstance<IrFunction>().forEach {
|
||||||
val descriptor = it.descriptor
|
val descriptor = it.descriptor
|
||||||
if (descriptor.modality != Modality.ABSTRACT) {
|
if (descriptor.modality != Modality.ABSTRACT) {
|
||||||
val functionDescriptorImpl = createDefaultImplFunDescriptor(defaultImplsDescriptor, descriptor, interfaceDescriptor, state.typeMapper)
|
val functionDescriptorImpl =
|
||||||
|
createDefaultImplFunDescriptor(defaultImplsDescriptor, descriptor, interfaceDescriptor, state.typeMapper)
|
||||||
members.add(functionDescriptorImpl.createFunctionAndMapVariables(it))
|
members.add(functionDescriptorImpl.createFunctionAndMapVariables(it))
|
||||||
it.body = null
|
it.body = null
|
||||||
}
|
}
|
||||||
@@ -71,8 +73,7 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
|||||||
val visibility = AsmUtil.getVisibilityAccessFlag(it.descriptor)
|
val visibility = AsmUtil.getVisibilityAccessFlag(it.descriptor)
|
||||||
if (visibility == Opcodes.ACC_PRIVATE && it.descriptor.name != clinitName) {
|
if (visibility == Opcodes.ACC_PRIVATE && it.descriptor.name != clinitName) {
|
||||||
it
|
it
|
||||||
}
|
} else null
|
||||||
else null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val defaultBodies = irClass.declarations.filterIsInstance<IrFunction>().filter {
|
val defaultBodies = irClass.declarations.filterIsInstance<IrFunction>().filter {
|
||||||
@@ -102,7 +103,12 @@ class InterfaceLowering(val state: GenerationState) : IrElementTransformerVoid()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun createStaticFunctionWithReceivers(owner: ClassOrPackageFragmentDescriptor, name: Name, descriptor: FunctionDescriptor, dispatchReceiverType: KotlinType): SimpleFunctionDescriptorImpl {
|
internal fun createStaticFunctionWithReceivers(
|
||||||
|
owner: ClassOrPackageFragmentDescriptor,
|
||||||
|
name: Name,
|
||||||
|
descriptor: FunctionDescriptor,
|
||||||
|
dispatchReceiverType: KotlinType
|
||||||
|
): SimpleFunctionDescriptorImpl {
|
||||||
val newFunction = SimpleFunctionDescriptorImpl.create(
|
val newFunction = SimpleFunctionDescriptorImpl.create(
|
||||||
owner,
|
owner,
|
||||||
AnnotationsImpl(emptyList()),
|
AnnotationsImpl(emptyList()),
|
||||||
@@ -113,12 +119,14 @@ internal fun createStaticFunctionWithReceivers(owner: ClassOrPackageFragmentDesc
|
|||||||
val dispatchReceiver =
|
val dispatchReceiver =
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("this"),
|
||||||
dispatchReceiverType, false, false, false, null, descriptor.source, null)
|
dispatchReceiverType, false, false, false, null, descriptor.source, null
|
||||||
|
)
|
||||||
val extensionReceiver =
|
val extensionReceiver =
|
||||||
descriptor.extensionReceiverParameter?.let { extensionReceiver ->
|
descriptor.extensionReceiverParameter?.let { extensionReceiver ->
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
||||||
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
newFunction, null, offset++, AnnotationsImpl(emptyList()), Name.identifier("receiver"),
|
||||||
extensionReceiver.value.type, false, false, false, null, extensionReceiver.source, null)
|
extensionReceiver.value.type, false, false, false, null, extensionReceiver.source, null
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val valueParameters = listOfNotNull(dispatchReceiver, extensionReceiver) +
|
val valueParameters = listOfNotNull(dispatchReceiver, extensionReceiver) +
|
||||||
|
|||||||
Reference in New Issue
Block a user