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.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
|
||||||
interface IrProperty :
|
interface IrProperty :
|
||||||
IrDeclarationWithName,
|
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.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
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.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionCarrier
|
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.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
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.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.name.Name
|
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(
|
class IrFunctionImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -34,10 +90,8 @@ class IrFunctionImpl(
|
|||||||
override val isOperator: Boolean,
|
override val isOperator: Boolean,
|
||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
) :
|
) : IrFunctionCommonImpl(startOffset, endOffset, origin, name, visibility, modality, returnType, isInline,
|
||||||
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
|
isExternal, isTailrec, isSuspend, isOperator, isExpect, isFakeOverride) {
|
||||||
IrSimpleFunction,
|
|
||||||
FunctionCarrier {
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -75,36 +129,6 @@ class IrFunctionImpl(
|
|||||||
|
|
||||||
override val descriptor: FunctionDescriptor = symbol.descriptor
|
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 {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
@@ -112,3 +136,37 @@ class IrFunctionImpl(
|
|||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitSimpleFunction(this, data)
|
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
|
package org.jetbrains.kotlin.ir.declarations.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.carriers.PropertyCarrier
|
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.IrPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
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(
|
class IrPropertyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -43,9 +124,7 @@ class IrPropertyImpl(
|
|||||||
override val isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isExpect: Boolean = false,
|
override val isExpect: Boolean = false,
|
||||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
) : IrPropertyCommonImpl(startOffset, endOffset, origin, name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride) {
|
||||||
IrProperty,
|
|
||||||
PropertyCarrier {
|
|
||||||
|
|
||||||
@Deprecated(message = "Don't use descriptor-based API for IrProperty", level = DeprecationLevel.WARNING)
|
@Deprecated(message = "Don't use descriptor-based API for IrProperty", level = DeprecationLevel.WARNING)
|
||||||
constructor(
|
constructor(
|
||||||
@@ -135,63 +214,37 @@ class IrPropertyImpl(
|
|||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val descriptor: PropertyDescriptor = symbol.descriptor
|
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?
|
override val symbol: IrPropertySymbol
|
||||||
get() = getCarrier().backingFieldField
|
get() = _symbol ?: error("$this has not acquired a symbol yet")
|
||||||
set(v) {
|
|
||||||
if (backingField !== v) {
|
|
||||||
setCarrier().backingFieldField = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override var getterField: IrSimpleFunction? = null
|
override val descriptor get() =
|
||||||
|
_symbol?.descriptor ?: WrappedPropertyDescriptor()
|
||||||
|
|
||||||
override var getter: IrSimpleFunction?
|
fun acquireSymbol(symbol: IrPropertySymbol) {
|
||||||
get() = getCarrier().getterField
|
assert(_symbol == null) { "$this already has symbol _symbol" }
|
||||||
set(v) {
|
_symbol = symbol
|
||||||
if (getter !== v) {
|
symbol.bind(this)
|
||||||
setCarrier().getterField = v
|
(symbol.descriptor as? WrappedPropertyDescriptor)?.bind(this)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user