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