From 36a1a65d98edfb266af51c49f72345cf8eaa1a71 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 22 Jul 2020 22:27:42 +0200 Subject: [PATCH] IR: make IrBranch/IrCatch/IrSpreadElement/IrModuleFragment/IrPackageFragment classes --- .../kotlin/ir/declarations/IrFile.kt | 22 +++++++------- .../ir/declarations/IrModuleFragment.kt | 12 ++++---- .../impl/IrExternalPackageFragmentImpl.kt | 5 +--- .../kotlin/ir/declarations/impl/IrFileImpl.kt | 3 +- .../declarations/impl/IrModuleFragmentImpl.kt | 2 +- .../jetbrains/kotlin/ir/expressions/IrTry.kt | 8 ++--- .../kotlin/ir/expressions/IrVararg.kt | 5 ++-- .../jetbrains/kotlin/ir/expressions/IrWhen.kt | 22 ++++++++++---- .../expressions/impl/IrSpreadElementImpl.kt | 3 +- .../kotlin/ir/expressions/impl/IrTryImpl.kt | 3 +- .../kotlin/ir/expressions/impl/IrWhenImpl.kt | 30 +++++-------------- 11 files changed, 53 insertions(+), 62 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt index b1c247999b1..6fb19280d69 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt @@ -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 transform(transformer: IrElementTransformer, data: D): IrFile = accept(transformer, data) as IrFile diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt index 32aaa767119..020ebcf2ce1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt @@ -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 +abstract class IrModuleFragment : IrElementBase() { + abstract val name: Name + abstract val descriptor: ModuleDescriptor + abstract val irBuiltins: IrBuiltIns + abstract val files: MutableList override val startOffset: Int get() = UNDEFINED_OFFSET override val endOffset: Int get() = UNDEFINED_OFFSET @@ -35,4 +36,3 @@ interface IrModuleFragment : IrElement { override fun transform(transformer: IrElementTransformer, data: D): IrElement = accept(transformer, data) as IrModuleFragment } - diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt index 08171ce1f57..9b8ad6c1100 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt @@ -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 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt index 72be4667d26..3971e12f4a3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt @@ -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 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt index f3d3f42c1ba..6c0be865226 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt @@ -28,7 +28,7 @@ class IrModuleFragmentImpl( override val descriptor: ModuleDescriptor, override val irBuiltins: IrBuiltIns, files: List = emptyList(), -) : IrModuleFragment { +) : IrModuleFragment() { override val name: Name get() = descriptor.name // TODO override val files: MutableList = files.toMutableList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt index 939127505b4..d43471e0b6e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt @@ -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 transform(transformer: IrElementTransformer, data: D): IrCatch = super.transform(transformer, data) as IrCatch diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt index 783b208b732..7b0c07aa2d1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt @@ -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 transform(transformer: IrElementTransformer, data: D): IrElement = accept(transformer, data) as IrSpreadElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt index 875db48d8a2..5bf17f0825d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt @@ -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 transform(transformer: IrElementTransformer, data: D): IrBranch + abstract override fun transform(transformer: IrElementTransformer, data: D): IrBranch + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + condition.accept(visitor, data) + result.accept(visitor, data) + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + condition = condition.transform(transformer, data) + result = result.transform(transformer, data) + } } -interface IrElseBranch : IrBranch +abstract class IrElseBranch : IrBranch() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSpreadElementImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSpreadElementImpl.kt index 0b68cc361d5..9f9b3f9d806 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSpreadElementImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrSpreadElementImpl.kt @@ -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 accept(visitor: IrElementVisitor, data: D): R { return visitor.visitSpreadElement(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt index 83bdefb2831..2e5c6888c6a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrTryImpl.kt @@ -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, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt index a12e1e1cf70..c53cdbc70c3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhenImpl.kt @@ -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 transform(transformer: IrElementTransformer, data: D): IrBranch = transformer.visitBranch(this, data) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - condition.accept(visitor, data) - result.accept(visitor, data) - } - - override fun transformChildren(transformer: IrElementTransformer, 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 accept(visitor: IrElementVisitor, data: D): R = visitor.visitElseBranch(this, data)