Persistent IR implementation
This commit is contained in:
committed by
Anton Bannykh
parent
4c4b0ef013
commit
f437da8ee5
+1
-1
@@ -173,7 +173,7 @@ class MemoizedInlineClassReplacements {
|
|||||||
val parameterMap = mutableMapOf<IrValueParameterSymbol, IrValueParameter>()
|
val parameterMap = mutableMapOf<IrValueParameterSymbol, IrValueParameter>()
|
||||||
val replacement = buildReplacement(function) {
|
val replacement = buildReplacement(function) {
|
||||||
// Generate metadata for the replacement function instead of the original.
|
// Generate metadata for the replacement function instead of the original.
|
||||||
if (function is IrFunctionBase) {
|
if (function is IrFunctionBase<*>) {
|
||||||
metadata = function.metadata
|
metadata = function.metadata
|
||||||
function.metadata = null
|
function.metadata = null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
|
||||||
|
// TODO threadlocal
|
||||||
|
// TODO make a IrDeclarationBase field? (requires IR factory)
|
||||||
|
var stageController: StageController = object : StageController {}
|
||||||
|
|
||||||
|
interface StageController {
|
||||||
|
val currentStage: Int get() = 0
|
||||||
|
|
||||||
|
fun lazyLower(declaration: IrDeclaration) {}
|
||||||
|
|
||||||
|
fun lazyLower(body: IrBody) {}
|
||||||
|
|
||||||
|
fun <T> withStage(stage: Int, fn: () -> T): T = fn()
|
||||||
|
|
||||||
|
val bodiesEnabled: Boolean get() = true
|
||||||
|
|
||||||
|
fun <T> bodyLowering(fn: () -> T): T = fn()
|
||||||
|
|
||||||
|
fun canModify(element: IrElement): Boolean = true
|
||||||
|
|
||||||
|
fun canAccessDeclarationsOf(declaration: IrClass): Boolean = true
|
||||||
|
}
|
||||||
+16
-3
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
|
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.AnonymousInitializerCarrier
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
@@ -30,8 +31,9 @@ class IrAnonymousInitializerImpl(
|
|||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrAnonymousInitializerSymbol,
|
override val symbol: IrAnonymousInitializerSymbol,
|
||||||
override val isStatic: Boolean = false
|
override val isStatic: Boolean = false
|
||||||
) : IrDeclarationBase(startOffset, endOffset, origin),
|
) : IrDeclarationBase<AnonymousInitializerCarrier>(startOffset, endOffset, origin),
|
||||||
IrAnonymousInitializer {
|
IrAnonymousInitializer,
|
||||||
|
AnonymousInitializerCarrier {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
@@ -39,7 +41,18 @@ class IrAnonymousInitializerImpl(
|
|||||||
|
|
||||||
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
override lateinit var body: IrBlockBody
|
override var bodyField: IrBlockBody? = null
|
||||||
|
|
||||||
|
override var body: IrBlockBody
|
||||||
|
get() = getCarrier().bodyField!!
|
||||||
|
set(v) {
|
||||||
|
if (getCarrier().bodyField !== v) {
|
||||||
|
if (v is IrBodyBase<*>) {
|
||||||
|
v.container = this
|
||||||
|
}
|
||||||
|
setCarrier().bodyField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitAnonymousInitializer(this, data)
|
return visitor.visitAnonymousInitializer(this, data)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
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.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ClassCarrier
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.transform
|
import org.jetbrains.kotlin.ir.util.transform
|
||||||
@@ -29,6 +30,7 @@ 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
|
||||||
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
class IrClassImpl(
|
class IrClassImpl(
|
||||||
@@ -38,8 +40,8 @@ class IrClassImpl(
|
|||||||
override val symbol: IrClassSymbol,
|
override val symbol: IrClassSymbol,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val kind: ClassKind,
|
override val kind: ClassKind,
|
||||||
override var visibility: Visibility,
|
visibility: Visibility,
|
||||||
override var modality: Modality,
|
modality: Modality,
|
||||||
override val isCompanion: Boolean,
|
override val isCompanion: Boolean,
|
||||||
override val isInner: Boolean,
|
override val isInner: Boolean,
|
||||||
override val isData: Boolean,
|
override val isData: Boolean,
|
||||||
@@ -48,8 +50,9 @@ class IrClassImpl(
|
|||||||
override val isExpect: Boolean,
|
override val isExpect: Boolean,
|
||||||
override val isFun: Boolean
|
override val isFun: Boolean
|
||||||
) :
|
) :
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase<ClassCarrier>(startOffset, endOffset, origin),
|
||||||
IrClass {
|
IrClass,
|
||||||
|
ClassCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -78,17 +81,91 @@ class IrClassImpl(
|
|||||||
|
|
||||||
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
override var thisReceiver: IrValueParameter? = null
|
override var visibilityField: Visibility = visibility
|
||||||
|
|
||||||
|
override var visibility: Visibility
|
||||||
|
get() = getCarrier().visibilityField
|
||||||
|
set(v) {
|
||||||
|
if (visibility !== v) {
|
||||||
|
setCarrier().visibilityField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var thisReceiverField: IrValueParameter? = null
|
||||||
|
|
||||||
|
override var thisReceiver: IrValueParameter?
|
||||||
|
get() = getCarrier().thisReceiverField
|
||||||
|
set(v) {
|
||||||
|
if (thisReceiver !== v) {
|
||||||
|
setCarrier().thisReceiverField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var initialDeclarations: MutableList<IrDeclaration>? = null
|
||||||
|
|
||||||
override val declarations: MutableList<IrDeclaration> = ArrayList()
|
override val declarations: MutableList<IrDeclaration> = ArrayList()
|
||||||
|
get() {
|
||||||
|
if (createdOn < stageController.currentStage && initialDeclarations == null) {
|
||||||
|
initialDeclarations = Collections.unmodifiableList(ArrayList(field))
|
||||||
|
}
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> = emptyList()
|
return if (stageController.canAccessDeclarationsOf(this)) {
|
||||||
|
ensureLowered()
|
||||||
|
field
|
||||||
|
} else {
|
||||||
|
initialDeclarations ?: field
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var superTypes: List<IrType> = emptyList()
|
override var typeParametersField: List<IrTypeParameter> = emptyList()
|
||||||
|
|
||||||
override var metadata: MetadataSource? = null
|
override var typeParameters: List<IrTypeParameter>
|
||||||
|
get() = getCarrier().typeParametersField
|
||||||
|
set(v) {
|
||||||
|
if (typeParameters !== v) {
|
||||||
|
setCarrier().typeParametersField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var attributeOwnerId: IrAttributeContainer = this
|
override var superTypesField: List<IrType> = emptyList()
|
||||||
|
|
||||||
|
override var superTypes: List<IrType>
|
||||||
|
get() = getCarrier().superTypesField
|
||||||
|
set(v) {
|
||||||
|
if (superTypes !== v) {
|
||||||
|
setCarrier().superTypesField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var metadataField: MetadataSource? = null
|
||||||
|
|
||||||
|
override var metadata: MetadataSource?
|
||||||
|
get() = getCarrier().metadataField
|
||||||
|
set(v) {
|
||||||
|
if (metadata !== v) {
|
||||||
|
setCarrier().metadataField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var modalityField: Modality = modality
|
||||||
|
|
||||||
|
override var modality: Modality
|
||||||
|
get() = getCarrier().modalityField
|
||||||
|
set(v) {
|
||||||
|
if (modality !== v) {
|
||||||
|
setCarrier().modalityField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var attributeOwnerIdField: IrAttributeContainer = this
|
||||||
|
|
||||||
|
override var attributeOwnerId: IrAttributeContainer
|
||||||
|
get() = getCarrier().attributeOwnerIdField
|
||||||
|
set(v) {
|
||||||
|
if (attributeOwnerId !== v) {
|
||||||
|
setCarrier().attributeOwnerIdField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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.visitClass(this, data)
|
visitor.visitClass(this, data)
|
||||||
|
|||||||
+5
-4
@@ -18,8 +18,8 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ConstructorCarrier
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -40,13 +40,14 @@ class IrConstructorImpl(
|
|||||||
override val isPrimary: Boolean,
|
override val isPrimary: Boolean,
|
||||||
isExpect: Boolean
|
isExpect: Boolean
|
||||||
) :
|
) :
|
||||||
IrFunctionBase(
|
IrFunctionBase<ConstructorCarrier>(
|
||||||
startOffset, endOffset, origin, name,
|
startOffset, endOffset, origin, name,
|
||||||
visibility,
|
visibility,
|
||||||
isInline, isExternal, isExpect,
|
isInline, isExternal, isExpect,
|
||||||
returnType
|
returnType
|
||||||
),
|
),
|
||||||
IrConstructor {
|
IrConstructor,
|
||||||
|
ConstructorCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
|
|||||||
+157
-15
@@ -17,30 +17,172 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.impl
|
package org.jetbrains.kotlin.ir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
import org.jetbrains.kotlin.ir.IrElementBase
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.BodyCarrier
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.Carrier
|
||||||
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.DeclarationCarrier
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
abstract class IrDeclarationBase(
|
abstract class IrDeclarationBase<T : DeclarationCarrier<T>>(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
override var origin: IrDeclarationOrigin
|
origin: IrDeclarationOrigin
|
||||||
) : IrElementBase(startOffset, endOffset),
|
) : IrPersistingElementBase<T>(startOffset, endOffset),
|
||||||
IrDeclaration {
|
IrDeclaration,
|
||||||
|
DeclarationCarrier<T> {
|
||||||
|
|
||||||
|
override var parentField: IrDeclarationParent? = null
|
||||||
|
|
||||||
private var _parent: IrDeclarationParent? = null
|
|
||||||
override var parent: IrDeclarationParent
|
override var parent: IrDeclarationParent
|
||||||
get() = _parent
|
get() = getCarrier().parentField ?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
|
||||||
?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
|
set(p) {
|
||||||
set(v) {
|
if (getCarrier().parentField !== p) {
|
||||||
_parent = v
|
setCarrier().parentField = p
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override var annotations: List<IrConstructorCall> = emptyList()
|
override var originField: IrDeclarationOrigin = origin
|
||||||
|
|
||||||
|
override var origin: IrDeclarationOrigin
|
||||||
|
get() = getCarrier().originField
|
||||||
|
set(p) {
|
||||||
|
if (getCarrier().originField !== p) {
|
||||||
|
setCarrier().originField = p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var removedOn: Int = Int.MAX_VALUE
|
||||||
|
|
||||||
|
override var annotationsField: List<IrConstructorCall> = emptyList()
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall>
|
||||||
|
get() = getCarrier().annotationsField
|
||||||
|
set(v) {
|
||||||
|
if (getCarrier().annotationsField !== v) {
|
||||||
|
setCarrier().annotationsField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val metadata: MetadataSource?
|
override val metadata: MetadataSource?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
override fun ensureLowered() {
|
||||||
|
if (stageController.currentStage > loweredUpTo) {
|
||||||
|
stageController.lazyLower(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class IrPersistingElementBase<T : Carrier<T>>(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int
|
||||||
|
) : IrElementBase(startOffset, endOffset),
|
||||||
|
Carrier<T> {
|
||||||
|
|
||||||
|
override var lastModified: Int = stageController.currentStage
|
||||||
|
|
||||||
|
var loweredUpTo = stageController.currentStage
|
||||||
|
|
||||||
|
private var values: Array<Any?>? = null
|
||||||
|
|
||||||
|
val createdOn: Int = stageController.currentStage
|
||||||
|
// get() = values?.let { (it[0] as T).lastModified } ?: lastModified
|
||||||
|
|
||||||
|
abstract fun ensureLowered()
|
||||||
|
|
||||||
|
protected fun getCarrier(): T {
|
||||||
|
stageController.currentStage.let { stage ->
|
||||||
|
ensureLowered()
|
||||||
|
|
||||||
|
if (stage >= lastModified) return this as T
|
||||||
|
|
||||||
|
if (stage < createdOn) error("Access before creation")
|
||||||
|
|
||||||
|
val v = values
|
||||||
|
?: error("How come?")
|
||||||
|
|
||||||
|
var l = -1
|
||||||
|
var r = v.size
|
||||||
|
while (r - l > 1) {
|
||||||
|
val m = (l + r) / 2
|
||||||
|
if ((v[m] as T).lastModified <= stage) {
|
||||||
|
l = m
|
||||||
|
} else {
|
||||||
|
r = m
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (l < 0) {
|
||||||
|
error("access before creation")
|
||||||
|
}
|
||||||
|
|
||||||
|
return v[l] as T
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun setCarrier(): T {
|
||||||
|
val stage = stageController.currentStage
|
||||||
|
|
||||||
|
ensureLowered()
|
||||||
|
|
||||||
|
if (!stageController.canModify(this)) {
|
||||||
|
error("Cannot modify this element!")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loweredUpTo > stage) {
|
||||||
|
error("retrospective modification")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stage == lastModified) {
|
||||||
|
return this as T
|
||||||
|
} else {
|
||||||
|
val newValues = values?.let { oldValues ->
|
||||||
|
oldValues.copyOf(oldValues.size + 1)
|
||||||
|
} ?: arrayOfNulls<Any?>(1)
|
||||||
|
|
||||||
|
newValues[newValues.size - 1] = this.clone()
|
||||||
|
|
||||||
|
values = newValues
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lastModified = stage
|
||||||
|
|
||||||
|
return this as T
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class IrBodyBase<B : IrBodyBase<B>>(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
private var initializer: (B.() -> Unit)?
|
||||||
|
) : IrPersistingElementBase<BodyCarrier>(startOffset, endOffset), IrBody, BodyCarrier {
|
||||||
|
override var containerField: IrDeclaration? = null
|
||||||
|
|
||||||
|
var container: IrDeclaration
|
||||||
|
get() = getCarrier().containerField!!
|
||||||
|
set(p) {
|
||||||
|
if (getCarrier().containerField !== p) {
|
||||||
|
setCarrier().containerField = p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun <T> checkEnabled(fn: () -> T): T {
|
||||||
|
if (!stageController.bodiesEnabled) error("Bodies disabled!")
|
||||||
|
ensureLowered()
|
||||||
|
return fn()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun ensureLowered() {
|
||||||
|
initializer?.let { initFn ->
|
||||||
|
initializer = null
|
||||||
|
stageController.withStage(createdOn) {
|
||||||
|
stageController.bodyLowering {
|
||||||
|
initFn.invoke(this as B)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (loweredUpTo + 1 < stageController.currentStage) {
|
||||||
|
stageController.lazyLower(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+28
-5
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
|
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.EnumEntryCarrier
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
||||||
@@ -33,8 +34,9 @@ class IrEnumEntryImpl(
|
|||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrEnumEntrySymbol,
|
override val symbol: IrEnumEntrySymbol,
|
||||||
override val name: Name
|
override val name: Name
|
||||||
) : IrDeclarationBase(startOffset, endOffset, origin),
|
) : IrDeclarationBase<EnumEntryCarrier>(startOffset, endOffset, origin),
|
||||||
IrEnumEntry {
|
IrEnumEntry,
|
||||||
|
EnumEntryCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -49,8 +51,29 @@ class IrEnumEntryImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
||||||
override var correspondingClass: IrClass? = null
|
|
||||||
override var initializerExpression: IrExpressionBody? = null
|
override var correspondingClassField: IrClass? = null
|
||||||
|
|
||||||
|
override var correspondingClass: IrClass?
|
||||||
|
get() = getCarrier().correspondingClassField
|
||||||
|
set(v) {
|
||||||
|
if (correspondingClass !== v) {
|
||||||
|
setCarrier().correspondingClassField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var initializerExpressionField: IrExpressionBody? = null
|
||||||
|
|
||||||
|
override var initializerExpression: IrExpressionBody?
|
||||||
|
get() = getCarrier().initializerExpressionField
|
||||||
|
set(v) {
|
||||||
|
if (initializerExpression !== v) {
|
||||||
|
if (v is IrBodyBase<*>) {
|
||||||
|
v.container = this
|
||||||
|
}
|
||||||
|
setCarrier().initializerExpressionField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitEnumEntry(this, data)
|
return visitor.visitEnumEntry(this, data)
|
||||||
@@ -65,4 +88,4 @@ class IrEnumEntryImpl(
|
|||||||
initializerExpression = initializerExpression?.transform(transformer, data)
|
initializerExpression = initializerExpression?.transform(transformer, data)
|
||||||
correspondingClass = correspondingClass?.transform(transformer, data) as? IrClass
|
correspondingClass = correspondingClass?.transform(transformer, data) as? IrClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-1
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ErrorCarrier
|
||||||
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
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ class IrErrorDeclarationImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
override val descriptor: DeclarationDescriptor
|
override val descriptor: DeclarationDescriptor
|
||||||
) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration {
|
) : IrDeclarationBase<ErrorCarrier>(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration, ErrorCarrier {
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitErrorDeclaration(this, data)
|
return visitor.visitErrorDeclaration(this, data)
|
||||||
|
|||||||
@@ -18,10 +18,8 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
|
|
||||||
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.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.FieldCarrier
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
@@ -45,8 +43,9 @@ class IrFieldImpl(
|
|||||||
override val isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isStatic: Boolean,
|
override val isStatic: Boolean,
|
||||||
override val isFakeOverride: Boolean
|
override val isFakeOverride: Boolean
|
||||||
) : IrDeclarationBase(startOffset, endOffset, origin),
|
) : IrDeclarationBase<FieldCarrier>(startOffset, endOffset, origin),
|
||||||
IrField {
|
IrField,
|
||||||
|
FieldCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -80,13 +79,48 @@ class IrFieldImpl(
|
|||||||
|
|
||||||
override val descriptor: PropertyDescriptor = symbol.descriptor
|
override val descriptor: PropertyDescriptor = symbol.descriptor
|
||||||
|
|
||||||
override var initializer: IrExpressionBody? = null
|
override var initializerField: IrExpressionBody? = null
|
||||||
|
|
||||||
override var correspondingPropertySymbol: IrPropertySymbol? = null
|
override var initializer: IrExpressionBody?
|
||||||
|
get() = getCarrier().initializerField
|
||||||
|
set(v) {
|
||||||
|
if (initializer !== v) {
|
||||||
|
if (v is IrBodyBase<*>) {
|
||||||
|
v.container = this
|
||||||
|
}
|
||||||
|
setCarrier().initializerField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var overriddenSymbols: List<IrFieldSymbol> = emptyList()
|
override var correspondingPropertySymbolField: IrPropertySymbol? = null
|
||||||
|
|
||||||
override var metadata: MetadataSource.Property? = null
|
override var correspondingPropertySymbol: IrPropertySymbol?
|
||||||
|
get() = getCarrier().correspondingPropertySymbolField
|
||||||
|
set(v) {
|
||||||
|
if (correspondingPropertySymbol !== v) {
|
||||||
|
setCarrier().correspondingPropertySymbolField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var overridenSymbolsField: List<IrFieldSymbol> = emptyList()
|
||||||
|
|
||||||
|
override var overriddenSymbols: List<IrFieldSymbol>
|
||||||
|
get() = getCarrier().overridenSymbolsField
|
||||||
|
set(v) {
|
||||||
|
if (overriddenSymbols !== v) {
|
||||||
|
setCarrier().overridenSymbolsField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var metadataField: MetadataSource.Property? = null
|
||||||
|
|
||||||
|
override var metadata: MetadataSource.Property?
|
||||||
|
get() = getCarrier().metadataField
|
||||||
|
set(v) {
|
||||||
|
if (metadata !== v) {
|
||||||
|
setCarrier().metadataField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitField(this, data)
|
return visitor.visitField(this, data)
|
||||||
|
|||||||
@@ -19,9 +19,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
import org.jetbrains.kotlin.ir.IrElementBase
|
||||||
import org.jetbrains.kotlin.ir.SourceManager
|
import org.jetbrains.kotlin.ir.SourceManager
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
|
||||||
@@ -55,7 +53,7 @@ class IrFileImpl(
|
|||||||
|
|
||||||
override val declarations: MutableList<IrDeclaration> = ArrayList()
|
override val declarations: MutableList<IrDeclaration> = ArrayList()
|
||||||
|
|
||||||
override var annotations: List<IrConstructorCall> = emptyList()
|
override var annotations: List<IrConstructorCall> = ArrayList()
|
||||||
|
|
||||||
override var metadata: MetadataSource.File? = null
|
override var metadata: MetadataSource.File? = null
|
||||||
|
|
||||||
|
|||||||
+91
-15
@@ -18,44 +18,120 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
|
|
||||||
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.FunctionBaseCarrier
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||||
import org.jetbrains.kotlin.ir.util.mapOptimized
|
import org.jetbrains.kotlin.ir.util.mapOptimized
|
||||||
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
|
||||||
|
|
||||||
abstract class IrFunctionBase(
|
abstract class IrFunctionBase<T : FunctionBaseCarrier<T>>(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override var visibility: Visibility,
|
visibility: Visibility,
|
||||||
override val isInline: Boolean,
|
override val isInline: Boolean,
|
||||||
override val isExternal: Boolean,
|
override val isExternal: Boolean,
|
||||||
override val isExpect: Boolean,
|
override val isExpect: Boolean,
|
||||||
returnType: IrType
|
returnType: IrType
|
||||||
) :
|
) :
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase<T>(startOffset, endOffset, origin),
|
||||||
IrFunction {
|
IrFunction,
|
||||||
|
FunctionBaseCarrier<T> {
|
||||||
|
|
||||||
|
override var returnTypeFieldField: IrType = returnType
|
||||||
|
|
||||||
|
private var returnTypeField: IrType
|
||||||
|
get() = getCarrier().returnTypeFieldField
|
||||||
|
set(v) {
|
||||||
|
if (returnTypeField !== v) {
|
||||||
|
setCarrier().returnTypeFieldField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
final override var returnType: IrType = returnType
|
final override var returnType: IrType
|
||||||
get() = if (field === org.jetbrains.kotlin.ir.types.impl.IrUninitializedType) {
|
get() = returnTypeField.let {
|
||||||
error("Return type is not initialized")
|
if (it !== IrUninitializedType) it else error("Return type is not initialized")
|
||||||
} else {
|
}
|
||||||
field
|
set(c) {
|
||||||
|
returnTypeField = c
|
||||||
}
|
}
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> = emptyList()
|
override var typeParametersField: List<IrTypeParameter> = emptyList()
|
||||||
|
|
||||||
override var dispatchReceiverParameter: IrValueParameter? = null
|
override var typeParameters: List<IrTypeParameter>
|
||||||
override var extensionReceiverParameter: IrValueParameter? = null
|
get() = getCarrier().typeParametersField
|
||||||
override var valueParameters: List<IrValueParameter> = emptyList()
|
set(v) {
|
||||||
|
if (typeParameters !== v) {
|
||||||
|
setCarrier().typeParametersField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final override var body: IrBody? = null
|
override var dispatchReceiverParameterField: IrValueParameter? = null
|
||||||
|
|
||||||
override var metadata: MetadataSource? = null
|
override var dispatchReceiverParameter: IrValueParameter?
|
||||||
|
get() = getCarrier().dispatchReceiverParameterField
|
||||||
|
set(v) {
|
||||||
|
if (dispatchReceiverParameter !== v) {
|
||||||
|
setCarrier().dispatchReceiverParameterField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var extensionReceiverParameterField: IrValueParameter? = null
|
||||||
|
|
||||||
|
override var extensionReceiverParameter: IrValueParameter?
|
||||||
|
get() = getCarrier().extensionReceiverParameterField
|
||||||
|
set(v) {
|
||||||
|
if (extensionReceiverParameter !== v) {
|
||||||
|
setCarrier().extensionReceiverParameterField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var valueParametersField: List<IrValueParameter> = emptyList()
|
||||||
|
|
||||||
|
override var valueParameters: List<IrValueParameter>
|
||||||
|
get() = getCarrier().valueParametersField
|
||||||
|
set(v) {
|
||||||
|
if (valueParameters !== v) {
|
||||||
|
setCarrier().valueParametersField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var bodyField: IrBody? = null
|
||||||
|
|
||||||
|
final override var body: IrBody?
|
||||||
|
get() = getCarrier().bodyField
|
||||||
|
set(v) {
|
||||||
|
if (body !== v) {
|
||||||
|
if (v is IrBodyBase<*>) {
|
||||||
|
v.container = this
|
||||||
|
}
|
||||||
|
setCarrier().bodyField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var metadataField: MetadataSource? = null
|
||||||
|
|
||||||
|
override var metadata: MetadataSource?
|
||||||
|
get() = getCarrier().metadataField
|
||||||
|
set(v) {
|
||||||
|
if (metadata !== v) {
|
||||||
|
setCarrier().metadataField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var visibilityField: Visibility = visibility
|
||||||
|
|
||||||
|
override var visibility: Visibility
|
||||||
|
get() = getCarrier().visibilityField
|
||||||
|
set(v) {
|
||||||
|
if (visibility !== v) {
|
||||||
|
setCarrier().visibilityField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
typeParameters.forEach { it.accept(visitor, data) }
|
typeParameters.forEach { it.accept(visitor, data) }
|
||||||
|
|||||||
+33
-7
@@ -9,8 +9,8 @@ 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.IrAttributeContainer
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.FunctionCarrier
|
||||||
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
|
||||||
@@ -35,8 +35,9 @@ class IrFunctionImpl(
|
|||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
override val isFakeOverride: Boolean
|
override val isFakeOverride: Boolean
|
||||||
) :
|
) :
|
||||||
IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
|
IrFunctionBase<FunctionCarrier>(startOffset, endOffset, origin, name, visibility, isInline, isExternal, isExpect, returnType),
|
||||||
IrSimpleFunction {
|
IrSimpleFunction,
|
||||||
|
FunctionCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -63,10 +64,35 @@ class IrFunctionImpl(
|
|||||||
|
|
||||||
override val descriptor: FunctionDescriptor = symbol.descriptor
|
override val descriptor: FunctionDescriptor = symbol.descriptor
|
||||||
|
|
||||||
override var overriddenSymbols: List<IrSimpleFunctionSymbol> = emptyList()
|
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol> = emptyList()
|
||||||
override var attributeOwnerId: IrAttributeContainer = this
|
|
||||||
|
|
||||||
override var correspondingPropertySymbol: IrPropertySymbol? = null
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Used by kotlin-native in InteropLowering.kt and IrUtils2.kt
|
// Used by kotlin-native in InteropLowering.kt and IrUtils2.kt
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
+33
-10
@@ -17,10 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.impl
|
package org.jetbrains.kotlin.ir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.LocalDelegatedPropertyCarrier
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrLocalDelegatedPropertySymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrLocalDelegatedPropertySymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -28,6 +26,7 @@ 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
|
||||||
|
|
||||||
|
// TODO make not persistent
|
||||||
class IrLocalDelegatedPropertyImpl(
|
class IrLocalDelegatedPropertyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -37,8 +36,9 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
override val type: IrType,
|
override val type: IrType,
|
||||||
override val isVar: Boolean
|
override val isVar: Boolean
|
||||||
) :
|
) :
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase<LocalDelegatedPropertyCarrier>(startOffset, endOffset, origin),
|
||||||
IrLocalDelegatedProperty {
|
IrLocalDelegatedProperty,
|
||||||
|
LocalDelegatedPropertyCarrier {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
@@ -85,7 +85,6 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
descriptor.name, type, descriptor.isVar
|
descriptor.name, type, descriptor.isVar
|
||||||
)
|
)
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
@Deprecated("Creates unbound symbol")
|
@Deprecated("Creates unbound symbol")
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -105,11 +104,35 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
override val descriptor: VariableDescriptorWithAccessors
|
override val descriptor: VariableDescriptorWithAccessors
|
||||||
get() = symbol.descriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override lateinit var delegate: IrVariable
|
override var delegateField: IrVariable? = null
|
||||||
|
|
||||||
override lateinit var getter: IrFunction
|
override var delegate: IrVariable
|
||||||
|
get() = getCarrier().delegateField!!
|
||||||
|
set(v) {
|
||||||
|
if (getCarrier().delegateField !== v) {
|
||||||
|
setCarrier().delegateField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override var setter: IrFunction? = null
|
override var getterField: IrFunction? = null
|
||||||
|
|
||||||
|
override var getter: IrFunction
|
||||||
|
get() = getCarrier().getterField!!
|
||||||
|
set(v) {
|
||||||
|
if (getCarrier().getterField !== v) {
|
||||||
|
setCarrier().getterField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override var setterField: IrFunction? = null
|
||||||
|
|
||||||
|
override var setter: IrFunction?
|
||||||
|
get() = getCarrier().setterField
|
||||||
|
set(v) {
|
||||||
|
if (setter !== v) {
|
||||||
|
setCarrier().setterField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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.visitLocalDelegatedProperty(this, data)
|
visitor.visitLocalDelegatedProperty(this, data)
|
||||||
|
|||||||
+43
-6
@@ -20,6 +20,7 @@ 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.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
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
|
||||||
@@ -43,8 +44,9 @@ class IrPropertyImpl(
|
|||||||
override val isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
|
override val isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
|
||||||
override val isExpect: Boolean = symbol.descriptor.isExpect,
|
override val isExpect: Boolean = symbol.descriptor.isExpect,
|
||||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
) : IrDeclarationBase(startOffset, endOffset, origin),
|
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
||||||
IrProperty {
|
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(
|
||||||
@@ -133,9 +135,36 @@ class IrPropertyImpl(
|
|||||||
|
|
||||||
override val descriptor: PropertyDescriptor = symbol.descriptor
|
override val descriptor: PropertyDescriptor = symbol.descriptor
|
||||||
|
|
||||||
override var backingField: IrField? = null
|
override var backingFieldField: IrField? = null
|
||||||
override var getter: IrSimpleFunction? = null
|
|
||||||
override var setter: IrSimpleFunction? = 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 {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitProperty(this, data)
|
return visitor.visitProperty(this, data)
|
||||||
@@ -147,7 +176,15 @@ class IrPropertyImpl(
|
|||||||
setter?.accept(visitor, data)
|
setter?.accept(visitor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override var metadata: MetadataSource? = null
|
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) {
|
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||||
backingField = backingField?.transform(transformer, data) as? IrField
|
backingField = backingField?.transform(transformer, data) as? IrField
|
||||||
|
|||||||
@@ -9,18 +9,35 @@ import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrScriptSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrScriptSymbol
|
||||||
import org.jetbrains.kotlin.ir.util.transform
|
import org.jetbrains.kotlin.ir.util.transform
|
||||||
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.utils.SmartList
|
||||||
|
|
||||||
private val SCRIPT_ORIGIN = object : IrDeclarationOriginImpl("FIELD_FOR_OBJECT_INSTANCE") {}
|
private val SCRIPT_ORIGIN = object : IrDeclarationOriginImpl("FIELD_FOR_OBJECT_INSTANCE") {}
|
||||||
|
|
||||||
class IrScriptImpl(
|
class IrScriptImpl(
|
||||||
override val symbol: IrScriptSymbol,
|
override val symbol: IrScriptSymbol,
|
||||||
override val name: Name
|
override val name: Name
|
||||||
) : IrScript, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, SCRIPT_ORIGIN) {
|
) : IrScript, IrDeclaration {
|
||||||
|
override val startOffset: Int get() = UNDEFINED_OFFSET
|
||||||
|
override val endOffset: Int get() = UNDEFINED_OFFSET
|
||||||
|
override var origin: IrDeclarationOrigin = SCRIPT_ORIGIN
|
||||||
|
|
||||||
|
private var _parent: IrDeclarationParent? = null
|
||||||
|
override var parent: IrDeclarationParent
|
||||||
|
get() = _parent
|
||||||
|
?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
|
||||||
|
set(v) {
|
||||||
|
_parent = v
|
||||||
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> = SmartList()
|
||||||
|
override val metadata: MetadataSource? get() = null
|
||||||
|
|
||||||
override val declarations: MutableList<IrDeclaration> = mutableListOf()
|
override val declarations: MutableList<IrDeclaration> = mutableListOf()
|
||||||
override val statements: MutableList<IrStatement> = mutableListOf()
|
override val statements: MutableList<IrStatement> = mutableListOf()
|
||||||
|
|
||||||
|
|||||||
+13
-3
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias
|
import org.jetbrains.kotlin.ir.declarations.IrTypeAlias
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.TypeAliasCarrier
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.mapOptimized
|
import org.jetbrains.kotlin.ir.util.mapOptimized
|
||||||
@@ -27,8 +28,9 @@ class IrTypeAliasImpl(
|
|||||||
override val isActual: Boolean,
|
override val isActual: Boolean,
|
||||||
origin: IrDeclarationOrigin
|
origin: IrDeclarationOrigin
|
||||||
) :
|
) :
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase<TypeAliasCarrier>(startOffset, endOffset, origin),
|
||||||
IrTypeAlias {
|
IrTypeAlias,
|
||||||
|
TypeAliasCarrier {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
@@ -37,7 +39,15 @@ class IrTypeAliasImpl(
|
|||||||
override val descriptor: TypeAliasDescriptor
|
override val descriptor: TypeAliasDescriptor
|
||||||
get() = symbol.descriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> = emptyList()
|
override var typeParametersField: List<IrTypeParameter> = emptyList()
|
||||||
|
|
||||||
|
override var typeParameters: List<IrTypeParameter>
|
||||||
|
get() = getCarrier().typeParametersField
|
||||||
|
set(v) {
|
||||||
|
if (typeParameters !== v) {
|
||||||
|
setCarrier().typeParametersField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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.visitTypeAlias(this, data)
|
visitor.visitTypeAlias(this, data)
|
||||||
|
|||||||
+4
-2
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.TypeParameterCarrier
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -38,8 +39,9 @@ class IrTypeParameterImpl(
|
|||||||
override val isReified: Boolean,
|
override val isReified: Boolean,
|
||||||
override val variance: Variance
|
override val variance: Variance
|
||||||
) :
|
) :
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase<TypeParameterCarrier>(startOffset, endOffset, origin),
|
||||||
IrTypeParameter {
|
IrTypeParameter,
|
||||||
|
TypeParameterCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
|
|||||||
+16
-3
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.ParameterDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.carriers.ValueParameterCarrier
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||||
@@ -41,8 +42,9 @@ class IrValueParameterImpl(
|
|||||||
override val isCrossinline: Boolean,
|
override val isCrossinline: Boolean,
|
||||||
override val isNoinline: Boolean
|
override val isNoinline: Boolean
|
||||||
) :
|
) :
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase<ValueParameterCarrier>(startOffset, endOffset, origin),
|
||||||
IrValueParameter {
|
IrValueParameter,
|
||||||
|
ValueParameterCarrier {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -79,7 +81,18 @@ class IrValueParameterImpl(
|
|||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override var defaultValue: IrExpressionBody? = null
|
override var defaultValueField: IrExpressionBody? = null
|
||||||
|
|
||||||
|
override var defaultValue: IrExpressionBody?
|
||||||
|
get() = getCarrier().defaultValueField
|
||||||
|
set(v) {
|
||||||
|
if (defaultValue !== v) {
|
||||||
|
if (v is IrBodyBase<*>) {
|
||||||
|
v.container = this
|
||||||
|
}
|
||||||
|
setCarrier().defaultValueField = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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.visitValueParameter(this, data)
|
visitor.visitValueParameter(this, data)
|
||||||
|
|||||||
+19
-6
@@ -18,7 +18,10 @@ package org.jetbrains.kotlin.ir.declarations.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
|
||||||
@@ -26,20 +29,30 @@ import org.jetbrains.kotlin.ir.types.IrType
|
|||||||
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.utils.SmartList
|
||||||
|
|
||||||
class IrVariableImpl(
|
class IrVariableImpl(
|
||||||
startOffset: Int,
|
override val startOffset: Int,
|
||||||
endOffset: Int,
|
override val endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrVariableSymbol,
|
override val symbol: IrVariableSymbol,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val type: IrType,
|
override val type: IrType,
|
||||||
override val isVar: Boolean,
|
override val isVar: Boolean,
|
||||||
override val isConst: Boolean,
|
override val isConst: Boolean,
|
||||||
override val isLateinit: Boolean
|
override val isLateinit: Boolean
|
||||||
) :
|
) : IrVariable {
|
||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
|
||||||
IrVariable {
|
private var _parent: IrDeclarationParent? = null
|
||||||
|
override var parent: IrDeclarationParent
|
||||||
|
get() = _parent
|
||||||
|
?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
|
||||||
|
set(v) {
|
||||||
|
_parent = v
|
||||||
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> = emptyList()
|
||||||
|
override val metadata: MetadataSource? get() = null
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
|
interface AnonymousInitializerCarrier : DeclarationCarrier<AnonymousInitializerCarrier> {
|
||||||
|
var bodyField: IrBlockBody?
|
||||||
|
|
||||||
|
override fun clone(): AnonymousInitializerCarrier {
|
||||||
|
return AnonymousInitializerCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
bodyField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AnonymousInitializerCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var bodyField: IrBlockBody?
|
||||||
|
) : AnonymousInitializerCarrier
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
|
|
||||||
|
interface BodyCarrier : Carrier<BodyCarrier> {
|
||||||
|
|
||||||
|
var containerField: IrDeclaration?
|
||||||
|
|
||||||
|
override fun clone(): BodyCarrier {
|
||||||
|
return BodyCarrierImpl(lastModified, containerField)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BodyCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var containerField: IrDeclaration?
|
||||||
|
) : BodyCarrier
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
interface Carrier<in T : Carrier<T>> {
|
||||||
|
val lastModified: Int
|
||||||
|
|
||||||
|
fun clone(): Carrier<T>
|
||||||
|
}
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
|
interface ClassCarrier : DeclarationCarrier<ClassCarrier> {
|
||||||
|
var thisReceiverField: IrValueParameter?
|
||||||
|
var metadataField: MetadataSource?
|
||||||
|
var visibilityField: Visibility
|
||||||
|
var modalityField: Modality
|
||||||
|
var attributeOwnerIdField: IrAttributeContainer
|
||||||
|
var typeParametersField: List<IrTypeParameter>
|
||||||
|
var superTypesField: List<IrType>
|
||||||
|
|
||||||
|
override fun clone(): ClassCarrier {
|
||||||
|
return ClassCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
thisReceiverField,
|
||||||
|
metadataField,
|
||||||
|
visibilityField,
|
||||||
|
modalityField,
|
||||||
|
attributeOwnerIdField,
|
||||||
|
typeParametersField,
|
||||||
|
superTypesField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ClassCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var thisReceiverField: IrValueParameter?,
|
||||||
|
override var metadataField: MetadataSource?,
|
||||||
|
override var visibilityField: Visibility,
|
||||||
|
override var modalityField: Modality,
|
||||||
|
override var attributeOwnerIdField: IrAttributeContainer,
|
||||||
|
override var typeParametersField: List<IrTypeParameter>,
|
||||||
|
override var superTypesField: List<IrType>
|
||||||
|
) : ClassCarrier
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
|
|
||||||
|
interface ConstructorCarrier : FunctionBaseCarrier<ConstructorCarrier> {
|
||||||
|
|
||||||
|
override fun clone(): ConstructorCarrier {
|
||||||
|
return ConstructorCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
returnTypeFieldField,
|
||||||
|
dispatchReceiverParameterField,
|
||||||
|
extensionReceiverParameterField,
|
||||||
|
bodyField,
|
||||||
|
metadataField,
|
||||||
|
visibilityField,
|
||||||
|
typeParametersField,
|
||||||
|
valueParametersField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConstructorCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var returnTypeFieldField: IrType,
|
||||||
|
override var dispatchReceiverParameterField: IrValueParameter?,
|
||||||
|
override var extensionReceiverParameterField: IrValueParameter?,
|
||||||
|
override var bodyField: IrBody?,
|
||||||
|
override var metadataField: MetadataSource?,
|
||||||
|
override var visibilityField: Visibility,
|
||||||
|
override var typeParametersField: List<IrTypeParameter>,
|
||||||
|
override var valueParametersField: List<IrValueParameter>
|
||||||
|
) : ConstructorCarrier
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
|
||||||
|
interface DeclarationCarrier<in T : DeclarationCarrier<T>>: Carrier<T> {
|
||||||
|
var parentField: IrDeclarationParent?
|
||||||
|
var originField: IrDeclarationOrigin
|
||||||
|
var annotationsField: List<IrConstructorCall>
|
||||||
|
}
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
|
|
||||||
|
interface EnumEntryCarrier : DeclarationCarrier<EnumEntryCarrier> {
|
||||||
|
var correspondingClassField: IrClass?
|
||||||
|
var initializerExpressionField: IrExpressionBody?
|
||||||
|
|
||||||
|
override fun clone(): EnumEntryCarrier {
|
||||||
|
return EnumEntryCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
correspondingClassField,
|
||||||
|
initializerExpressionField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class EnumEntryCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var correspondingClassField: IrClass?,
|
||||||
|
override var initializerExpressionField: IrExpressionBody?
|
||||||
|
) : EnumEntryCarrier
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
|
interface ErrorCarrier : DeclarationCarrier<ErrorCarrier> {
|
||||||
|
|
||||||
|
override fun clone(): ErrorCarrier {
|
||||||
|
return ErrorCarrierImpl(lastModified, parentField, originField, annotationsField)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ErrorCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>
|
||||||
|
) : ErrorCarrier
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
|
|
||||||
|
interface FieldCarrier : DeclarationCarrier<FieldCarrier> {
|
||||||
|
var initializerField: IrExpressionBody?
|
||||||
|
var correspondingPropertySymbolField: IrPropertySymbol?
|
||||||
|
var metadataField: MetadataSource.Property?
|
||||||
|
var overridenSymbolsField: List<IrFieldSymbol>
|
||||||
|
|
||||||
|
override fun clone(): FieldCarrier {
|
||||||
|
return FieldCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
initializerField,
|
||||||
|
correspondingPropertySymbolField,
|
||||||
|
metadataField,
|
||||||
|
overridenSymbolsField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FieldCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var initializerField: IrExpressionBody?,
|
||||||
|
override var correspondingPropertySymbolField: IrPropertySymbol?,
|
||||||
|
override var metadataField: MetadataSource.Property?,
|
||||||
|
override var overridenSymbolsField: List<IrFieldSymbol>
|
||||||
|
): FieldCarrier
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
|
interface FunctionBaseCarrier<T : FunctionBaseCarrier<T>> : DeclarationCarrier<T> {
|
||||||
|
var returnTypeFieldField: IrType
|
||||||
|
var dispatchReceiverParameterField: IrValueParameter?
|
||||||
|
var extensionReceiverParameterField: IrValueParameter?
|
||||||
|
var bodyField: IrBody?
|
||||||
|
var metadataField: MetadataSource?
|
||||||
|
var visibilityField: Visibility
|
||||||
|
var typeParametersField: List<IrTypeParameter>
|
||||||
|
var valueParametersField: List<IrValueParameter>
|
||||||
|
}
|
||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
|
interface FunctionCarrier : FunctionBaseCarrier<FunctionCarrier> {
|
||||||
|
var correspondingPropertySymbolField: IrPropertySymbol?
|
||||||
|
var overriddenSymbolsField: List<IrSimpleFunctionSymbol>
|
||||||
|
var attributeOwnerIdField: IrAttributeContainer
|
||||||
|
|
||||||
|
override fun clone(): FunctionCarrier {
|
||||||
|
return FunctionCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
returnTypeFieldField,
|
||||||
|
dispatchReceiverParameterField,
|
||||||
|
extensionReceiverParameterField,
|
||||||
|
bodyField,
|
||||||
|
metadataField,
|
||||||
|
visibilityField,
|
||||||
|
typeParametersField,
|
||||||
|
valueParametersField,
|
||||||
|
correspondingPropertySymbolField,
|
||||||
|
overriddenSymbolsField,
|
||||||
|
attributeOwnerIdField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FunctionCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var returnTypeFieldField: IrType,
|
||||||
|
override var dispatchReceiverParameterField: IrValueParameter?,
|
||||||
|
override var extensionReceiverParameterField: IrValueParameter?,
|
||||||
|
override var bodyField: IrBody?,
|
||||||
|
override var metadataField: MetadataSource?,
|
||||||
|
override var visibilityField: Visibility,
|
||||||
|
override var typeParametersField: List<IrTypeParameter>,
|
||||||
|
override var valueParametersField: List<IrValueParameter>,
|
||||||
|
override var correspondingPropertySymbolField: IrPropertySymbol?,
|
||||||
|
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol>,
|
||||||
|
override var attributeOwnerIdField: IrAttributeContainer
|
||||||
|
) : FunctionCarrier
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
|
interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPropertyCarrier> {
|
||||||
|
var delegateField: IrVariable?
|
||||||
|
var getterField: IrFunction?
|
||||||
|
var setterField: IrFunction?
|
||||||
|
|
||||||
|
override fun clone(): LocalDelegatedPropertyCarrier {
|
||||||
|
return LocalDelegatedPropertyCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
delegateField,
|
||||||
|
getterField,
|
||||||
|
setterField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LocalDelegatedPropertyCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var delegateField: IrVariable?,
|
||||||
|
override var getterField: IrFunction?,
|
||||||
|
override var setterField: IrFunction?
|
||||||
|
) : LocalDelegatedPropertyCarrier
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
|
interface PropertyCarrier : DeclarationCarrier<PropertyCarrier> {
|
||||||
|
var backingFieldField: IrField?
|
||||||
|
var getterField: IrSimpleFunction?
|
||||||
|
var setterField: IrSimpleFunction?
|
||||||
|
var metadataField: MetadataSource?
|
||||||
|
|
||||||
|
override fun clone(): PropertyCarrier {
|
||||||
|
return PropertyCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
backingFieldField,
|
||||||
|
getterField,
|
||||||
|
setterField,
|
||||||
|
metadataField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PropertyCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var backingFieldField: IrField?,
|
||||||
|
override var getterField: IrSimpleFunction?,
|
||||||
|
override var setterField: IrSimpleFunction?,
|
||||||
|
override var metadataField: MetadataSource?
|
||||||
|
) : PropertyCarrier
|
||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
|
interface TypeAliasCarrier : DeclarationCarrier<TypeAliasCarrier> {
|
||||||
|
|
||||||
|
var typeParametersField: List<IrTypeParameter>
|
||||||
|
|
||||||
|
override fun clone(): TypeAliasCarrier {
|
||||||
|
return TypeAliasCarrierImpl(
|
||||||
|
lastModified,
|
||||||
|
parentField,
|
||||||
|
originField,
|
||||||
|
annotationsField,
|
||||||
|
typeParametersField
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TypeAliasCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var typeParametersField: List<IrTypeParameter>
|
||||||
|
) : TypeAliasCarrier
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
|
||||||
|
interface TypeParameterCarrier : DeclarationCarrier<TypeParameterCarrier> {
|
||||||
|
|
||||||
|
override fun clone(): TypeParameterCarrier {
|
||||||
|
return TypeParameterCarrierImpl(lastModified, parentField, originField, annotationsField)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TypeParameterCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>
|
||||||
|
) : TypeParameterCarrier
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.declarations.impl.carriers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
|
|
||||||
|
interface ValueParameterCarrier : DeclarationCarrier<ValueParameterCarrier> {
|
||||||
|
var defaultValueField: IrExpressionBody?
|
||||||
|
|
||||||
|
override fun clone(): ValueParameterCarrier {
|
||||||
|
return ValueParameterCarrierImpl(lastModified, parentField, originField, annotationsField, defaultValueField)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ValueParameterCarrierImpl(
|
||||||
|
override val lastModified: Int,
|
||||||
|
override var parentField: IrDeclarationParent?,
|
||||||
|
override var originField: IrDeclarationOrigin,
|
||||||
|
override var annotationsField: List<IrConstructorCall>,
|
||||||
|
override var defaultValueField: IrExpressionBody?
|
||||||
|
) : ValueParameterCarrier
|
||||||
+3
-3
@@ -6,9 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.lazy
|
package org.jetbrains.kotlin.ir.declarations.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.ir.IrElementBase
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrDeclarationBase
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
@@ -19,10 +19,10 @@ import org.jetbrains.kotlin.types.KotlinType
|
|||||||
abstract class IrLazyDeclarationBase(
|
abstract class IrLazyDeclarationBase(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
override var origin: IrDeclarationOrigin,
|
||||||
private val stubGenerator: DeclarationStubGenerator,
|
private val stubGenerator: DeclarationStubGenerator,
|
||||||
protected val typeTranslator: TypeTranslator
|
protected val typeTranslator: TypeTranslator
|
||||||
) : IrDeclarationBase(startOffset, endOffset, origin) {
|
) : IrElementBase(startOffset, endOffset), IrDeclaration {
|
||||||
|
|
||||||
protected fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
protected fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.ir.descriptors
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrDeclarationBase
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionBase
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
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
|
||||||
@@ -21,33 +21,72 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
interface IrBuiltinWithMangle : IrDeclaration, IrSymbolOwner {
|
interface IrBuiltinWithMangle : IrDeclaration, IrSymbolOwner {
|
||||||
val mangle: String
|
val mangle: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class IrBuiltInOperatorBase : IrDeclaration {
|
||||||
|
override val startOffset: Int get() = UNDEFINED_OFFSET
|
||||||
|
override val endOffset: Int get() = UNDEFINED_OFFSET
|
||||||
|
|
||||||
|
override var origin: IrDeclarationOrigin
|
||||||
|
get() = IrBuiltIns.BUILTIN_OPERATOR
|
||||||
|
set(_) {}
|
||||||
|
|
||||||
|
private var _parent: IrDeclarationParent? = null
|
||||||
|
override var parent: IrDeclarationParent
|
||||||
|
get() = _parent
|
||||||
|
?: throw UninitializedPropertyAccessException("Parent not initialized: $this")
|
||||||
|
set(v) {
|
||||||
|
_parent = v
|
||||||
|
}
|
||||||
|
|
||||||
|
override var annotations: List<IrConstructorCall> = emptyList()
|
||||||
|
override val metadata: MetadataSource? get() = null
|
||||||
|
}
|
||||||
|
|
||||||
|
private class NullValueDelegate<T> {
|
||||||
|
operator fun getValue(thisRef: Any?, property: KProperty<*>): T? = null
|
||||||
|
operator fun setValue(thisRef: Any?, property: KProperty<*>, v: T?) {
|
||||||
|
error("IrBuiltInOperators are not supposed to be mutated")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class IrBuiltInOperator(
|
class IrBuiltInOperator(
|
||||||
override val symbol: IrSimpleFunctionSymbol,
|
override val symbol: IrSimpleFunctionSymbol,
|
||||||
name: Name,
|
override val name: Name,
|
||||||
returnType: IrType,
|
override var returnType: IrType,
|
||||||
val suffix: String
|
val suffix: String
|
||||||
) :
|
) :
|
||||||
IrSimpleFunction,
|
IrSimpleFunction,
|
||||||
IrBuiltinWithMangle,
|
IrBuiltinWithMangle,
|
||||||
IrFunctionBase(
|
IrFunction,
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR,
|
IrBuiltInOperatorBase() {
|
||||||
name, Visibilities.PUBLIC, false, false, false,
|
|
||||||
returnType
|
override val visibility: Visibility get() = Visibilities.PUBLIC
|
||||||
) {
|
|
||||||
|
override val isInline: Boolean get() = false
|
||||||
|
override val isExternal: Boolean get() = false
|
||||||
|
override val isExpect: Boolean get() = false
|
||||||
|
|
||||||
|
override var dispatchReceiverParameter: IrValueParameter? by NullValueDelegate()
|
||||||
|
|
||||||
|
override var extensionReceiverParameter: IrValueParameter? by NullValueDelegate()
|
||||||
|
|
||||||
|
override var body: IrBody? by NullValueDelegate()
|
||||||
|
|
||||||
|
override var valueParameters: List<IrValueParameter> = emptyList()
|
||||||
|
override var typeParameters: List<IrTypeParameter> = emptyList()
|
||||||
|
|
||||||
override val modality get() = Modality.FINAL
|
override val modality get() = Modality.FINAL
|
||||||
override val isTailrec get() = false
|
override val isTailrec get() = false
|
||||||
override val isSuspend get() = false
|
override val isSuspend get() = false
|
||||||
override val isFakeOverride get() = false
|
override val isFakeOverride get() = false
|
||||||
override val isOperator: Boolean get() = false
|
override val isOperator: Boolean get() = false
|
||||||
override var correspondingPropertySymbol: IrPropertySymbol?
|
override var correspondingPropertySymbol: IrPropertySymbol? by NullValueDelegate()
|
||||||
get() = null
|
|
||||||
set(_) {}
|
|
||||||
override val descriptor: FunctionDescriptor get() = symbol.descriptor
|
override val descriptor: FunctionDescriptor get() = symbol.descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
@@ -61,18 +100,25 @@ class IrBuiltInOperator(
|
|||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class IrBuiltInOperatorValueParameter(override val symbol: IrValueParameterSymbol, override val index: Int, override val type: IrType) :
|
class IrBuiltInOperatorValueParameter(override val symbol: IrValueParameterSymbol, override val index: Int, override val type: IrType) :
|
||||||
IrValueParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) {
|
IrValueParameter, IrBuiltInOperatorBase() {
|
||||||
|
|
||||||
override val descriptor: ParameterDescriptor get() = symbol.descriptor
|
override val descriptor: ParameterDescriptor get() = symbol.descriptor
|
||||||
override val varargElementType: IrType? get() = null
|
override val varargElementType: IrType? get() = null
|
||||||
override val isCrossinline: Boolean get() = false
|
override val isCrossinline: Boolean get() = false
|
||||||
override val isNoinline: Boolean get() = false
|
override val isNoinline: Boolean get() = false
|
||||||
override var defaultValue: IrExpressionBody?
|
override var defaultValue: IrExpressionBody? by NullValueDelegate()
|
||||||
get() = null
|
|
||||||
set(_) {}
|
|
||||||
override val name: Name = Name.identifier("arg$index")
|
override val name: Name = Name.identifier("arg$index")
|
||||||
|
|
||||||
override fun <D> transform(transformer: IrElementTransformer<D>, data: D) =
|
override fun <D> transform(transformer: IrElementTransformer<D>, data: D) =
|
||||||
@@ -92,7 +138,7 @@ class IrBuiltInOperatorTypeParameter(
|
|||||||
override val variance: Variance,
|
override val variance: Variance,
|
||||||
override val index: Int,
|
override val index: Int,
|
||||||
override val isReified: Boolean
|
override val isReified: Boolean
|
||||||
) : IrTypeParameter, IrDeclarationBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrBuiltIns.BUILTIN_OPERATOR) {
|
) : IrTypeParameter, IrBuiltInOperatorBase() {
|
||||||
|
|
||||||
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
|
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
|
||||||
override val superTypes: MutableList<IrType> = SmartList()
|
override val superTypes: MutableList<IrType> = SmartList()
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions.impl
|
package org.jetbrains.kotlin.ir.expressions.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
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
|
||||||
@@ -25,20 +25,20 @@ import java.util.*
|
|||||||
|
|
||||||
class IrBlockBodyImpl(
|
class IrBlockBodyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int
|
endOffset: Int,
|
||||||
|
initializer: (IrBlockBodyImpl.() -> Unit)? = null
|
||||||
) :
|
) :
|
||||||
IrElementBase(startOffset, endOffset),
|
IrBodyBase<IrBlockBodyImpl>(startOffset, endOffset, initializer),
|
||||||
IrBlockBody {
|
IrBlockBody {
|
||||||
|
|
||||||
constructor(startOffset: Int, endOffset: Int, statements: List<IrStatement>) : this(startOffset, endOffset) {
|
constructor(startOffset: Int, endOffset: Int, statements: List<IrStatement>) : this(startOffset, endOffset) {
|
||||||
this.statements.addAll(statements)
|
statementsField.addAll(statements)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(startOffset: Int, endOffset: Int, fn: IrBlockBodyImpl.() -> Unit) : this(startOffset, endOffset) {
|
private var statementsField: MutableList<IrStatement> = ArrayList()
|
||||||
this.fn()
|
|
||||||
}
|
|
||||||
|
|
||||||
override val statements: MutableList<IrStatement> = ArrayList()
|
override val statements: MutableList<IrStatement>
|
||||||
|
get() = checkEnabled { statementsField }
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitBlockBody(this, data)
|
return visitor.visitBlockBody(this, data)
|
||||||
|
|||||||
+14
-12
@@ -16,30 +16,32 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions.impl
|
package org.jetbrains.kotlin.ir.expressions.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrElementBase
|
import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
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
|
||||||
|
|
||||||
class IrExpressionBodyImpl(
|
class IrExpressionBodyImpl private constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int
|
endOffset: Int,
|
||||||
|
private var expressionField: IrExpression? = null,
|
||||||
|
initializer: (IrExpressionBodyImpl.() -> Unit)? = null
|
||||||
) :
|
) :
|
||||||
IrElementBase(startOffset, endOffset),
|
IrBodyBase<IrExpressionBodyImpl>(startOffset, endOffset, initializer),
|
||||||
IrExpressionBody {
|
IrExpressionBody {
|
||||||
|
|
||||||
constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset) {
|
constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression, null)
|
||||||
this.expression = expression
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression)
|
constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset, expression, null)
|
||||||
|
|
||||||
constructor(startOffset: Int, endOffset: Int, initFn: IrExpressionBodyImpl.() -> Unit) : this(startOffset, endOffset) {
|
constructor(startOffset: Int, endOffset: Int, initializer: IrExpressionBodyImpl.() -> Unit) : this(startOffset, endOffset, null, initializer)
|
||||||
this.initFn()
|
|
||||||
}
|
|
||||||
|
|
||||||
override lateinit var expression: IrExpression
|
override var expression: IrExpression
|
||||||
|
get() = checkEnabled { expressionField!! }
|
||||||
|
set(e) {
|
||||||
|
checkEnabled { expressionField = e }
|
||||||
|
}
|
||||||
|
|
||||||
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.visitExpressionBody(this, data)
|
visitor.visitExpressionBody(this, data)
|
||||||
|
|||||||
Reference in New Issue
Block a user