IR: make IrBranch/IrCatch/IrSpreadElement/IrModuleFragment/IrPackageFragment classes

This commit is contained in:
Alexander Udalov
2020-07-22 22:27:42 +02:00
parent 08a35f0674
commit 36a1a65d98
11 changed files with 53 additions and 62 deletions
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.SourceManager
import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
@@ -27,22 +27,22 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import java.io.File
interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
val packageFragmentDescriptor: PackageFragmentDescriptor
override val symbol: IrPackageFragmentSymbol
abstract class IrPackageFragment : IrElementBase(), IrDeclarationContainer, IrSymbolOwner {
abstract val packageFragmentDescriptor: PackageFragmentDescriptor
abstract override val symbol: IrPackageFragmentSymbol
val fqName: FqName
abstract val fqName: FqName
}
interface IrExternalPackageFragment : IrPackageFragment {
override val symbol: IrExternalPackageFragmentSymbol
val containerSource: DeserializedContainerSource?
abstract class IrExternalPackageFragment : IrPackageFragment() {
abstract override val symbol: IrExternalPackageFragmentSymbol
abstract val containerSource: DeserializedContainerSource?
}
interface IrFile : IrPackageFragment, IrMutableAnnotationContainer, IrMetadataSourceOwner {
override val symbol: IrFileSymbol
abstract class IrFile : IrPackageFragment(), IrMutableAnnotationContainer, IrMetadataSourceOwner {
abstract override val symbol: IrFileSymbol
val fileEntry: SourceManager.FileEntry
abstract val fileEntry: SourceManager.FileEntry
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrFile =
accept(transformer, data) as IrFile
@@ -18,16 +18,17 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.Name
interface IrModuleFragment : IrElement {
val name: Name
val descriptor: ModuleDescriptor
val irBuiltins: IrBuiltIns
val files: MutableList<IrFile>
abstract class IrModuleFragment : IrElementBase() {
abstract val name: Name
abstract val descriptor: ModuleDescriptor
abstract val irBuiltins: IrBuiltIns
abstract val files: MutableList<IrFile>
override val startOffset: Int get() = UNDEFINED_OFFSET
override val endOffset: Int get() = UNDEFINED_OFFSET
@@ -35,4 +36,3 @@ interface IrModuleFragment : IrElement {
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrElement =
accept(transformer, data) as IrModuleFragment
}
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
@@ -35,9 +34,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
class IrExternalPackageFragmentImpl(
override val symbol: IrExternalPackageFragmentSymbol,
override val fqName: FqName
) : IrElementBase(),
IrExternalPackageFragment {
) : IrExternalPackageFragment() {
override val startOffset: Int
get() = UNDEFINED_OFFSET
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.SourceManager
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
@@ -34,7 +33,7 @@ class IrFileImpl(
override val fileEntry: SourceManager.FileEntry,
override val symbol: IrFileSymbol,
override val fqName: FqName
) : IrElementBase(), IrFile {
) : IrFile() {
constructor(
fileEntry: SourceManager.FileEntry,
packageFragmentDescriptor: PackageFragmentDescriptor
@@ -28,7 +28,7 @@ class IrModuleFragmentImpl(
override val descriptor: ModuleDescriptor,
override val irBuiltins: IrBuiltIns,
files: List<IrFile> = emptyList(),
) : IrModuleFragment {
) : IrModuleFragment() {
override val name: Name get() = descriptor.name // TODO
override val files: MutableList<IrFile> = files.toMutableList()
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
@@ -28,9 +28,9 @@ abstract class IrTry : IrExpression() {
abstract var finallyExpression: IrExpression?
}
interface IrCatch : IrElement {
var catchParameter: IrVariable
var result: IrExpression
abstract class IrCatch : IrElementBase() {
abstract var catchParameter: IrVariable
abstract var result: IrExpression
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrCatch =
super.transform(transformer, data) as IrCatch
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
@@ -30,8 +31,8 @@ abstract class IrVararg : IrExpression() {
abstract fun putElement(i: Int, element: IrVarargElement)
}
interface IrSpreadElement : IrVarargElement {
var expression: IrExpression
abstract class IrSpreadElement : IrElementBase(), IrVarargElement {
abstract var expression: IrExpression
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrElement =
accept(transformer, data) as IrSpreadElement
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
@@ -39,11 +39,21 @@ abstract class IrWhen : IrExpression() {
}
}
interface IrBranch : IrElement {
var condition: IrExpression
var result: IrExpression
abstract class IrBranch : IrElementBase() {
abstract var condition: IrExpression
abstract var result: IrExpression
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrBranch
abstract override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrBranch
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
condition.accept(visitor, data)
result.accept(visitor, data)
}
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
condition = condition.transform(transformer, data)
result = result.transform(transformer, data)
}
}
interface IrElseBranch : IrBranch
abstract class IrElseBranch : IrBranch()
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrSpreadElement
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
@@ -26,7 +25,7 @@ class IrSpreadElementImpl(
override val startOffset: Int,
override val endOffset: Int,
override var expression: IrExpression,
) : IrElementBase(), IrSpreadElement {
) : IrSpreadElement() {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitSpreadElement(this, data)
}
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.IrCatch
import org.jetbrains.kotlin.ir.expressions.IrExpression
@@ -73,7 +72,7 @@ class IrCatchImpl(
override val startOffset: Int,
override val endOffset: Int,
override var catchParameter: IrVariable,
) : IrElementBase(), IrCatch {
) : IrCatch() {
constructor(
startOffset: Int,
endOffset: Int,
@@ -16,12 +16,10 @@
package org.jetbrains.kotlin.ir.expressions.impl
import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import java.util.*
class IrWhenImpl(
override val startOffset: Int,
@@ -47,7 +45,7 @@ open class IrBranchImpl(
override val endOffset: Int,
override var condition: IrExpression,
override var result: IrExpression
) : IrElementBase(), IrBranch {
) : IrBranch() {
constructor(condition: IrExpression, result: IrExpression) :
this(condition.startOffset, condition.endOffset, condition, result)
@@ -56,28 +54,16 @@ open class IrBranchImpl(
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrBranch =
transformer.visitBranch(this, data)
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
condition.accept(visitor, data)
result.accept(visitor, data)
}
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
condition = condition.transform(transformer, data)
result = result.transform(transformer, data)
}
}
class IrElseBranchImpl(
startOffset: Int,
endOffset: Int,
condition: IrExpression,
result: IrExpression
) :
IrBranchImpl(startOffset, endOffset, condition, result),
IrElseBranch {
constructor(condition: IrExpression, result: IrExpression) : this(condition.startOffset, condition.endOffset, condition, result)
override val startOffset: Int,
override val endOffset: Int,
override var condition: IrExpression,
override var result: IrExpression
) : IrElseBranch() {
constructor(condition: IrExpression, result: IrExpression) :
this(condition.startOffset, condition.endOffset, condition, result)
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitElseBranch(this, data)