IR: introduce abstract class IrDeclarationBase
The main purpose of this class is to improve performance of IR visitors and transformers. `IrElementVisitor.visitDeclaration` now takes IrDeclarationBase as a parameter, and therefore the call to `accept` there is now a virtual class call, instead of an interface call.
This commit is contained in:
+10
-7
@@ -5,15 +5,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.backend.evaluate
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer
|
||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl
|
||||
import org.jetbrains.kotlin.ir.interpreter.EvaluationMode
|
||||
import org.jetbrains.kotlin.ir.interpreter.IrCompileTimeChecker
|
||||
import org.jetbrains.kotlin.ir.interpreter.IrInterpreter
|
||||
import org.jetbrains.kotlin.ir.interpreter.toIrConst
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
|
||||
@@ -51,7 +54,7 @@ class IrConstTransformer(irBuiltIns: IrBuiltIns) : IrElementTransformerVoid() {
|
||||
return declaration
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
transformAnnotations(declaration)
|
||||
return super.visitDeclaration(declaration)
|
||||
}
|
||||
@@ -98,4 +101,4 @@ class IrConstTransformer(irBuiltIns: IrBuiltIns) : IrElementTransformerVoid() {
|
||||
if (type.isArray()) return this.convertToConstIfPossible((type as IrSimpleType).arguments.single().typeOrNull!!)
|
||||
return this.value.toIrConst(type, this.startOffset, this.endOffset)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -312,7 +312,7 @@ class CheckIrElementVisitor(
|
||||
expression.symbol.ensureBound(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
super.visitDeclaration(declaration)
|
||||
|
||||
if (declaration is IrOverridableDeclaration<*>) {
|
||||
|
||||
@@ -98,7 +98,7 @@ object CheckDeclarationParentsVisitor : IrElementVisitor<Unit, IrDeclarationPare
|
||||
element.acceptChildren(this, element as? IrDeclarationParent ?: data)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent?) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent?) {
|
||||
checkParent(declaration, data)
|
||||
super.visitDeclaration(declaration, data)
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ fun BodyLoweringPass.runOnFilePostfix(irFile: IrFile, withLocalDeclarations: Boo
|
||||
element.acceptChildren(this, data)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclaration?) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclaration?) {
|
||||
declaration.acceptChildren(this, declaration)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ private fun IrBody.move(
|
||||
return super.visitBlock(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
if (declaration.parent == source)
|
||||
declaration.parent = target
|
||||
return super.visitDeclaration(declaration)
|
||||
|
||||
@@ -364,7 +364,7 @@ object SetDeclarationsParentVisitor : IrElementVisitor<Unit, IrDeclarationParent
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent) {
|
||||
declaration.parent = data
|
||||
super.visitDeclaration(declaration, data)
|
||||
}
|
||||
|
||||
+2
-2
@@ -105,7 +105,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
||||
return expression
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
declaration.transformChildrenVoid(this)
|
||||
if (declaration.parent == irConstructor)
|
||||
declaration.parent = staticMethod
|
||||
@@ -142,7 +142,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
||||
statements.addAll((functionBody as IrBlockBody).statements)
|
||||
|
||||
transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
declaration.transformChildrenVoid(this)
|
||||
if (declaration.parent == function)
|
||||
declaration.parent = staticMethod
|
||||
|
||||
+1
-1
@@ -442,7 +442,7 @@ class LocalDeclarationsLowering(
|
||||
return super.visitDeclarationReference(expression)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
if (declaration is IrSymbolOwner && declaration in transformedDeclarations) {
|
||||
TODO()
|
||||
}
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ class SharedVariablesLowering(val context: BackendContext) : BodyLoweringPass {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent?) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent?) {
|
||||
super.visitDeclaration(declaration, declaration as? IrDeclarationParent ?: data)
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
|
||||
import org.jetbrains.kotlin.ir.builders.createTmpVariable
|
||||
import org.jetbrains.kotlin.ir.builders.irCall
|
||||
import org.jetbrains.kotlin.ir.builders.irGet
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSymbolDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
@@ -106,7 +103,7 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
if (declaration !is IrSymbolDeclaration<*>) {
|
||||
return super.visitDeclaration(declaration)
|
||||
}
|
||||
@@ -120,4 +117,4 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower
|
||||
return this@with
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ fun dumpIrElement(actionState: ActionState, data: IrElement, context: Any?): Str
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
if (declaration is IrDeclarationWithName && FqName(dumpOnlyFqName) == declaration.fqNameWhenAvailable) {
|
||||
dumpText += declaration.dump()
|
||||
} else {
|
||||
|
||||
@@ -12,7 +12,10 @@ import org.jetbrains.kotlin.ir.backend.js.utils.*
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
||||
import org.jetbrains.kotlin.ir.types.getClass
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
@@ -184,7 +187,7 @@ fun usefulDeclarations(roots: Iterable<IrDeclaration>, context: JsIrBackendConte
|
||||
// Skip
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
if (declaration !== it) declaration.enqueue(it, "roots' nested declaration")
|
||||
|
||||
super.visitDeclaration(declaration)
|
||||
@@ -437,4 +440,4 @@ private fun Collection<IrClass>.filterDescendantsOf(bases: Collection<IrClass>):
|
||||
}
|
||||
|
||||
return this.filter { overridesAnyBase(it) }
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ class ES6AddInternalParametersToConstructorPhase(val context: JsIrBackendContext
|
||||
context.mapping.constructorToInitFunction[constructor] = initFunction
|
||||
|
||||
initFunction.transformChildren(object : IrElementTransformerVoid() {
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
|
||||
declaration.parent = initFunction
|
||||
return declaration
|
||||
}
|
||||
|
||||
+4
-4
@@ -8,19 +8,19 @@ package org.jetbrains.kotlin.ir.backend.js.lower
|
||||
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||
import org.jetbrains.kotlin.backend.common.ir.addChild
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.getJsModule
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.getJsQualifier
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
|
||||
import org.jetbrains.kotlin.ir.util.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
private val BODILESS_BUILTIN_CLASSES = listOf(
|
||||
@@ -129,10 +129,10 @@ class MoveBodilessDeclarationsToSeparatePlaceLowering(private val context: JsIrB
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
context.externalDeclarations.add(declaration)
|
||||
super.visitDeclaration(declaration)
|
||||
}
|
||||
}, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -11,13 +11,15 @@ import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBranchImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrElseBranchImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.types.IrDynamicType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
|
||||
/**
|
||||
@@ -51,7 +53,7 @@ class MultipleCatchesLowering(private val context: JsIrBackendContext) : BodyLow
|
||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||
irBody.transform(object : IrElementTransformer<IrDeclarationParent> {
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent): IrStatement {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent): IrStatement {
|
||||
val parent = (declaration as? IrDeclarationParent) ?: data
|
||||
return super.visitDeclaration(declaration, parent)
|
||||
}
|
||||
@@ -118,4 +120,4 @@ class MultipleCatchesLowering(private val context: JsIrBackendContext) : BodyLow
|
||||
|
||||
}, container as? IrDeclarationParent ?: container.parent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower
|
||||
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
@@ -67,7 +68,7 @@ class DelegateToSyntheticPrimaryConstructor(context: JsCommonBackendContext) : B
|
||||
if (container is IrConstructor && !container.isPrimary) {
|
||||
container.parentAsClass.syntheticPrimaryConstructor?.let { primary ->
|
||||
val initializeTransformer = object : IrElementTransformerVoid() {
|
||||
override fun visitDeclaration(declaration: IrDeclaration) = declaration // optimize visiting
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement = declaration // optimize visiting
|
||||
|
||||
override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) = expression.run {
|
||||
IrDelegatingConstructorCallImpl(
|
||||
@@ -83,4 +84,4 @@ class DelegateToSyntheticPrimaryConstructor(context: JsCommonBackendContext) : B
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.backend.js.utils.isPure
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
|
||||
@@ -64,7 +65,7 @@ class TypeOperatorLowering(val context: JsIrBackendContext) : BodyLoweringPass {
|
||||
|
||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||
irBody.transformChildren(object : IrElementTransformer<IrDeclarationParent> {
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent) =
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: IrDeclarationParent) =
|
||||
super.visitDeclaration(declaration, declaration as? IrDeclarationParent ?: data)
|
||||
|
||||
override fun visitTypeOperator(expression: IrTypeOperatorCall, data: IrDeclarationParent): IrExpression {
|
||||
@@ -374,4 +375,4 @@ class TypeOperatorLowering(val context: JsIrBackendContext) : BodyLoweringPass {
|
||||
}
|
||||
}, container as? IrDeclarationParent ?: container.parent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@ class NameTables(
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
if (declaration is IrDeclarationWithName && declaration is IrSymbolOwner) {
|
||||
table.declareFreshName(declaration, declaration.name.asString())
|
||||
}
|
||||
|
||||
+2
-2
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.ir.backend.js.utils
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.util.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.ir.util.isPropertyAccessor
|
||||
@@ -30,7 +30,7 @@ class StableNamesCollector : IrElementVisitorVoid {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
super.visitDeclaration(declaration)
|
||||
|
||||
if (declaration !is IrDeclarationWithName)
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ class InventNamesForLocalClasses(private val context: JvmBackendContext) : FileL
|
||||
declaration.acceptChildren(this, data.makeLocal())
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: Data) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: Data) {
|
||||
if (declaration !is IrDeclarationWithName) {
|
||||
declaration.acceptChildren(this, data)
|
||||
return
|
||||
|
||||
+2
-2
@@ -11,8 +11,8 @@ import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
@@ -43,7 +43,7 @@ private class JvmArgumentNullabilityAssertionsLowering(context: JvmBackendContex
|
||||
override fun visitElement(element: IrElement, data: AssertionScope): IrElement =
|
||||
super.visitElement(element, AssertionScope.Enabled)
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: AssertionScope): IrStatement =
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: AssertionScope): IrStatement =
|
||||
super.visitDeclaration(declaration, AssertionScope.Enabled)
|
||||
|
||||
override fun visitTypeOperator(expression: IrTypeOperatorCall, data: AssertionScope): IrExpression =
|
||||
|
||||
+2
-5
@@ -6,10 +6,7 @@
|
||||
package org.jetbrains.kotlin.psi2ir.generators
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
|
||||
@@ -21,7 +18,7 @@ class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
if (declaration is IrTypeParametersContainer) {
|
||||
typeTranslator.enterScope(declaration)
|
||||
}
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrAnonymousInitializer : IrSymbolDeclaration<IrAnonymousInitializerSymbol> {
|
||||
abstract class IrAnonymousInitializer : IrDeclarationBase(), IrSymbolDeclaration<IrAnonymousInitializerSymbol> {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrClass :
|
||||
IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility,
|
||||
IrDeclarationBase(), IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility,
|
||||
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner {
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
|
||||
@@ -43,7 +43,9 @@ interface IrDeclaration : IrStatement, IrMutableAnnotationContainer {
|
||||
var parent: IrDeclarationParent
|
||||
|
||||
val factory: IrFactory
|
||||
}
|
||||
|
||||
abstract class IrDeclarationBase : IrDeclaration {
|
||||
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrStatement =
|
||||
accept(transformer, data) as IrStatement
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrEnumEntry : IrSymbolDeclaration<IrEnumEntrySymbol>, IrDeclarationWithName {
|
||||
abstract class IrEnumEntry : IrDeclarationBase(), IrSymbolDeclaration<IrEnumEntrySymbol>, IrDeclarationWithName {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: ClassDescriptor
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.ir.declarations
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrErrorDeclaration : IrDeclaration {
|
||||
abstract class IrErrorDeclaration : IrDeclarationBase() {
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitErrorDeclaration(this, data)
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrField :
|
||||
IrDeclarationBase(),
|
||||
IrSymbolDeclaration<IrFieldSymbol>,
|
||||
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner {
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrFunction :
|
||||
IrDeclarationBase(),
|
||||
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
|
||||
IrMetadataSourceOwner {
|
||||
|
||||
|
||||
+1
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrLocalDelegatedProperty :
|
||||
IrDeclarationBase(),
|
||||
IrDeclarationWithName,
|
||||
IrSymbolOwner,
|
||||
IrMetadataSourceOwner {
|
||||
|
||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrProperty : IrOverridableMember, IrMetadataSourceOwner {
|
||||
abstract class IrProperty : IrDeclarationBase(), IrOverridableMember, IrMetadataSourceOwner {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: PropertyDescriptor
|
||||
abstract override val symbol: IrPropertySymbol
|
||||
|
||||
@@ -10,7 +10,8 @@ import org.jetbrains.kotlin.ir.symbols.IrScriptSymbol
|
||||
|
||||
//TODO: make IrScript as IrPackageFragment, because script is used as a file, not as a class
|
||||
//NOTE: declarations and statements stored separately
|
||||
abstract class IrScript : IrSymbolDeclaration<IrScriptSymbol>, IrDeclarationContainer, IrDeclarationWithName, IrDeclarationParent {
|
||||
abstract class IrScript :
|
||||
IrDeclarationBase(), IrSymbolDeclaration<IrScriptSymbol>, IrDeclarationContainer, IrDeclarationWithName, IrDeclarationParent {
|
||||
abstract val statements: MutableList<IrStatement>
|
||||
|
||||
// NOTE: is the result of the FE conversion, because there script interpreted as a class and has receiver
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrTypeAlias :
|
||||
IrDeclarationBase(),
|
||||
IrSymbolDeclaration<IrTypeAliasSymbol>,
|
||||
IrDeclarationWithName,
|
||||
IrDeclarationWithVisibility,
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
abstract class IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol>, IrDeclarationWithName {
|
||||
abstract class IrTypeParameter : IrDeclarationBase(), IrSymbolDeclaration<IrTypeParameterSymbol>, IrDeclarationWithName {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: TypeParameterDescriptor
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
abstract class IrValueDeclaration : IrDeclarationWithName, IrSymbolOwner {
|
||||
abstract class IrValueDeclaration : IrDeclarationBase(), IrDeclarationWithName, IrSymbolOwner {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: ValueDescriptor
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
declaration.transformDeclarationsTo(this)
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration): IrStatement =
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement =
|
||||
throw IllegalArgumentException("Unsupported declaration type: $declaration")
|
||||
|
||||
override fun visitScript(declaration: IrScript): IrStatement {
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
|
||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
@@ -39,7 +39,7 @@ class PatchDeclarationParentsVisitor() : IrElementVisitorVoid {
|
||||
declarationParentsStack.pop()
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
patchParent(declaration)
|
||||
|
||||
if (declaration is IrDeclarationParent) {
|
||||
@@ -56,4 +56,4 @@ class PatchDeclarationParentsVisitor() : IrElementVisitorVoid {
|
||||
private fun patchParent(declaration: IrDeclaration) {
|
||||
declaration.parent = declarationParentsStack.peekFirst()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,8 +19,8 @@ package org.jetbrains.kotlin.ir.util
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
||||
@@ -340,7 +340,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false) : IrEl
|
||||
override fun visitElement(element: IrElement, data: Nothing?): String =
|
||||
"?ELEMENT? ${element::class.java.simpleName} $element"
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?): String =
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?): String =
|
||||
"?DECLARATION? ${declaration::class.java.simpleName} $declaration"
|
||||
|
||||
override fun visitModuleFragment(declaration: IrModuleFragment, data: Nothing?): String =
|
||||
|
||||
@@ -34,7 +34,7 @@ interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
|
||||
override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D): IrExternalPackageFragment =
|
||||
declaration.also { it.transformChildren(this, data) }
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: D): IrStatement =
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: D): IrStatement =
|
||||
declaration.also { it.transformChildren(this, data) }
|
||||
|
||||
override fun visitScript(declaration: IrScript, data: D) = visitDeclaration(declaration, data)
|
||||
|
||||
+2
-2
@@ -43,8 +43,8 @@ abstract class IrElementTransformerVoid : IrElementTransformer<Nothing?> {
|
||||
final override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: Nothing?): IrExternalPackageFragment =
|
||||
visitExternalPackageFragment(declaration)
|
||||
|
||||
open fun visitDeclaration(declaration: IrDeclaration): IrStatement = declaration.transformChildren()
|
||||
final override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?): IrStatement = visitDeclaration(declaration)
|
||||
open fun visitDeclaration(declaration: IrDeclarationBase): IrStatement = declaration.transformChildren()
|
||||
final override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?): IrStatement = visitDeclaration(declaration)
|
||||
|
||||
open fun visitScript(declaration: IrScript) = visitDeclaration(declaration)
|
||||
final override fun visitScript(declaration: IrScript, data: Nothing?) = visitScript(declaration)
|
||||
|
||||
@@ -28,7 +28,7 @@ interface IrElementVisitor<out R, in D> {
|
||||
fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D) = visitPackageFragment(declaration, data)
|
||||
fun visitScript(declaration: IrScript, data: D) = visitDeclaration(declaration, data)
|
||||
|
||||
fun visitDeclaration(declaration: IrDeclaration, data: D) = visitElement(declaration, data)
|
||||
fun visitDeclaration(declaration: IrDeclarationBase, data: D) = visitElement(declaration, data)
|
||||
fun visitClass(declaration: IrClass, data: D) = visitDeclaration(declaration, data)
|
||||
fun visitFunction(declaration: IrFunction, data: D) = visitDeclaration(declaration, data)
|
||||
fun visitSimpleFunction(declaration: IrSimpleFunction, data: D) = visitFunction(declaration, data)
|
||||
|
||||
@@ -37,8 +37,8 @@ interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
|
||||
fun visitFile(declaration: IrFile) = visitPackageFragment(declaration)
|
||||
override fun visitFile(declaration: IrFile, data: Nothing?) = visitFile(declaration)
|
||||
|
||||
fun visitDeclaration(declaration: IrDeclaration) = visitElement(declaration)
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?) = visitDeclaration(declaration)
|
||||
fun visitDeclaration(declaration: IrDeclarationBase) = visitElement(declaration)
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?) = visitDeclaration(declaration)
|
||||
|
||||
fun visitClass(declaration: IrClass) = visitDeclaration(declaration)
|
||||
override fun visitClass(declaration: IrClass, data: Nothing?) = visitClass(declaration)
|
||||
|
||||
+3
-3
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.common.serialization.mangle
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase
|
||||
import org.jetbrains.kotlin.ir.util.KotlinMangler
|
||||
import org.jetbrains.kotlin.ir.util.render
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
@@ -47,8 +48,7 @@ class ManglerChecker(vararg _manglers: KotlinMangler<IrDeclaration>) : IrElement
|
||||
return r
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
val exported = manglers.checkAllEqual(false, { isExportCheck(declaration) }) { m1, r1, m2, r2 ->
|
||||
error("${declaration.render()}\n ${m1.manglerName}: $r1\n ${m2.manglerName}: $r2\n")
|
||||
}
|
||||
@@ -69,4 +69,4 @@ class ManglerChecker(vararg _manglers: KotlinMangler<IrDeclaration>) : IrElement
|
||||
|
||||
declaration.acceptChildrenVoid(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ abstract class IrExportCheckerVisitor : IrElementVisitor<Boolean, Nothing?>, Kot
|
||||
|
||||
override fun visitElement(element: IrElement, data: Nothing?): Boolean = error("Should bot reach here ${element.render()}")
|
||||
|
||||
override fun visitDeclaration(declaration: IrDeclaration, data: Nothing?) = declaration.run { isExported(annotations, null) }
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?) = declaration.run { isExported(annotations, null) }
|
||||
|
||||
override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: Nothing?) = false
|
||||
override fun visitValueParameter(declaration: IrValueParameter, data: Nothing?) = false
|
||||
|
||||
@@ -181,7 +181,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
|
||||
}
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
override fun visitDeclaration(declaration: IrDeclaration) {
|
||||
override fun visitDeclaration(declaration: IrDeclarationBase) {
|
||||
if (declaration is IrSymbolOwner) {
|
||||
declaration.symbol.checkBinding("decl", declaration)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user