Introduced IrFakeOverrideFunctionImpl and IrFakeOverridePropertyImpl
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.declarations
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
|
||||
interface IrProperty :
|
||||
IrDeclarationWithName,
|
||||
|
||||
+93
-35
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionCarrier
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||
@@ -18,6 +18,62 @@ import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
abstract class IrFunctionCommonImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
override val modality: Modality,
|
||||
returnType: IrType,
|
||||
isInline: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean,
|
||||
override val isOperator: Boolean,
|
||||
isExpect: Boolean,
|
||||
override val isFakeOverride: Boolean
|
||||
) :
|
||||
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
|
||||
IrSimpleFunction,
|
||||
FunctionCarrier {
|
||||
|
||||
abstract override val descriptor: FunctionDescriptor
|
||||
|
||||
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol> = emptyList()
|
||||
|
||||
override var overriddenSymbols: List<IrSimpleFunctionSymbol>
|
||||
get() = getCarrier().overriddenSymbolsField
|
||||
set(v) {
|
||||
if (overriddenSymbols !== v) {
|
||||
setCarrier().overriddenSymbolsField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var attributeOwnerIdField: IrAttributeContainer = this
|
||||
|
||||
override var attributeOwnerId: IrAttributeContainer
|
||||
get() = getCarrier().attributeOwnerIdField
|
||||
set(v) {
|
||||
if (attributeOwnerId !== v) {
|
||||
setCarrier().attributeOwnerIdField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var correspondingPropertySymbolField: IrPropertySymbol? = null
|
||||
|
||||
override var correspondingPropertySymbol: IrPropertySymbol?
|
||||
get() = getCarrier().correspondingPropertySymbolField
|
||||
set(v) {
|
||||
if (correspondingPropertySymbol !== v) {
|
||||
setCarrier().correspondingPropertySymbolField = v
|
||||
}
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitSimpleFunction(this, data)
|
||||
}
|
||||
|
||||
class IrFunctionImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
@@ -34,10 +90,8 @@ class IrFunctionImpl(
|
||||
override val isOperator: Boolean,
|
||||
isExpect: Boolean,
|
||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
) :
|
||||
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
|
||||
IrSimpleFunction,
|
||||
FunctionCarrier {
|
||||
) : IrFunctionCommonImpl(startOffset, endOffset, origin, name, visibility, modality, returnType, isInline,
|
||||
isExternal, isTailrec, isSuspend, isOperator, isExpect, isFakeOverride) {
|
||||
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
@@ -75,36 +129,6 @@ class IrFunctionImpl(
|
||||
|
||||
override val descriptor: FunctionDescriptor = symbol.descriptor
|
||||
|
||||
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol> = emptyList()
|
||||
|
||||
override var overriddenSymbols: List<IrSimpleFunctionSymbol>
|
||||
get() = getCarrier().overriddenSymbolsField
|
||||
set(v) {
|
||||
if (overriddenSymbols !== v) {
|
||||
setCarrier().overriddenSymbolsField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var attributeOwnerIdField: IrAttributeContainer = this
|
||||
|
||||
override var attributeOwnerId: IrAttributeContainer
|
||||
get() = getCarrier().attributeOwnerIdField
|
||||
set(v) {
|
||||
if (attributeOwnerId !== v) {
|
||||
setCarrier().attributeOwnerIdField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var correspondingPropertySymbolField: IrPropertySymbol? = null
|
||||
|
||||
override var correspondingPropertySymbol: IrPropertySymbol?
|
||||
get() = getCarrier().correspondingPropertySymbolField
|
||||
set(v) {
|
||||
if (correspondingPropertySymbol !== v) {
|
||||
setCarrier().correspondingPropertySymbolField = v
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
@@ -112,3 +136,37 @@ class IrFunctionImpl(
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitSimpleFunction(this, data)
|
||||
}
|
||||
|
||||
class IrFakeOverrideFunctionImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
name: Name,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality,
|
||||
returnType: IrType,
|
||||
isInline: Boolean,
|
||||
isExternal: Boolean,
|
||||
isTailrec: Boolean,
|
||||
isSuspend: Boolean,
|
||||
isOperator: Boolean,
|
||||
isExpect: Boolean
|
||||
) : IrFunctionCommonImpl(startOffset, endOffset, origin, name, visibility, modality, returnType, isInline,
|
||||
isExternal, isTailrec, isSuspend, isOperator, isExpect,
|
||||
isFakeOverride = true)
|
||||
{
|
||||
private var _symbol: IrSimpleFunctionSymbol? = null
|
||||
|
||||
override val symbol: IrSimpleFunctionSymbol
|
||||
get() = _symbol ?: error("$this has not acquired a symbol yet")
|
||||
|
||||
override val descriptor get() =
|
||||
_symbol?.descriptor ?: WrappedSimpleFunctionDescriptor()
|
||||
|
||||
fun acquireSymbol(symbol: IrSimpleFunctionSymbol) {
|
||||
assert(_symbol == null) { "$this already has symbol _symbol" }
|
||||
_symbol = symbol
|
||||
symbol.bind(this)
|
||||
(symbol.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(this)
|
||||
}
|
||||
}
|
||||
|
||||
+109
-56
@@ -16,18 +16,99 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.carriers.PropertyCarrier
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
|
||||
abstract class IrPropertyCommonImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
override val name: Name,
|
||||
override val visibility: Visibility,
|
||||
override val modality: Modality,
|
||||
override val isVar: Boolean,
|
||||
override val isConst: Boolean,
|
||||
override val isLateinit: Boolean,
|
||||
override val isDelegated: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
||||
IrProperty,
|
||||
PropertyCarrier {
|
||||
|
||||
abstract override val descriptor: PropertyDescriptor
|
||||
|
||||
override var backingFieldField: IrField? = null
|
||||
|
||||
override var backingField: IrField?
|
||||
get() = getCarrier().backingFieldField
|
||||
set(v) {
|
||||
if (backingField !== v) {
|
||||
setCarrier().backingFieldField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var getterField: IrSimpleFunction? = null
|
||||
|
||||
override var getter: IrSimpleFunction?
|
||||
get() = getCarrier().getterField
|
||||
set(v) {
|
||||
if (getter !== v) {
|
||||
setCarrier().getterField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var setterField: IrSimpleFunction? = null
|
||||
|
||||
override var setter: IrSimpleFunction?
|
||||
get() = getCarrier().setterField
|
||||
set(v) {
|
||||
if (setter !== v) {
|
||||
setCarrier().setterField = v
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitProperty(this, data)
|
||||
}
|
||||
|
||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||
backingField?.accept(visitor, data)
|
||||
getter?.accept(visitor, data)
|
||||
setter?.accept(visitor, data)
|
||||
}
|
||||
|
||||
override var metadataField: MetadataSource? = null
|
||||
|
||||
override var metadata: MetadataSource?
|
||||
get() = getCarrier().metadataField
|
||||
set(v) {
|
||||
if (metadata !== v) {
|
||||
setCarrier().metadataField = v
|
||||
}
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||
backingField = backingField?.transform(transformer, data) as? IrField
|
||||
getter = getter?.run { transform(transformer, data) as IrSimpleFunction }
|
||||
setter = setter?.run { transform(transformer, data) as IrSimpleFunction }
|
||||
}
|
||||
}
|
||||
|
||||
class IrPropertyImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
@@ -43,9 +124,7 @@ class IrPropertyImpl(
|
||||
override val isExternal: Boolean,
|
||||
override val isExpect: Boolean = false,
|
||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
||||
IrProperty,
|
||||
PropertyCarrier {
|
||||
) : IrPropertyCommonImpl(startOffset, endOffset, origin, name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride) {
|
||||
|
||||
@Deprecated(message = "Don't use descriptor-based API for IrProperty", level = DeprecationLevel.WARNING)
|
||||
constructor(
|
||||
@@ -135,63 +214,37 @@ class IrPropertyImpl(
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override val descriptor: PropertyDescriptor = symbol.descriptor
|
||||
}
|
||||
|
||||
override var backingFieldField: IrField? = null
|
||||
class IrFakeOverridePropertyImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
name: Name,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality,
|
||||
isVar: Boolean,
|
||||
isConst: Boolean,
|
||||
isLateinit: Boolean,
|
||||
isDelegated: Boolean,
|
||||
isExternal: Boolean,
|
||||
isExpect: Boolean,
|
||||
) : IrPropertyCommonImpl(startOffset, endOffset, origin, name, visibility, modality, isVar, isConst, isLateinit,
|
||||
isDelegated, isExternal, isExpect, isFakeOverride = true)
|
||||
{
|
||||
private var _symbol: IrPropertySymbol? = null
|
||||
|
||||
override var backingField: IrField?
|
||||
get() = getCarrier().backingFieldField
|
||||
set(v) {
|
||||
if (backingField !== v) {
|
||||
setCarrier().backingFieldField = v
|
||||
}
|
||||
}
|
||||
override val symbol: IrPropertySymbol
|
||||
get() = _symbol ?: error("$this has not acquired a symbol yet")
|
||||
|
||||
override var getterField: IrSimpleFunction? = null
|
||||
override val descriptor get() =
|
||||
_symbol?.descriptor ?: WrappedPropertyDescriptor()
|
||||
|
||||
override var getter: IrSimpleFunction?
|
||||
get() = getCarrier().getterField
|
||||
set(v) {
|
||||
if (getter !== v) {
|
||||
setCarrier().getterField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var setterField: IrSimpleFunction? = null
|
||||
|
||||
override var setter: IrSimpleFunction?
|
||||
get() = getCarrier().setterField
|
||||
set(v) {
|
||||
if (setter !== v) {
|
||||
setCarrier().setterField = v
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitProperty(this, data)
|
||||
}
|
||||
|
||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||
backingField?.accept(visitor, data)
|
||||
getter?.accept(visitor, data)
|
||||
setter?.accept(visitor, data)
|
||||
}
|
||||
|
||||
override var metadataField: MetadataSource? = null
|
||||
|
||||
override var metadata: MetadataSource?
|
||||
get() = getCarrier().metadataField
|
||||
set(v) {
|
||||
if (metadata !== v) {
|
||||
setCarrier().metadataField = v
|
||||
}
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||
backingField = backingField?.transform(transformer, data) as? IrField
|
||||
getter = getter?.run { transform(transformer, data) as IrSimpleFunction }
|
||||
setter = setter?.run { transform(transformer, data) as IrSimpleFunction }
|
||||
fun acquireSymbol(symbol: IrPropertySymbol) {
|
||||
assert(_symbol == null) { "$this already has symbol _symbol" }
|
||||
_symbol = symbol
|
||||
symbol.bind(this)
|
||||
(symbol.descriptor as? WrappedPropertyDescriptor)?.bind(this)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user