org.jetbrains.kotlin.ir.declarations.impl.IrScriptImpl.kt Maven / Gradle / Ivy
/*
* 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
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
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.util.transformInPlace
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.SmartList
private val SCRIPT_ORIGIN = object : IrDeclarationOriginImpl("FIELD_FOR_OBJECT_INSTANCE") {}
class IrScriptImpl(
override val symbol: IrScriptSymbol,
override val name: Name
) : IrScript() {
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 = SmartList()
override val declarations: MutableList = mutableListOf()
override val statements: MutableList = mutableListOf()
override lateinit var thisReceiver: IrValueParameter
@ObsoleteDescriptorBasedAPI
override val descriptor: ScriptDescriptor
get() = symbol.descriptor
override val factory: IrFactory
get() = error("Create IrScriptImpl directly")
init {
symbol.bind(this)
}
override fun accept(visitor: IrElementVisitor, data: D): R {
return visitor.visitScript(this, data)
}
override fun acceptChildren(visitor: IrElementVisitor, data: D) {
declarations.forEach { it.accept(visitor, data) }
statements.forEach { it.accept(visitor, data) }
thisReceiver.accept(visitor, data)
}
override fun transformChildren(transformer: IrElementTransformer, data: D) {
declarations.transformInPlace(transformer, data)
statements.transformInPlace(transformer, data)
thisReceiver = thisReceiver.transform(transformer, data)
}
}