[K/N][IR] Used .isFakeOverride instead of a special origin
This commit is contained in:
@@ -745,7 +745,8 @@ class SymbolTable(
|
||||
isLateinit = descriptor.isLateInit,
|
||||
isDelegated = isDelegated,
|
||||
isExternal = descriptor.isEffectivelyExternal(),
|
||||
isExpect = descriptor.isExpect
|
||||
isExpect = descriptor.isExpect,
|
||||
isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||
).apply {
|
||||
metadata = DescriptorMetadataSource.Property(symbol.descriptor)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.util
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
|
||||
@@ -24,7 +25,17 @@ fun SymbolTable.declareSimpleFunctionWithOverrides(
|
||||
with(descriptor) {
|
||||
irFactory.createFunction(
|
||||
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(this),
|
||||
visibility, modality, IrUninitializedType, isInline, isEffectivelyExternal(), isTailrec, isSuspend, isOperator, isInfix, isExpect
|
||||
visibility,
|
||||
modality,
|
||||
IrUninitializedType,
|
||||
isInline,
|
||||
isEffectivelyExternal(),
|
||||
isTailrec,
|
||||
isSuspend,
|
||||
isOperator,
|
||||
isInfix,
|
||||
isExpect,
|
||||
isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||
).also { declaration ->
|
||||
declaration.metadata = DescriptorMetadataSource.Function(this)
|
||||
}
|
||||
|
||||
+9
-12
@@ -139,13 +139,14 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
private fun createSimpleFunction(
|
||||
descriptor: FunctionDescriptor,
|
||||
origin: IrDeclarationOrigin,
|
||||
returnType: IrType
|
||||
returnType: IrType,
|
||||
isFakeOverride: Boolean
|
||||
): IrSimpleFunction {
|
||||
val functionFactory: (IrSimpleFunctionSymbol) -> IrSimpleFunction = {
|
||||
with(descriptor) {
|
||||
IrFunctionImpl(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, it, name, visibility, modality, returnType,
|
||||
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect
|
||||
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -198,19 +199,15 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
OperatorNameConventions.INVOKE, NoLookupLocation.FROM_BACKEND).single()
|
||||
val isFakeOverride = invokeFunctionDescriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||
if (!isFakeOverride) {
|
||||
val invokeFunctionOrigin =
|
||||
if (isFakeOverride)
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
else
|
||||
DECLARATION_ORIGIN_FUNCTION_CLASS
|
||||
declarations += createSimpleFunction(
|
||||
invokeFunctionDescriptor, invokeFunctionOrigin,
|
||||
typeParameters.last().defaultType
|
||||
invokeFunctionDescriptor, DECLARATION_ORIGIN_FUNCTION_CLASS,
|
||||
typeParameters.last().defaultType,
|
||||
isFakeOverride
|
||||
).apply {
|
||||
parent = functionClass
|
||||
valueParameters += invokeFunctionDescriptor.valueParameters.map {
|
||||
IrValueParameterImpl(
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, invokeFunctionOrigin,
|
||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS,
|
||||
IrValueParameterSymbolImpl(it), it.name, it.index,
|
||||
functionClass.typeParameters[it.index].defaultType, null,
|
||||
it.isCrossinline, it.isNoinline,
|
||||
@@ -218,7 +215,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
).also { it.parent = this }
|
||||
}
|
||||
if (!isFakeOverride)
|
||||
createDispatchReceiverParameter(invokeFunctionOrigin)
|
||||
createDispatchReceiverParameter(DECLARATION_ORIGIN_FUNCTION_CLASS)
|
||||
else {
|
||||
val overriddenFunction = superTypes
|
||||
.mapNotNull { it.classOrNull?.owner }
|
||||
@@ -328,7 +325,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
|
||||
isDelegated = descriptor.isDelegated,
|
||||
isExternal = descriptor.isExternal,
|
||||
isExpect = descriptor.isExpect,
|
||||
isFakeOverride = memberOrigin == IrDeclarationOrigin.FAKE_OVERRIDE)
|
||||
isFakeOverride = true)
|
||||
}
|
||||
val property = symbolTable?.declareProperty(offset, offset, memberOrigin, descriptor, propertyFactory = propertyDeclare)
|
||||
?: propertyDeclare(IrPropertySymbolImpl(descriptor))
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ fun FunctionDescriptor.canObjCClassMethodBeCalledVirtually(overriddenDescriptor:
|
||||
overriddenDescriptor.isOverridable && this.kind.isReal && !this.isExternalObjCClassMethod()
|
||||
|
||||
internal fun IrFunction.canObjCClassMethodBeCalledVirtually(overridden: IrFunction) =
|
||||
overridden.isOverridable && this.origin != IrDeclarationOrigin.FAKE_OVERRIDE && !this.isExternalObjCClassMethod()
|
||||
overridden.isOverridable && !this.isFakeOverride && !this.isExternalObjCClassMethod()
|
||||
|
||||
fun ClassDescriptor.isKotlinObjCClass(): Boolean = this.isObjCClass() && !this.isExternalObjCClass()
|
||||
|
||||
|
||||
+6
-14
@@ -80,7 +80,7 @@ internal interface DescriptorToIrTranslationMixin {
|
||||
return fakeOverrides.map {
|
||||
when (it) {
|
||||
is PropertyDescriptor -> createProperty(it)
|
||||
is FunctionDescriptor -> createFunction(it, IrDeclarationOrigin.FAKE_OVERRIDE)
|
||||
is FunctionDescriptor -> createFunction(it)
|
||||
else -> error("Unexpected fake override descriptor: $it")
|
||||
}
|
||||
}
|
||||
@@ -109,19 +109,14 @@ internal interface DescriptorToIrTranslationMixin {
|
||||
}
|
||||
|
||||
fun createProperty(propertyDescriptor: PropertyDescriptor): IrProperty {
|
||||
val origin = if (propertyDescriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
} else {
|
||||
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
|
||||
}
|
||||
val irProperty = symbolTable.declareProperty(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, propertyDescriptor)
|
||||
val irProperty = symbolTable.declareProperty(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, propertyDescriptor)
|
||||
irProperty.getter = propertyDescriptor.getter?.let {
|
||||
val irGetter = createFunction(it, origin)
|
||||
val irGetter = createFunction(it)
|
||||
irGetter.correspondingPropertySymbol = irProperty.symbol
|
||||
irGetter
|
||||
}
|
||||
irProperty.setter = propertyDescriptor.setter?.let {
|
||||
val irSetter = createFunction(it, origin)
|
||||
val irSetter = createFunction(it)
|
||||
irSetter.correspondingPropertySymbol = irProperty.symbol
|
||||
irSetter
|
||||
}
|
||||
@@ -129,11 +124,8 @@ internal interface DescriptorToIrTranslationMixin {
|
||||
return irProperty
|
||||
}
|
||||
|
||||
fun createFunction(
|
||||
functionDescriptor: FunctionDescriptor,
|
||||
origin: IrDeclarationOrigin = IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
|
||||
): IrSimpleFunction {
|
||||
val irFunction = symbolTable.declareSimpleFunctionWithOverrides(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, functionDescriptor)
|
||||
fun createFunction(functionDescriptor: FunctionDescriptor): IrSimpleFunction {
|
||||
val irFunction = symbolTable.declareSimpleFunctionWithOverrides(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, functionDescriptor)
|
||||
symbolTable.withScope(irFunction) {
|
||||
irFunction.returnType = functionDescriptor.returnType!!.toIrType()
|
||||
irFunction.valueParameters += functionDescriptor.valueParameters.map {
|
||||
|
||||
Reference in New Issue
Block a user