Reuse new descriptor in bridge lowering
This commit is contained in:
+13
-7
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
|||||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredStatementOrigin
|
import org.jetbrains.kotlin.backend.jvm.JvmLoweredStatementOrigin
|
||||||
import org.jetbrains.kotlin.backend.jvm.descriptors.DefaultImplsClassDescriptor
|
import org.jetbrains.kotlin.backend.jvm.descriptors.DefaultImplsClassDescriptor
|
||||||
import org.jetbrains.kotlin.backend.jvm.descriptors.JvmFunctionDescriptorImpl
|
import org.jetbrains.kotlin.backend.jvm.descriptors.JvmFunctionDescriptorImpl
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil.getVisibilityAccessFlag
|
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil.isAbstractMethod
|
import org.jetbrains.kotlin.codegen.AsmUtil.isAbstractMethod
|
||||||
import org.jetbrains.kotlin.codegen.BuiltinSpecialBridgesUtil
|
import org.jetbrains.kotlin.codegen.BuiltinSpecialBridgesUtil
|
||||||
import org.jetbrains.kotlin.codegen.FunctionCodegen.isMethodOfAny
|
import org.jetbrains.kotlin.codegen.FunctionCodegen.isMethodOfAny
|
||||||
@@ -37,6 +36,7 @@ import org.jetbrains.kotlin.codegen.FunctionCodegen.isThereOverriddenInKotlinCla
|
|||||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil.getDirectMember
|
import org.jetbrains.kotlin.codegen.JvmCodegenUtil.getDirectMember
|
||||||
import org.jetbrains.kotlin.codegen.OwnerKind
|
import org.jetbrains.kotlin.codegen.OwnerKind
|
||||||
import org.jetbrains.kotlin.codegen.descriptors.FileClassDescriptor
|
import org.jetbrains.kotlin.codegen.descriptors.FileClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.codegen.isToArrayFromCollection
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.config.JvmTarget
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
@@ -53,6 +53,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
|||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.util.createParameterDeclarations
|
import org.jetbrains.kotlin.ir.util.createParameterDeclarations
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
|
||||||
@@ -65,7 +66,6 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils.isInterface
|
|||||||
import org.jetbrains.kotlin.resolve.annotations.hasJvmDefaultAnnotation
|
import org.jetbrains.kotlin.resolve.annotations.hasJvmDefaultAnnotation
|
||||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE
|
import org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes.*
|
import org.jetbrains.org.objectweb.asm.Opcodes.*
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
import org.jetbrains.org.objectweb.asm.commons.Method
|
import org.jetbrains.org.objectweb.asm.commons.Method
|
||||||
@@ -170,12 +170,18 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
|||||||
?: 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)
|
// TODO: reimplement getVisibilityAccessFlag(descriptor)
|
||||||
val bridgeDescriptor = JvmFunctionDescriptorImpl(
|
val visibility = if (descriptor.isToArrayFromCollection()) Visibilities.PUBLIC else descriptor.visibility
|
||||||
descriptor.containingDeclaration as ClassDescriptor, null, Annotations.EMPTY,
|
val irFunction = IrFunctionImpl(
|
||||||
descriptor.name, CallableMemberDescriptor.Kind.SYNTHESIZED, descriptor.source, flags
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
IrDeclarationOrigin.DEFINED,
|
||||||
|
IrSimpleFunctionSymbolImpl(descriptor),
|
||||||
|
visibility = visibility,
|
||||||
|
modality = Modality.ABSTRACT
|
||||||
)
|
)
|
||||||
val irFunction = IrFunctionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.DEFINED, bridgeDescriptor)
|
irFunction.createParameterDeclarations()
|
||||||
|
|
||||||
irClass.declarations.add(irFunction)
|
irClass.declarations.add(irFunction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user