diff --git a/.idea/runConfigurations/Generate_IR_tree.xml b/.idea/runConfigurations/Generate_IR_tree.xml new file mode 100644 index 0000000000000..f52e79fa434e1 --- /dev/null +++ b/.idea/runConfigurations/Generate_IR_tree.xml @@ -0,0 +1,21 @@ + + + + + + + true + + + \ No newline at end of file diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt index 861cbb08d1741..fda4a0dcd90a9 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt @@ -110,33 +110,35 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG makeParameter(it.thisAsReceiverParameter, IrDeclarationOrigin.SCRIPT_IMPLICIT_RECEIVER, parametersIndex++) } - irScript.providedProperties = descriptor.scriptProvidedProperties.zip(descriptor.scriptProvidedPropertiesParameters) - .map { (providedProperty, parameter) -> - // TODO: initializer - // TODO: do not keep direct links - val type = providedProperty.type.toIrType() - val valueParameter = context.symbolTable.declareValueParameter( + descriptor.scriptProvidedProperties.zip(descriptor.scriptProvidedPropertiesParameters) { providedProperty, parameter -> + // TODO: initializer + // TODO: do not keep direct links + val type = providedProperty.type.toIrType() + val valueParameter = context.symbolTable.declareValueParameter( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, + IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, parameter, type + ) { symbol -> + context.irFactory.createValueParameter( UNDEFINED_OFFSET, UNDEFINED_OFFSET, - IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, parameter, type - ) { symbol -> - context.irFactory.createValueParameter( - UNDEFINED_OFFSET, UNDEFINED_OFFSET, - IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, symbol, descriptor.name, - parametersIndex, type, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false - ).also { it.parent = irScript } - } - parametersIndex++ - val irProperty = - PropertyGenerator(declarationGenerator).generateSyntheticProperty( - ktScript, - providedProperty, - valueParameter, - generateSyntheticAccessors = true - ) - irProperty.origin = IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY - irScript.statements += irProperty - valueParameter to irProperty.symbol + IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, symbol, descriptor.name, + parametersIndex, type, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false + ).also { it.parent = irScript } } + parametersIndex++ + val irProperty = + PropertyGenerator(declarationGenerator).generateSyntheticProperty( + ktScript, + providedProperty, + valueParameter, + generateSyntheticAccessors = true + ) + irProperty.origin = IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY + irScript.statements += irProperty + valueParameter to irProperty.symbol + }.unzip().let { (params, props) -> + irScript.providedProperties = props + irScript.providedPropertiesParameters = params + } irScript.constructor = with(IrFunctionBuilder().apply { isPrimary = true @@ -155,7 +157,7 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG addIfNotNull(irScript.earlierScriptsParameter) addAll(irScript.explicitCallParameters) addAll(irScript.implicitReceiversParameters) - irScript.providedProperties.forEach { add(it.first) } + addAll(irScript.providedPropertiesParameters) } irConstructor.parent = irScript irConstructor.metadata = DescriptorMetadataSource.Function(descriptor.unsubstitutedPrimaryConstructor) diff --git a/compiler/ir/ir.tree/build.gradle.kts b/compiler/ir/ir.tree/build.gradle.kts index 92652a4dbd8ae..0b46c02918c3c 100644 --- a/compiler/ir/ir.tree/build.gradle.kts +++ b/compiler/ir/ir.tree/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.ideaExt.idea + plugins { kotlin("jvm") id("jps-compatible") @@ -10,10 +12,57 @@ dependencies { implementation(project(":compiler:util")) implementation(project(":compiler:config")) + compileOnly(project("tree-generator")) // Provided, so that IDEA can recognize references to this module in KDoc. compileOnly(intellijCore()) } sourceSets { - "main" { projectDefault() } + "main" { + projectDefault() + this.java.srcDir("gen") + } "test" {} } + +val generatorClasspath by configurations.creating + +dependencies { + generatorClasspath(project("tree-generator")) +} + +val generationRoot = projectDir.resolve("gen") + +val generateTree by tasks.registering(NoDebugJavaExec::class) { + + val generatorRoot = "$projectDir/tree-generator/src/" + + val generatorConfigurationFiles = fileTree(generatorRoot) { + include("**/*.kt") + } + + inputs.files(generatorConfigurationFiles) + outputs.dirs(generationRoot) + + args(generationRoot) + workingDir = rootDir + classpath = generatorClasspath + main = "org.jetbrains.kotlin.ir.generator.MainKt" + systemProperties["line.separator"] = "\n" +} + +val compileKotlin by tasks + +compileKotlin.dependsOn(generateTree) + +tasks.withType> { + kotlinOptions { + freeCompilerArgs += "-Xinline-classes" + } +} + +if (kotlinBuildProperties.isInJpsBuildIdeaSync) { + apply(plugin = "idea") + idea { + this.module.generatedSourceDirs.add(generationRoot) + } +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrElement.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/IrElement.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrElement.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/IrElement.kt index 8d7b87453a947..f8450ad8a709e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrElement.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/IrElement.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.rootElement + */ interface IrElement { val startOffset: Int diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrStatement.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/IrStatement.kt similarity index 61% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrStatement.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/IrStatement.kt index dfb83cf93ea9f..ef7c2236a22e5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrStatement.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/IrStatement.kt @@ -3,6 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.statement + */ interface IrStatement : IrElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt index 3cd66756626e8..3b756f5980e09 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -12,9 +15,14 @@ import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.anonymousInitializer + */ abstract class IrAnonymousInitializer : IrDeclarationBase() { @ObsoleteDescriptorBasedAPI - abstract override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks + abstract override val descriptor: ClassDescriptor + abstract override val symbol: IrAnonymousInitializerSymbol abstract val isStatic: Boolean diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt index 5fca48285858a..32f20c7f54cff 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrAttributeContainer.kt @@ -3,17 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.IrElement +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.attributeContainer + */ interface IrAttributeContainer : IrElement { - /** - * An object which can be used as a key in the map in the backend-specific storage. If a brand new IR element is created, this property - * should be equal to that element itself. If an element is copied from some other element, its id should be copied as well. - * - * Note that an [attributeOwnerId] of any element must be an element, whose [attributeOwnerId] is itself. In other words, - * it shouldn't be needed to call this more than once to find the original attribute owner. - */ var attributeOwnerId: IrAttributeContainer } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrClass.kt similarity index 75% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrClass.kt index 0198982dfeb8c..fecf630e44022 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrClass.kt @@ -3,9 +3,16 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.SourceElement +import org.jetbrains.kotlin.descriptors.ValueClassRepresentation import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrSimpleType @@ -15,21 +22,32 @@ import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrClass : - IrDeclarationBase(), IrPossiblyExternalDeclaration, IrDeclarationWithVisibility, - IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.class + */ +abstract class IrClass : IrDeclarationBase(), IrPossiblyExternalDeclaration, + IrDeclarationWithVisibility, IrTypeParametersContainer, IrDeclarationContainer, + IrAttributeContainer, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassDescriptor + abstract override val symbol: IrClassSymbol abstract val kind: ClassKind + abstract var modality: Modality + abstract val isCompanion: Boolean + abstract val isInner: Boolean + abstract val isData: Boolean + abstract val isValue: Boolean + abstract val isExpect: Boolean + abstract val isFun: Boolean abstract val source: SourceElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt index ac878f7de280e..4b179fe03331c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor @@ -10,9 +13,14 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.constructor + */ abstract class IrConstructor : IrFunction() { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassConstructorDescriptor + abstract override val symbol: IrConstructorSymbol abstract val isPrimary: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt similarity index 79% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index d973d8430e9f6..73f35c38d35bf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -3,12 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declaration + */ interface IrDeclaration : IrStatement, IrSymbolOwner, IrMutableAnnotationContainer { @ObsoleteDescriptorBasedAPI val descriptor: DeclarationDescriptor diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt similarity index 55% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt index 2a34018debc2a..dc0b3006dbeaf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationBase.kt @@ -1,10 +1,17 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.IrElementBase +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declarationBase + */ abstract class IrDeclarationBase : IrElementBase(), IrDeclaration diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt similarity index 66% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt index 0c302a8f77af4..87a32526c673f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationContainer.kt @@ -3,8 +3,16 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations + +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declarationContainer + */ interface IrDeclarationContainer : IrDeclarationParent { val declarations: MutableList } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt similarity index 53% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt index 8969cb0a9154a..fd196f479e648 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationParent.kt @@ -1,10 +1,17 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.IrElement +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declarationParent + */ interface IrDeclarationParent : IrElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt similarity index 55% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt index 0f24f150938fc..cb0359db7ecd8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithName.kt @@ -1,12 +1,19 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.name.Name +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declarationWithName + */ interface IrDeclarationWithName : IrDeclaration { var name: Name } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt similarity index 58% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt index af8be92dfec04..cc7f430a772c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrDeclarationWithVisibility.kt @@ -1,12 +1,19 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.DescriptorVisibility +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declarationWithVisibility + */ interface IrDeclarationWithVisibility : IrDeclaration { var visibility: DescriptorVisibility } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt similarity index 89% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt index f06aae383bef6..e654781566bc5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassDescriptor @@ -12,14 +15,20 @@ import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.enumEntry + */ abstract class IrEnumEntry : IrDeclarationBase(), IrDeclarationWithName { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassDescriptor + abstract override val symbol: IrEnumEntrySymbol - abstract var correspondingClass: IrClass? abstract var initializerExpression: IrExpressionBody? + abstract var correspondingClass: IrClass? + override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitEnumEntry(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrErrorDeclaration.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrErrorDeclaration.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrErrorDeclaration.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrErrorDeclaration.kt index c70978557dacb..027da57a75e6e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrErrorDeclaration.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrErrorDeclaration.kt @@ -3,15 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.errorDeclaration + */ abstract class IrErrorDeclaration : IrDeclarationBase() { - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitErrorDeclaration(this, data) - override val symbol: IrSymbol get() = error("Should never be called") + + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitErrorDeclaration(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt similarity index 87% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt index 13ddedd26e298..0c777cacfe58f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol @@ -11,8 +14,13 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.externalPackageFragment + */ abstract class IrExternalPackageFragment : IrPackageFragment() { abstract override val symbol: IrExternalPackageFragmentSymbol + abstract val containerSource: DeserializedContainerSource? override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt index 189447807734d..3b3538239ee57 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt @@ -3,17 +3,24 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.fakeOverrideFunction + */ interface IrFakeOverrideFunction : IrDeclaration { override val symbol: IrSimpleFunctionSymbol var modality: Modality - fun acquireSymbol(symbol: IrSimpleFunctionSymbol): IrSimpleFunction - val isBound: Boolean + + fun acquireSymbol(symbol: IrSimpleFunctionSymbol): IrSimpleFunction } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt index e6f5b28c89b91..23691d97fa9b8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt @@ -3,19 +3,28 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.fakeOverrideProperty + */ interface IrFakeOverrideProperty : IrDeclaration { override val symbol: IrPropertySymbol var modality: Modality + var getter: IrSimpleFunction? - var setter: IrSimpleFunction? - fun acquireSymbol(symbol: IrPropertySymbol): IrProperty + var setter: IrSimpleFunction? val isBound: Boolean + + fun acquireSymbol(symbol: IrPropertySymbol): IrProperty } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrField.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrField.kt index 43e9c611cd330..b9d4bd5a3b84c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -14,16 +17,21 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrField : - IrDeclarationBase(), - IrPossiblyExternalDeclaration, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.field + */ +abstract class IrField : IrDeclarationBase(), IrPossiblyExternalDeclaration, + IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI abstract override val descriptor: PropertyDescriptor + abstract override val symbol: IrFieldSymbol abstract var type: IrType + abstract val isFinal: Boolean + abstract val isStatic: Boolean abstract var initializer: IrExpressionBody? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFile.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFile.kt index febba2518aa02..2a6ce87c0ae81 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFile.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.IrFileEntry @@ -11,7 +14,12 @@ import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrFile : IrPackageFragment(), IrMutableAnnotationContainer, IrMetadataSourceOwner { +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.file + */ +abstract class IrFile : IrPackageFragment(), IrMetadataSourceOwner, + IrMutableAnnotationContainer { abstract override val symbol: IrFileSymbol abstract val module: IrModuleFragment diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFunction.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index 720e854c9736b..8b286c5168c19 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -14,49 +17,47 @@ import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrFunction : - IrDeclarationBase(), - IrPossiblyExternalDeclaration, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget, - IrMemberWithContainerSource, - IrMetadataSourceOwner { - +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.function + */ +abstract class IrFunction : IrDeclarationBase(), IrPossiblyExternalDeclaration, + IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, + IrReturnTarget, IrMemberWithContainerSource, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI abstract override val descriptor: FunctionDescriptor + abstract override val symbol: IrFunctionSymbol - abstract val isInline: Boolean // NB: there's an inline constructor for Array and each primitive array class + abstract val isInline: Boolean + abstract val isExpect: Boolean abstract var returnType: IrType abstract var dispatchReceiverParameter: IrValueParameter? + abstract var extensionReceiverParameter: IrValueParameter? + abstract var valueParameters: List - /** - * The first `contextReceiverParametersCount` value parameters are context receivers - */ abstract var contextReceiverParametersCount: Int abstract var body: IrBody? override fun acceptChildren(visitor: IrElementVisitor, data: D) { typeParameters.forEach { it.accept(visitor, data) } - dispatchReceiverParameter?.accept(visitor, data) extensionReceiverParameter?.accept(visitor, data) valueParameters.forEach { it.accept(visitor, data) } - body?.accept(visitor, data) } override fun transformChildren(transformer: IrElementTransformer, data: D) { typeParameters = typeParameters.transformIfNeeded(transformer, data) - dispatchReceiverParameter = dispatchReceiverParameter?.transform(transformer, data) extensionReceiverParameter = extensionReceiverParameter?.transform(transformer, data) valueParameters = valueParameters.transformIfNeeded(transformer, data) - body = body?.transform(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt index 9d5d0edc19841..9ee126f0ef2b8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors @@ -12,21 +15,25 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrLocalDelegatedProperty : - IrDeclarationBase(), - IrDeclarationWithName, - IrSymbolOwner, - IrMetadataSourceOwner { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.localDelegatedProperty + */ +abstract class IrLocalDelegatedProperty : IrDeclarationBase(), IrDeclarationWithName, + IrSymbolOwner, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI abstract override val descriptor: VariableDescriptorWithAccessors + abstract override val symbol: IrLocalDelegatedPropertySymbol abstract var type: IrType + abstract val isVar: Boolean abstract var delegate: IrVariable + abstract var getter: IrSimpleFunction + abstract var setter: IrSimpleFunction? override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt similarity index 62% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt index d40849d0a87dc..2e89be1273f6a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrMemberWithContainerSource.kt @@ -1,12 +1,19 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.memberWithContainerSource + */ interface IrMemberWithContainerSource : IrDeclarationWithName { val containerSource: DeserializedContainerSource? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt similarity index 56% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt index b6d122bb1d662..13eb684526aec 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrMetadataSourceOwner.kt @@ -1,12 +1,19 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.IrElement +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.metadataSourceOwner + */ interface IrMetadataSourceOwner : IrElement { var metadata: MetadataSource? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt similarity index 79% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt index 0c7118b22b86b..51dcc52c815e4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt @@ -3,10 +3,14 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.IrBuiltIns +import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.util.transformInPlace @@ -14,10 +18,17 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name -abstract class IrModuleFragment : IrElementBase() { - abstract val name: Name +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.moduleFragment + */ +abstract class IrModuleFragment : IrElementBase(), IrElement { abstract val descriptor: ModuleDescriptor + + abstract val name: Name + abstract val irBuiltins: IrBuiltIns + abstract val files: MutableList override val startOffset: Int @@ -29,8 +40,8 @@ abstract class IrModuleFragment : IrElementBase() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitModuleFragment(this, data) - override fun transform(transformer: IrElementTransformer, data: D): IrModuleFragment = - accept(transformer, data) as IrModuleFragment + override fun transform(transformer: IrElementTransformer, data: D): + IrModuleFragment = accept(transformer, data) as IrModuleFragment override fun acceptChildren(visitor: IrElementVisitor, data: D) { files.forEach { it.accept(visitor, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt similarity index 62% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt index 937cda58b0378..5f39c783792dd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableDeclaration.kt @@ -1,14 +1,23 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.symbols.IrSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.overridableDeclaration + */ interface IrOverridableDeclaration : IrOverridableMember { override val symbol: S + val isFakeOverride: Boolean + var overriddenSymbols: List } diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt index a3cea11fd6ffc..1408948ce062c 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrOverridableMember.kt @@ -1,12 +1,20 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality -interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner { +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.overridableMember + */ +interface IrOverridableMember : IrDeclaration, IrDeclarationWithVisibility, + IrDeclarationWithName, IrSymbolOwner { val modality: Modality } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt similarity index 82% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt index d0ddc35caf4e1..612563f40e65b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor @@ -11,10 +14,15 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol import org.jetbrains.kotlin.name.FqName +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.packageFragment + */ abstract class IrPackageFragment : IrElementBase(), IrDeclarationContainer, IrSymbolOwner { + abstract override val symbol: IrPackageFragmentSymbol + @ObsoleteDescriptorBasedAPI abstract val packageFragmentDescriptor: PackageFragmentDescriptor - abstract override val symbol: IrPackageFragmentSymbol abstract val fqName: FqName } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt similarity index 53% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt index 996d12d0e17cb..7a00179c33a63 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPossiblyExternalDeclaration.kt @@ -1,10 +1,18 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations + +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.possiblyExternalDeclaration + */ interface IrPossiblyExternalDeclaration : IrDeclarationWithName { val isExternal: Boolean } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt similarity index 74% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt index 0621e8b10b9bf..3d9735de48ace 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrProperty.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -11,27 +14,34 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrProperty : - IrDeclarationBase(), - IrPossiblyExternalDeclaration, - IrOverridableDeclaration, - IrMetadataSourceOwner, - IrAttributeContainer, - IrMemberWithContainerSource { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.property + */ +abstract class IrProperty : IrDeclarationBase(), IrPossiblyExternalDeclaration, + IrOverridableDeclaration, IrMetadataSourceOwner, IrAttributeContainer, + IrMemberWithContainerSource { @ObsoleteDescriptorBasedAPI abstract override val descriptor: PropertyDescriptor + abstract override val symbol: IrPropertySymbol abstract val isVar: Boolean + abstract val isConst: Boolean + abstract val isLateinit: Boolean + abstract val isDelegated: Boolean + abstract val isExpect: Boolean + abstract override val isFakeOverride: Boolean abstract var backingField: IrField? + abstract var getter: IrSimpleFunction? + abstract var setter: IrSimpleFunction? override fun accept(visitor: IrElementVisitor, data: D): R = @@ -45,7 +55,7 @@ abstract class IrProperty : override fun transformChildren(transformer: IrElementTransformer, data: D) { backingField = backingField?.transform(transformer, data) as? IrField - getter = getter?.run { transform(transformer, data) as IrSimpleFunction } - setter = setter?.run { transform(transformer, data) as IrSimpleFunction } + getter = getter?.transform(transformer, data) as? IrSimpleFunction + setter = setter?.transform(transformer, data) as? IrSimpleFunction } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt index 773f93f412578..5cab2c94becf9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrReturnTarget.kt @@ -3,15 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.returnTarget + */ interface IrReturnTarget : IrSymbolOwner { @ObsoleteDescriptorBasedAPI val descriptor: FunctionDescriptor override val symbol: IrReturnTargetSymbol -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrScript.kt similarity index 70% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrScript.kt index 08d7bf2722338..41f8d48ee4958 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrScript.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.expressions.IrStatementContainer @@ -10,20 +13,19 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrScriptSymbol import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -//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 : - IrDeclarationBase(), IrDeclarationWithName, - IrDeclarationParent, IrStatementContainer, IrMetadataSourceOwner { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.script + */ +abstract class IrScript : IrDeclarationBase(), IrDeclarationWithName, IrDeclarationParent, + IrStatementContainer, IrMetadataSourceOwner { abstract override val symbol: IrScriptSymbol - // NOTE: is the result of the FE conversion, because there script interpreted as a class and has receiver - // TODO: consider removing from here and handle appropriately in the lowering abstract var thisReceiver: IrValueParameter abstract var baseClass: IrType @@ -32,7 +34,9 @@ abstract class IrScript : abstract var implicitReceiversParameters: List - abstract var providedProperties: List> + abstract var providedProperties: List + + abstract var providedPropertiesParameters: List abstract var resultProperty: IrPropertySymbol? @@ -52,16 +56,18 @@ abstract class IrScript : thisReceiver.accept(visitor, data) explicitCallParameters.forEach { it.accept(visitor, data) } implicitReceiversParameters.forEach { it.accept(visitor, data) } - providedProperties.forEach { it.first.accept(visitor, data) } + providedPropertiesParameters.forEach { it.accept(visitor, data) } earlierScriptsParameter?.accept(visitor, data) } override fun transformChildren(transformer: IrElementTransformer, data: D) { statements.transformInPlace(transformer, data) thisReceiver = thisReceiver.transform(transformer, data) - explicitCallParameters = explicitCallParameters.map { it.transform(transformer, data) } - implicitReceiversParameters = implicitReceiversParameters.map { it.transform(transformer, data) } - providedProperties = providedProperties.map { it.first.transform(transformer, data) to it.second } + explicitCallParameters = explicitCallParameters.transformIfNeeded(transformer, data) + implicitReceiversParameters = implicitReceiversParameters.transformIfNeeded(transformer, + data) + providedPropertiesParameters = providedPropertiesParameters.transformIfNeeded(transformer, + data) earlierScriptsParameter = earlierScriptsParameter?.transform(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt similarity index 74% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt index 3b4af5f698f5f..d97691784f22b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt @@ -3,23 +3,31 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrSimpleFunction : - IrFunction(), - IrOverridableDeclaration, - IrAttributeContainer { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.simpleFunction + */ +abstract class IrSimpleFunction : IrFunction(), + IrOverridableDeclaration, IrAttributeContainer { abstract override val symbol: IrSimpleFunctionSymbol abstract val isTailrec: Boolean + abstract val isSuspend: Boolean + abstract override val isFakeOverride: Boolean + abstract val isOperator: Boolean + abstract val isInfix: Boolean abstract var correspondingPropertySymbol: IrPropertySymbol? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt similarity index 59% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt index 68afee9b97ddf..1d8222597b464 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrSymbolOwner.kt @@ -1,13 +1,20 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.symbols.IrSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.symbolOwner + */ interface IrSymbolOwner : IrElement { val symbol: IrSymbol } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt index 46ed4d8bf73c5..1ffedcaef5c91 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor @@ -13,17 +16,19 @@ import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrTypeAlias : - IrDeclarationBase(), - IrDeclarationWithName, - IrDeclarationWithVisibility, - IrTypeParametersContainer { - +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.typeAlias + */ +abstract class IrTypeAlias : IrDeclarationBase(), IrDeclarationWithName, + IrDeclarationWithVisibility, IrTypeParametersContainer { @ObsoleteDescriptorBasedAPI abstract override val descriptor: TypeAliasDescriptor + abstract override val symbol: IrTypeAliasSymbol abstract val isActual: Boolean + abstract var expandedType: IrType override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt similarity index 82% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt index ea152e644c766..215df855c1f35 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor @@ -13,19 +16,27 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.types.Variance +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.typeParameter + */ abstract class IrTypeParameter : IrDeclarationBase(), IrDeclarationWithName { @ObsoleteDescriptorBasedAPI abstract override val descriptor: TypeParameterDescriptor + abstract override val symbol: IrTypeParameterSymbol abstract val variance: Variance + abstract val index: Int + abstract val isReified: Boolean + abstract var superTypes: List override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitTypeParameter(this, data) - override fun transform(transformer: IrElementTransformer, data: D): IrTypeParameter = - transformer.visitTypeParameter(this, data) as IrTypeParameter + override fun transform(transformer: IrElementTransformer, data: D): + IrTypeParameter = accept(transformer, data) as IrTypeParameter } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParametersContainer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeParametersContainer.kt similarity index 67% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParametersContainer.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeParametersContainer.kt index 8bbaa8de87b7b..d9f8dfe9244c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParametersContainer.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrTypeParametersContainer.kt @@ -3,8 +3,16 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations + +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.typeParametersContainer + */ interface IrTypeParametersContainer : IrDeclaration, IrDeclarationParent { var typeParameters: List } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt similarity index 56% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt index 8338558677e56..82879de187d1f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrValueDeclaration.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ValueDescriptor @@ -10,12 +13,17 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.types.IrType -abstract class IrValueDeclaration : IrDeclarationBase(), IrDeclarationWithName, IrSymbolOwner { +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.valueDeclaration + */ +interface IrValueDeclaration : IrDeclarationWithName, IrSymbolOwner { @ObsoleteDescriptorBasedAPI - abstract override val descriptor: ValueDescriptor + override val descriptor: ValueDescriptor + + override val symbol: IrValueSymbol - abstract override val symbol: IrValueSymbol - abstract var type: IrType + var type: IrType - abstract val isAssignable: Boolean + val isAssignable: Boolean } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt similarity index 75% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt index dd6e0e4757f93..f0352cbe79030 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ParameterDescriptor @@ -13,20 +16,24 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrValueParameter : IrValueDeclaration() { +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.valueParameter + */ +abstract class IrValueParameter : IrDeclarationBase(), IrValueDeclaration { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ParameterDescriptor + abstract override val symbol: IrValueParameterSymbol abstract val index: Int + abstract var varargElementType: IrType? + abstract val isCrossinline: Boolean + abstract val isNoinline: Boolean - // if true parameter is not included into IdSignature. - // Skipping hidden params makes IrFunction be look similar to FE. - // NOTE: it is introduced to fix KT-40980 because more clear solution was not possible to implement. - // Once we are able to load any top-level declaration from klib this hack should be deprecated and removed. abstract val isHidden: Boolean abstract var defaultValue: IrExpressionBody? @@ -34,8 +41,8 @@ abstract class IrValueParameter : IrValueDeclaration() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitValueParameter(this, data) - override fun transform(transformer: IrElementTransformer, data: D): IrValueParameter = - transformer.visitValueParameter(this, data) as IrValueParameter + override fun transform(transformer: IrElementTransformer, data: D): + IrValueParameter = accept(transformer, data) as IrValueParameter override fun acceptChildren(visitor: IrElementVisitor, data: D) { defaultValue?.accept(visitor, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrVariable.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrVariable.kt index 70f9d0c6cdbec..8c29bc79c6e7d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrVariable.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptor @@ -12,13 +15,20 @@ import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrVariable : IrValueDeclaration() { +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.variable + */ +abstract class IrVariable : IrDeclarationBase(), IrValueDeclaration { @ObsoleteDescriptorBasedAPI abstract override val descriptor: VariableDescriptor + abstract override val symbol: IrVariableSymbol abstract val isVar: Boolean + abstract val isConst: Boolean + abstract val isLateinit: Boolean abstract var initializer: IrExpression? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBlock.kt similarity index 76% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBlock.kt index d938a63c40150..7ce84da48cad0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBlock.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.block + */ abstract class IrBlock : IrContainerExpression() { override val isTransparentScope: Boolean get() = false diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt similarity index 85% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt index 5cef586005163..4fb5b7bd7a93c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBlockBody.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrFactory @@ -10,6 +13,10 @@ import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.blockBody + */ abstract class IrBlockBody : IrBody(), IrStatementContainer { abstract val factory: IrFactory diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBody.kt similarity index 65% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBody.kt index 734ca28907c8e..b6e1c54a462d9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBody.kt @@ -3,12 +3,20 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + 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 -abstract class IrBody : IrElementBase() { +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.body + */ +abstract class IrBody : IrElementBase(), IrElement { override fun transform(transformer: IrElementTransformer, data: D): IrBody = accept(transformer, data) as IrBody } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBranch.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBranch.kt index 6f42b0b8e6bc7..f427e76d3a51e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBranch.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBranch.kt @@ -3,27 +3,36 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + 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 -abstract class IrBranch : IrElementBase() { +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.branch + */ +abstract class IrBranch : IrElementBase(), IrElement { abstract var condition: IrExpression + abstract var result: IrExpression override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitBranch(this, data) + override fun transform(transformer: IrElementTransformer, data: D): IrBranch = + accept(transformer, data) as IrBranch + override fun acceptChildren(visitor: IrElementVisitor, data: D) { condition.accept(visitor, data) result.accept(visitor, data) } - override fun transform(transformer: IrElementTransformer, data: D): IrBranch = - transformer.visitBranch(this, data) - override fun transformChildren(transformer: IrElementTransformer, data: D) { condition = condition.transform(transformer, data) result = result.transform(transformer, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBreak.kt similarity index 74% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBreak.kt index 7f9873856dc04..5ad7b5f3e8704 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreak.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBreak.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.break + */ abstract class IrBreak : IrBreakContinue() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitBreak(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt similarity index 67% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt index 6266de0fe6c8c..e48a717908df2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrBreakContinue.kt @@ -3,8 +3,16 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions + +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.breakContinue + */ abstract class IrBreakContinue : IrExpression() { abstract var loop: IrLoop diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCall.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCall.kt index dac334ecdef67..b62efc57a0509 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCall.kt @@ -3,14 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.call + */ abstract class IrCall : IrFunctionAccessExpression() { abstract override val symbol: IrSimpleFunctionSymbol + abstract val superQualifierSymbol: IrClassSymbol? override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt similarity index 72% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt index 65cb993e120e0..aaff578fb8f1f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.name.Name +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.callableReference + */ abstract class IrCallableReference : IrMemberAccessExpression() { abstract val referencedName: Name } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCatch.kt similarity index 79% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCatch.kt index 5c88e38d09117..92f4bfcf067b9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCatch.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrCatch.kt @@ -3,28 +3,37 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + 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 import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrCatch : IrElementBase() { +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.catch + */ +abstract class IrCatch : IrElementBase(), IrElement { abstract var catchParameter: IrVariable + abstract var result: IrExpression override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitCatch(this, data) + override fun transform(transformer: IrElementTransformer, data: D): IrCatch = + accept(transformer, data) as IrCatch + override fun acceptChildren(visitor: IrElementVisitor, data: D) { catchParameter.accept(visitor, data) result.accept(visitor, data) } - override fun transform(transformer: IrElementTransformer, data: D): IrCatch = - super.transform(transformer, data) as IrCatch - override fun transformChildren(transformer: IrElementTransformer, data: D) { catchParameter = catchParameter.transform(transformer, data) as IrVariable result = result.transform(transformer, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt similarity index 80% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt index 69c020ec43a1f..2ff7ab3e5bb8b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrClassReference.kt @@ -3,14 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.classReference + */ abstract class IrClassReference : IrDeclarationReference() { abstract override val symbol: IrClassifierSymbol + abstract var classType: IrType override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrComposite.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrComposite.kt index 8239312b55a85..d8803d7986ac6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrComposite.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrComposite.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.composite + */ abstract class IrComposite : IrContainerExpression() { override val isTransparentScope: Boolean get() = true diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConst.kt similarity index 76% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConst.kt index f51e28d3b7f74..d8c48e1a75296 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConst.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConst.kt @@ -3,12 +3,20 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.const + */ abstract class IrConst : IrExpression() { abstract val kind: IrConstKind + abstract val value: T override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt similarity index 75% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt index adb8a53c07625..d6bcee957733c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantArray.kt @@ -3,12 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.constantArray + */ abstract class IrConstantArray : IrConstantValue() { abstract val elements: MutableList @@ -16,10 +23,10 @@ abstract class IrConstantArray : IrConstantValue() { visitor.visitConstantArray(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { - elements.forEach { value -> value.accept(visitor, data) } + elements.forEach { it.accept(visitor, data) } } override fun transformChildren(transformer: IrElementTransformer, data: D) { - elements.transformInPlace { value -> value.transform(transformer, data) } + elements.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt index ff5a60ef429f6..aceb4874d5647 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantObject.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -11,19 +14,25 @@ import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.constantObject + */ abstract class IrConstantObject : IrConstantValue() { abstract val constructor: IrConstructorSymbol + abstract val valueArguments: MutableList + abstract val typeArguments: List override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitConstantObject(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { - valueArguments.forEach { value -> value.accept(visitor, data) } + valueArguments.forEach { it.accept(visitor, data) } } override fun transformChildren(transformer: IrElementTransformer, data: D) { - valueArguments.transformInPlace { it.transform(transformer, data) } + valueArguments.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt index c5af488bf4c24..890271e7cc5d2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantPrimitive.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.constantPrimitive + */ abstract class IrConstantPrimitive : IrConstantValue() { abstract var value: IrConst<*> diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt similarity index 70% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt index 632cf1930b3f6..455961dd43a9c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstantValue.kt @@ -3,9 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions + +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.constantValue + */ abstract class IrConstantValue : IrExpression() { abstract fun contentEquals(other: IrConstantValue): Boolean + abstract fun contentHashCode(): Int } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt index 9437d58e9d5d4..6747a8272e081 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt @@ -3,12 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.constructorCall + */ abstract class IrConstructorCall : IrFunctionAccessExpression() { abstract override val symbol: IrConstructorSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt index f982c9ddbc050..e8f36f178124c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrContainerExpression.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.IrStatement @@ -10,8 +13,13 @@ import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.containerExpression + */ abstract class IrContainerExpression : IrExpression(), IrStatementContainer { abstract val origin: IrStatementOrigin? + abstract val isTransparentScope: Boolean override val statements: MutableList = ArrayList(2) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrContinue.kt similarity index 74% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrContinue.kt index 3e624917131cc..b20024e5d1c72 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrContinue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrContinue.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.continue + */ abstract class IrContinue : IrBreakContinue() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitContinue(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt similarity index 68% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt index 62298e747504e..9f2a322668c7d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDeclarationReference.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.declarationReference + */ abstract class IrDeclarationReference : IrExpression() { abstract val symbol: IrSymbol } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt index a856067e01656..23f68d85ca10e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.delegatingConstructorCall + */ abstract class IrDelegatingConstructorCall : IrFunctionAccessExpression() { abstract override val symbol: IrConstructorSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt index 2255c9e66f4f2..1db13beea3f81 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDoWhileLoop.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.doWhileLoop + */ abstract class IrDoWhileLoop : IrLoop() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitDoWhileLoop(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt similarity index 63% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt index 9979eaa27aace..8b0f64962d5f3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicExpression.kt @@ -3,6 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.dynamicExpression + */ abstract class IrDynamicExpression : IrExpression() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt index 90f9a872f45b5..8ffab1698f759 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicMemberExpression.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.dynamicMemberExpression + */ abstract class IrDynamicMemberExpression : IrDynamicExpression() { abstract val memberName: String diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt similarity index 74% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt index 53030fd9a4c3c..837fcde4f517e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrDynamicOperatorExpression.kt @@ -3,11 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.dynamicOperatorExpression + */ abstract class IrDynamicOperatorExpression : IrDynamicExpression() { abstract val operator: IrDynamicOperator @@ -20,15 +28,11 @@ abstract class IrDynamicOperatorExpression : IrDynamicExpression() { override fun acceptChildren(visitor: IrElementVisitor, data: D) { receiver.accept(visitor, data) - for (valueArgument in arguments) { - valueArgument.accept(visitor, data) - } + arguments.forEach { it.accept(visitor, data) } } override fun transformChildren(transformer: IrElementTransformer, data: D) { receiver = receiver.transform(transformer, data) - for (i in arguments.indices) { - arguments[i] = arguments[i].transform(transformer, data) - } + arguments.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt similarity index 70% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt index c34c3abba7d26..d2042932affd0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrElseBranch.kt @@ -3,15 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.elseBranch + */ abstract class IrElseBranch : IrBranch() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitElseBranch(this, data) - override fun transform(transformer: IrElementTransformer, data: D): IrElseBranch = - transformer.visitElseBranch(this, data) + override fun transform(transformer: IrElementTransformer, data: D): IrElseBranch + = accept(transformer, data) as IrElseBranch } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt index ae61bf4de3ae8..2ed2cb6f16db3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.enumConstructorCall + */ abstract class IrEnumConstructorCall : IrFunctionAccessExpression() { abstract override val symbol: IrConstructorSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt index adab53085671b..fe5565ad17949 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrErrorCallExpression.kt @@ -3,13 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.errorCallExpression + */ abstract class IrErrorCallExpression : IrErrorExpression() { abstract var explicitReceiver: IrExpression? + abstract val arguments: MutableList override fun accept(visitor: IrElementVisitor, data: D): R = @@ -22,8 +31,6 @@ abstract class IrErrorCallExpression : IrErrorExpression() { override fun transformChildren(transformer: IrElementTransformer, data: D) { explicitReceiver = explicitReceiver?.transform(transformer, data) - arguments.forEachIndexed { i, irExpression -> - arguments[i] = irExpression.transform(transformer, data) - } + arguments.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt similarity index 75% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt index e01b69c3a77d3..3a1077a54a27b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.errorExpression + */ abstract class IrErrorExpression : IrExpression() { abstract val description: String diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrExpression.kt similarity index 71% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrExpression.kt index 941a5351a6c09..86303163f9f1b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrExpression.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.IrElementBase @@ -11,12 +14,16 @@ import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -abstract class IrExpression : IrElementBase(), IrStatement, IrVarargElement, IrAttributeContainer { - @Suppress("LeakingThis") +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.expression + */ +abstract class IrExpression : IrElementBase(), IrStatement, IrVarargElement, + IrAttributeContainer { override var attributeOwnerId: IrAttributeContainer = this abstract var type: IrType - override fun transform(transformer: IrElementTransformer, data: D): IrExpression = - accept(transformer, data) as IrExpression + override fun transform(transformer: IrElementTransformer, data: D): IrExpression + = accept(transformer, data) as IrExpression } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt similarity index 79% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt index 11de31b03360a..b40d78f28b171 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrExpressionBody.kt @@ -3,12 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.expressionBody + */ abstract class IrExpressionBody : IrBody() { abstract val factory: IrFactory @@ -17,8 +24,8 @@ abstract class IrExpressionBody : IrBody() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitExpressionBody(this, data) - override fun transform(transformer: IrElementTransformer, data: D): IrExpressionBody = - accept(transformer, data) as IrExpressionBody + override fun transform(transformer: IrElementTransformer, data: D): + IrExpressionBody = accept(transformer, data) as IrExpressionBody override fun acceptChildren(visitor: IrElementVisitor, data: D) { expression.accept(visitor, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt index e19534d4747c3..f90aa05c48493 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFieldAccessExpression.kt @@ -3,16 +3,24 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.fieldAccessExpression + */ abstract class IrFieldAccessExpression : IrDeclarationReference() { abstract override val symbol: IrFieldSymbol abstract val superQualifierSymbol: IrClassSymbol? var receiver: IrExpression? = null + abstract val origin: IrStatementOrigin? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt similarity index 70% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt index 5328c1d6524cf..ca6c1b6979988 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.functionAccessExpression + */ abstract class IrFunctionAccessExpression : IrMemberAccessExpression() { abstract var contextReceiversCount: Int } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt similarity index 85% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt index 53fd6735fb343..3c87e88cb5ff9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionExpression.kt @@ -3,12 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.functionExpression + */ abstract class IrFunctionExpression : IrExpression() { abstract val origin: IrStatementOrigin diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt index 5edca4cc503a5..4515cc27b37ad 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.functionReference + */ abstract class IrFunctionReference : IrCallableReference() { abstract val reflectionTarget: IrFunctionSymbol? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt index 28dfb5b4a330e..604bfdcd0db7e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.getClass + */ abstract class IrGetClass : IrExpression() { abstract var argument: IrExpression diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt similarity index 78% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt index 134b7bd079742..5be5b4312bb6d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetEnumValue.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.getEnumValue + */ abstract class IrGetEnumValue : IrGetSingletonValue() { abstract override val symbol: IrEnumEntrySymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetField.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetField.kt index d02ae855d1f2c..28375391ade12 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetField.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetField.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.getField + */ abstract class IrGetField : IrFieldAccessExpression() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitGetField(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt index a80fc6ffe5784..a75709ba97d06 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetObjectValue.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.getObjectValue + */ abstract class IrGetObjectValue : IrGetSingletonValue() { abstract override val symbol: IrClassSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt similarity index 64% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt index 5783e90abfb4b..821688f803b46 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetSingletonValue.kt @@ -3,6 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.getSingletonValue + */ abstract class IrGetSingletonValue : IrDeclarationReference() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt similarity index 74% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt index f0f79075a0dd5..e15b0917acd58 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrGetValue.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.getValue + */ abstract class IrGetValue : IrValueAccessExpression() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitGetValue(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt index 8011b52383cea..52beb815d64fd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrInstanceInitializerCall.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.instanceInitializerCall + */ abstract class IrInstanceInitializerCall : IrExpression() { abstract val classSymbol: IrClassSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt similarity index 72% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt index a30a5db44bbbb..d14538aae72a6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol @@ -10,9 +13,16 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrLocalDelegatedPropertyReference : IrCallableReference() { +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.localDelegatedPropertyReference + */ +abstract class IrLocalDelegatedPropertyReference : + IrCallableReference() { abstract val delegate: IrVariableSymbol + abstract val getter: IrSimpleFunctionSymbol + abstract val setter: IrSimpleFunctionSymbol? override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrLoop.kt similarity index 66% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrLoop.kt index b61a8c1191a10..dd747ef759593 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrLoop.kt @@ -3,12 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions + +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.loop + */ abstract class IrLoop : IrExpression() { abstract val origin: IrStatementOrigin? var body: IrExpression? = null - lateinit var condition: IrExpression + + abstract var condition: IrExpression + var label: String? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt similarity index 82% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt index bc25024667d17..d7d47e0cc7e46 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol @@ -10,9 +13,15 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.propertyReference + */ abstract class IrPropertyReference : IrCallableReference() { abstract val field: IrFieldSymbol? + abstract val getter: IrSimpleFunctionSymbol? + abstract val setter: IrSimpleFunctionSymbol? override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt similarity index 76% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt index 3b5ca6e544f97..051734c8204c6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrRawFunctionReference.kt @@ -3,16 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor /** - * Platform-specific low-level reference to function. - * - * On JS platform it represents a plain reference to JavaScript function. - * On JVM platform it represents a MethodHandle constant. + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.rawFunctionReference */ abstract class IrRawFunctionReference : IrDeclarationReference() { abstract override val symbol: IrFunctionSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrReturn.kt similarity index 85% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrReturn.kt index 1832eab3c4599..9fbf2df9bfe3e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturn.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrReturn.kt @@ -3,14 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.return + */ abstract class IrReturn : IrExpression() { abstract var value: IrExpression + abstract val returnTargetSymbol: IrReturnTargetSymbol override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt similarity index 80% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt index 6c214f0e75c87..ac2d535c18a3c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrReturnableBlock.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrReturnTarget @@ -10,6 +13,10 @@ import org.jetbrains.kotlin.ir.declarations.IrSymbolOwner import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.returnableBlock + */ abstract class IrReturnableBlock : IrBlock(), IrSymbolOwner, IrReturnTarget { abstract override val symbol: IrReturnableBlockSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSetField.kt similarity index 85% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSetField.kt index 90000fa224b99..b259ace57ab0b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetField.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSetField.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.setField + */ abstract class IrSetField : IrFieldAccessExpression() { abstract var value: IrExpression diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt similarity index 85% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt index 7a437b0fbaa35..10eda9eff06a0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSetValue.kt @@ -3,14 +3,22 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.setValue + */ abstract class IrSetValue : IrValueAccessExpression() { abstract override val symbol: IrValueSymbol + abstract var value: IrExpression override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt similarity index 79% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt index 012064677f79e..d977f8298d7fb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSpreadElement.kt @@ -3,21 +3,27 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + 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 +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.spreadElement + */ abstract class IrSpreadElement : IrElementBase(), IrVarargElement { abstract var expression: IrExpression override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitSpreadElement(this, data) - override fun transform(transformer: IrElementTransformer, data: D): IrElement = - accept(transformer, data) as IrSpreadElement + override fun transform(transformer: IrElementTransformer, data: D): + IrSpreadElement = accept(transformer, data) as IrSpreadElement override fun acceptChildren(visitor: IrElementVisitor, data: D) { expression.accept(visitor, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementContainer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrStatementContainer.kt similarity index 56% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementContainer.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrStatementContainer.kt index 6893e14d8a976..1f0cfe815d353 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementContainer.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrStatementContainer.kt @@ -3,10 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement -interface IrStatementContainer { +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.statementContainer + */ +interface IrStatementContainer : IrElement { val statements: MutableList } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt similarity index 75% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt index 16fcadd1b5546..292be9c00862d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt @@ -3,11 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.stringConcatenation + */ abstract class IrStringConcatenation : IrExpression() { abstract val arguments: MutableList @@ -19,8 +27,6 @@ abstract class IrStringConcatenation : IrExpression() { } override fun transformChildren(transformer: IrElementTransformer, data: D) { - arguments.forEachIndexed { i, irExpression -> - arguments[i] = irExpression.transform(transformer, data) - } + arguments.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt similarity index 85% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt index cd22cf82f3608..fcdcc62f41ee3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSuspendableExpression.kt @@ -3,13 +3,21 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.suspendableExpression + */ abstract class IrSuspendableExpression : IrExpression() { abstract var suspensionPointId: IrExpression + abstract var result: IrExpression override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt index e55c1b416f46c..3ad78c6e38c8c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSuspensionPoint.kt @@ -3,15 +3,24 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.suspensionPoint + */ abstract class IrSuspensionPoint : IrExpression() { abstract var suspensionPointIdParameter: IrVariable + abstract var result: IrExpression + abstract var resumeResult: IrExpression override fun accept(visitor: IrElementVisitor, data: D): R = @@ -24,7 +33,8 @@ abstract class IrSuspensionPoint : IrExpression() { } override fun transformChildren(transformer: IrElementTransformer, data: D) { - suspensionPointIdParameter = suspensionPointIdParameter.transform(transformer, data) as IrVariable + suspensionPointIdParameter = suspensionPointIdParameter.transform(transformer, data) as + IrVariable result = result.transform(transformer, data) resumeResult = resumeResult.transform(transformer, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt similarity index 75% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt index 747d9e7f90eb1..1d0f37ffeea1e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrSyntheticBody.kt @@ -3,10 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.syntheticBody + */ abstract class IrSyntheticBody : IrBody() { abstract val kind: IrSyntheticBodyKind diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrThrow.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrThrow.kt similarity index 83% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrThrow.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrThrow.kt index 92d88d2a05bab..c7164a20b1731 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrThrow.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrThrow.kt @@ -3,11 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.throw + */ abstract class IrThrow : IrExpression() { abstract var value: IrExpression diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrTry.kt similarity index 81% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrTry.kt index 1ec8da00a182c..a3dec8fdc9b9f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTry.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrTry.kt @@ -3,11 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.try + */ abstract class IrTry : IrExpression() { abstract var tryResult: IrExpression @@ -26,9 +34,7 @@ abstract class IrTry : IrExpression() { override fun transformChildren(transformer: IrElementTransformer, data: D) { tryResult = tryResult.transform(transformer, data) - catches.forEachIndexed { i, irCatch -> - catches[i] = irCatch.transform(transformer, data) - } + catches.transformInPlace(transformer, data) finallyExpression = finallyExpression?.transform(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt similarity index 86% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt index 73266a69115b0..3ec88805c8497 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrTypeOperatorCall.kt @@ -3,6 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -10,10 +13,17 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.typeOperatorCall + */ abstract class IrTypeOperatorCall : IrExpression() { abstract val operator: IrTypeOperator + abstract var argument: IrExpression + abstract var typeOperand: IrType + abstract val typeOperandClassifier: IrClassifierSymbol override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt similarity index 72% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt index ca5e1d5416fe0..11c606ad83814 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrValueAccessExpression.kt @@ -3,11 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrValueSymbol +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.valueAccessExpression + */ abstract class IrValueAccessExpression : IrDeclarationReference() { abstract override val symbol: IrValueSymbol + abstract val origin: IrStatementOrigin? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrVararg.kt similarity index 77% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrVararg.kt index 6ebb1b389ce13..8d39f36aefda8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrVararg.kt @@ -3,12 +3,20 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.vararg + */ abstract class IrVararg : IrExpression() { abstract var varargElementType: IrType @@ -22,8 +30,6 @@ abstract class IrVararg : IrExpression() { } override fun transformChildren(transformer: IrElementTransformer, data: D) { - elements.forEachIndexed { i, irVarargElement -> - elements[i] = irVarargElement.transform(transformer, data) as IrVarargElement - } + elements.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt similarity index 65% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt index 6ca1c3dd51a86..e7c1c331f958f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrVarargElement.kt @@ -3,8 +3,15 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.IrElement +/** + * A non-leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.varargElement + */ interface IrVarargElement : IrElement diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrWhen.kt similarity index 76% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrWhen.kt index f3f0f77115d7a..fc5b6548b08da 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrWhen.kt @@ -3,11 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions +import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.when + */ abstract class IrWhen : IrExpression() { abstract val origin: IrStatementOrigin? @@ -21,8 +29,6 @@ abstract class IrWhen : IrExpression() { } override fun transformChildren(transformer: IrElementTransformer, data: D) { - branches.forEachIndexed { i, irBranch -> - branches[i] = irBranch.transform(transformer, data) - } + branches.transformInPlace(transformer, data) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt similarity index 84% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt index 5ea62c7f34721..dfd325f76d929 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/expressions/IrWhileLoop.kt @@ -3,22 +3,29 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +/** + * A leaf IR tree element. + * @sample org.jetbrains.kotlin.ir.generator.IrTree.whileLoop + */ abstract class IrWhileLoop : IrLoop() { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitWhileLoop(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { - condition.accept(visitor, data) body?.accept(visitor, data) + condition.accept(visitor, data) } override fun transformChildren(transformer: IrElementTransformer, data: D) { - condition = condition.transform(transformer, data) body = body?.transform(transformer, data) + condition = condition.transform(transformer, data) } } diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt index 45ffddc622830..a03346f500262 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt @@ -1,25 +1,97 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.visitors import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrConstructor +import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase +import org.jetbrains.kotlin.ir.declarations.IrEnumEntry +import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration +import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrField +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty +import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrProperty +import org.jetbrains.kotlin.ir.declarations.IrScript +import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.IrTypeAlias +import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.expressions.IrBlock +import org.jetbrains.kotlin.ir.expressions.IrBlockBody +import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrBranch +import org.jetbrains.kotlin.ir.expressions.IrBreak +import org.jetbrains.kotlin.ir.expressions.IrBreakContinue +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrCallableReference +import org.jetbrains.kotlin.ir.expressions.IrCatch +import org.jetbrains.kotlin.ir.expressions.IrClassReference +import org.jetbrains.kotlin.ir.expressions.IrComposite +import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.IrConstantArray +import org.jetbrains.kotlin.ir.expressions.IrConstantObject +import org.jetbrains.kotlin.ir.expressions.IrConstantPrimitive +import org.jetbrains.kotlin.ir.expressions.IrConstantValue +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrContainerExpression +import org.jetbrains.kotlin.ir.expressions.IrContinue +import org.jetbrains.kotlin.ir.expressions.IrDeclarationReference +import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrDoWhileLoop +import org.jetbrains.kotlin.ir.expressions.IrDynamicExpression +import org.jetbrains.kotlin.ir.expressions.IrDynamicMemberExpression +import org.jetbrains.kotlin.ir.expressions.IrDynamicOperatorExpression +import org.jetbrains.kotlin.ir.expressions.IrElseBranch +import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrErrorCallExpression +import org.jetbrains.kotlin.ir.expressions.IrErrorExpression +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionReference +import org.jetbrains.kotlin.ir.expressions.IrGetClass +import org.jetbrains.kotlin.ir.expressions.IrGetEnumValue +import org.jetbrains.kotlin.ir.expressions.IrGetField +import org.jetbrains.kotlin.ir.expressions.IrGetObjectValue +import org.jetbrains.kotlin.ir.expressions.IrGetSingletonValue +import org.jetbrains.kotlin.ir.expressions.IrGetValue +import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall +import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference +import org.jetbrains.kotlin.ir.expressions.IrLoop +import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrPropertyReference +import org.jetbrains.kotlin.ir.expressions.IrRawFunctionReference +import org.jetbrains.kotlin.ir.expressions.IrReturn +import org.jetbrains.kotlin.ir.expressions.IrSetField +import org.jetbrains.kotlin.ir.expressions.IrSetValue +import org.jetbrains.kotlin.ir.expressions.IrSpreadElement +import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation +import org.jetbrains.kotlin.ir.expressions.IrSuspendableExpression +import org.jetbrains.kotlin.ir.expressions.IrSuspensionPoint +import org.jetbrains.kotlin.ir.expressions.IrSyntheticBody +import org.jetbrains.kotlin.ir.expressions.IrThrow +import org.jetbrains.kotlin.ir.expressions.IrTry +import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall +import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrVararg +import org.jetbrains.kotlin.ir.expressions.IrWhen +import org.jetbrains.kotlin.ir.expressions.IrWhileLoop interface IrElementTransformer : IrElementVisitor { override fun visitElement(element: IrElement, data: D): IrElement { @@ -27,130 +99,230 @@ interface IrElementTransformer : IrElementVisitor { return element } - override fun visitModuleFragment(declaration: IrModuleFragment, data: D): IrModuleFragment { + override fun visitDeclaration(declaration: IrDeclarationBase, data: D): IrStatement { declaration.transformChildren(this, data) return declaration } - override fun visitFile(declaration: IrFile, data: D): IrFile { + override fun visitValueParameter(declaration: IrValueParameter, data: D) = + visitDeclaration(declaration, data) + + override fun visitClass(declaration: IrClass, data: D) = visitDeclaration(declaration, + data) + + override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D) = + visitDeclaration(declaration, data) + + override fun visitTypeParameter(declaration: IrTypeParameter, data: D) = + visitDeclaration(declaration, data) + + override fun visitFunction(declaration: IrFunction, data: D) = + visitDeclaration(declaration, data) + + override fun visitConstructor(declaration: IrConstructor, data: D) = + visitFunction(declaration, data) + + override fun visitEnumEntry(declaration: IrEnumEntry, data: D) = + visitDeclaration(declaration, data) + + override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: D) = + visitDeclaration(declaration, data) + + override fun visitField(declaration: IrField, data: D) = visitDeclaration(declaration, + data) + + override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, + data: D) = visitDeclaration(declaration, data) + + override fun visitModuleFragment(declaration: IrModuleFragment, data: D): + IrModuleFragment { declaration.transformChildren(this, data) return declaration } - override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D): IrExternalPackageFragment { + override fun visitProperty(declaration: IrProperty, data: D) = + visitDeclaration(declaration, data) + + override fun visitScript(declaration: IrScript, data: D) = + visitDeclaration(declaration, data) + + override fun visitSimpleFunction(declaration: IrSimpleFunction, data: D) = + visitFunction(declaration, data) + + override fun visitTypeAlias(declaration: IrTypeAlias, data: D) = + visitDeclaration(declaration, data) + + override fun visitVariable(declaration: IrVariable, data: D) = + visitDeclaration(declaration, data) + + override fun visitPackageFragment(declaration: IrPackageFragment, data: D) = + visitElement(declaration, data) + + override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, + data: D): IrExternalPackageFragment { declaration.transformChildren(this, data) return declaration } - override fun visitDeclaration(declaration: IrDeclarationBase, data: D): IrStatement { + override fun visitFile(declaration: IrFile, data: D): IrFile { declaration.transformChildren(this, data) return declaration } - override fun visitScript(declaration: IrScript, data: D) = visitDeclaration(declaration, data) - override fun visitClass(declaration: IrClass, data: D) = visitDeclaration(declaration, data) - override fun visitFunction(declaration: IrFunction, data: D) = visitDeclaration(declaration, data) - override fun visitSimpleFunction(declaration: IrSimpleFunction, data: D) = visitFunction(declaration, data) - override fun visitConstructor(declaration: IrConstructor, data: D) = visitFunction(declaration, data) - override fun visitProperty(declaration: IrProperty, data: D) = visitDeclaration(declaration, data) - override fun visitField(declaration: IrField, data: D) = visitDeclaration(declaration, data) - override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: D) = visitDeclaration(declaration, data) - override fun visitEnumEntry(declaration: IrEnumEntry, data: D) = visitDeclaration(declaration, data) - override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D) = visitDeclaration(declaration, data) - override fun visitVariable(declaration: IrVariable, data: D) = visitDeclaration(declaration, data) - override fun visitTypeParameter(declaration: IrTypeParameter, data: D) = visitDeclaration(declaration, data) - override fun visitValueParameter(declaration: IrValueParameter, data: D) = visitDeclaration(declaration, data) - override fun visitTypeAlias(declaration: IrTypeAlias, data: D) = visitDeclaration(declaration, data) + override fun visitExpression(expression: IrExpression, data: D): IrExpression { + expression.transformChildren(this, data) + return expression + } override fun visitBody(body: IrBody, data: D): IrBody { body.transformChildren(this, data) return body } - override fun visitExpressionBody(body: IrExpressionBody, data: D) = visitBody(body, data) + override fun visitExpressionBody(body: IrExpressionBody, data: D) = visitBody(body, + data) + override fun visitBlockBody(body: IrBlockBody, data: D) = visitBody(body, data) + + override fun visitDeclarationReference(expression: IrDeclarationReference, data: D) = + visitExpression(expression, data) + + override fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: D): + IrElement = visitDeclarationReference(expression, data) + + override fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: D): + IrElement = visitMemberAccess(expression, data) + + override fun visitConstructorCall(expression: IrConstructorCall, data: D): IrElement = + visitFunctionAccess(expression, data) + + override fun visitSingletonReference(expression: IrGetSingletonValue, data: D) = + visitDeclarationReference(expression, data) + + override fun visitGetObjectValue(expression: IrGetObjectValue, data: D) = + visitSingletonReference(expression, data) + + override fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = + visitSingletonReference(expression, data) + + override fun visitRawFunctionReference(expression: IrRawFunctionReference, data: D) = + visitDeclarationReference(expression, data) + + override fun visitContainerExpression(expression: IrContainerExpression, data: D) = + visitExpression(expression, data) + + override fun visitBlock(expression: IrBlock, data: D) = + visitContainerExpression(expression, data) + + override fun visitComposite(expression: IrComposite, data: D) = + visitContainerExpression(expression, data) + override fun visitSyntheticBody(body: IrSyntheticBody, data: D) = visitBody(body, data) - override fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D) = visitExpression(expression, data) - override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D) = visitExpression(expression, data) + override fun visitBreakContinue(jump: IrBreakContinue, data: D) = visitExpression(jump, + data) - override fun visitExpression(expression: IrExpression, data: D): IrExpression { - expression.transformChildren(this, data) - return expression - } + override fun visitBreak(jump: IrBreak, data: D) = visitBreakContinue(jump, data) + + override fun visitContinue(jump: IrContinue, data: D) = visitBreakContinue(jump, data) + + override fun visitCall(expression: IrCall, data: D) = visitFunctionAccess(expression, + data) + + override fun visitCallableReference(expression: IrCallableReference<*>, data: D) = + visitMemberAccess(expression, data) + + override fun visitFunctionReference(expression: IrFunctionReference, data: D) = + visitCallableReference(expression, data) - override fun visitConst(expression: IrConst<*>, data: D) = visitExpression(expression, data) - override fun visitVararg(expression: IrVararg, data: D) = visitExpression(expression, data) - override fun visitConstantValue(expression: IrConstantValue, data: D): IrConstantValue { + override fun visitPropertyReference(expression: IrPropertyReference, data: D) = + visitCallableReference(expression, data) + + override + fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, + data: D) = visitCallableReference(expression, data) + + override fun visitClassReference(expression: IrClassReference, data: D) = + visitDeclarationReference(expression, data) + + override fun visitConst(expression: IrConst<*>, data: D) = visitExpression(expression, + data) + + override fun visitConstantValue(expression: IrConstantValue, data: D): + IrConstantValue { expression.transformChildren(this, data) return expression } - override fun visitConstantObject(expression: IrConstantObject, data: D) = visitConstantValue(expression, data) - override fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D) = visitConstantValue(expression, data) - override fun visitConstantArray(expression: IrConstantArray, data: D) = visitConstantValue(expression, data) + override fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D) = + visitConstantValue(expression, data) - override fun visitSpreadElement(spread: IrSpreadElement, data: D): IrSpreadElement { - spread.transformChildren(this, data) - return spread - } + override fun visitConstantObject(expression: IrConstantObject, data: D) = + visitConstantValue(expression, data) - override fun visitContainerExpression(expression: IrContainerExpression, data: D) = visitExpression(expression, data) - override fun visitBlock(expression: IrBlock, data: D) = visitContainerExpression(expression, data) - override fun visitComposite(expression: IrComposite, data: D) = visitContainerExpression(expression, data) - override fun visitStringConcatenation(expression: IrStringConcatenation, data: D) = visitExpression(expression, data) + override fun visitConstantArray(expression: IrConstantArray, data: D) = + visitConstantValue(expression, data) - override fun visitDeclarationReference(expression: IrDeclarationReference, data: D) = visitExpression(expression, data) - override fun visitSingletonReference(expression: IrGetSingletonValue, data: D) = visitDeclarationReference(expression, data) - override fun visitGetObjectValue(expression: IrGetObjectValue, data: D) = visitSingletonReference(expression, data) - override fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = visitSingletonReference(expression, data) - override fun visitValueAccess(expression: IrValueAccessExpression, data: D) = visitDeclarationReference(expression, data) - override fun visitGetValue(expression: IrGetValue, data: D) = visitValueAccess(expression, data) - override fun visitSetValue(expression: IrSetValue, data: D) = visitValueAccess(expression, data) - override fun visitFieldAccess(expression: IrFieldAccessExpression, data: D) = visitDeclarationReference(expression, data) - override fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data) - override fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data) - override fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: D): IrElement = - visitDeclarationReference(expression, data) + override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, + data: D) = visitFunctionAccess(expression, data) - override fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: D): IrElement = visitMemberAccess(expression, data) - override fun visitCall(expression: IrCall, data: D) = visitFunctionAccess(expression, data) - override fun visitConstructorCall(expression: IrConstructorCall, data: D): IrElement = visitFunctionAccess(expression, data) - override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitFunctionAccess(expression, data) - override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitFunctionAccess(expression, data) - override fun visitGetClass(expression: IrGetClass, data: D) = visitExpression(expression, data) + override fun visitDynamicExpression(expression: IrDynamicExpression, data: D) = + visitExpression(expression, data) - override fun visitCallableReference(expression: IrCallableReference<*>, data: D) = visitMemberAccess(expression, data) - override fun visitFunctionReference(expression: IrFunctionReference, data: D) = visitCallableReference(expression, data) - override fun visitPropertyReference(expression: IrPropertyReference, data: D) = visitCallableReference(expression, data) - override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, data: D) = - visitCallableReference(expression, data) + override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, + data: D) = visitDynamicExpression(expression, data) - override fun visitRawFunctionReference(expression: IrRawFunctionReference, data: D) = visitDeclarationReference(expression, data) + override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, + data: D) = visitDynamicExpression(expression, data) - override fun visitFunctionExpression(expression: IrFunctionExpression, data: D): IrElement = visitExpression(expression, data) + override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = + visitFunctionAccess(expression, data) - override fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data) + override fun visitErrorExpression(expression: IrErrorExpression, data: D) = + visitExpression(expression, data) - override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data) + override fun visitErrorCallExpression(expression: IrErrorCallExpression, data: D) = + visitErrorExpression(expression, data) - override fun visitTypeOperator(expression: IrTypeOperatorCall, data: D) = visitExpression(expression, data) + override fun visitFieldAccess(expression: IrFieldAccessExpression, data: D) = + visitDeclarationReference(expression, data) - override fun visitWhen(expression: IrWhen, data: D) = visitExpression(expression, data) + override fun visitGetField(expression: IrGetField, data: D) = + visitFieldAccess(expression, data) - override fun visitBranch(branch: IrBranch, data: D): IrBranch { - branch.transformChildren(this, data) - return branch - } + override fun visitSetField(expression: IrSetField, data: D) = + visitFieldAccess(expression, data) - override fun visitElseBranch(branch: IrElseBranch, data: D): IrElseBranch { - branch.transformChildren(this, data) - return branch - } + override fun visitFunctionExpression(expression: IrFunctionExpression, data: D): + IrElement = visitExpression(expression, data) + + override fun visitGetClass(expression: IrGetClass, data: D) = + visitExpression(expression, data) + + override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, + data: D) = visitExpression(expression, data) override fun visitLoop(loop: IrLoop, data: D) = visitExpression(loop, data) + override fun visitWhileLoop(loop: IrWhileLoop, data: D) = visitLoop(loop, data) + override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: D) = visitLoop(loop, data) + + override fun visitReturn(expression: IrReturn, data: D) = visitExpression(expression, + data) + + override fun visitStringConcatenation(expression: IrStringConcatenation, data: D) = + visitExpression(expression, data) + + override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D) = + visitExpression(expression, data) + + override fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D) = + visitExpression(expression, data) + + override fun visitThrow(expression: IrThrow, data: D) = visitExpression(expression, + data) + override fun visitTry(aTry: IrTry, data: D) = visitExpression(aTry, data) override fun visitCatch(aCatch: IrCatch, data: D): IrCatch { @@ -158,18 +330,35 @@ interface IrElementTransformer : IrElementVisitor { return aCatch } - override fun visitBreakContinue(jump: IrBreakContinue, data: D) = visitExpression(jump, data) - override fun visitBreak(jump: IrBreak, data: D) = visitBreakContinue(jump, data) - override fun visitContinue(jump: IrContinue, data: D) = visitBreakContinue(jump, data) + override fun visitTypeOperator(expression: IrTypeOperatorCall, data: D) = + visitExpression(expression, data) + + override fun visitValueAccess(expression: IrValueAccessExpression, data: D) = + visitDeclarationReference(expression, data) - override fun visitReturn(expression: IrReturn, data: D) = visitExpression(expression, data) - override fun visitThrow(expression: IrThrow, data: D) = visitExpression(expression, data) + override fun visitGetValue(expression: IrGetValue, data: D) = + visitValueAccess(expression, data) - override fun visitDynamicExpression(expression: IrDynamicExpression, data: D) = visitExpression(expression, data) - override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: D) = visitDynamicExpression(expression, data) - override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: D) = visitDynamicExpression(expression, data) + override fun visitSetValue(expression: IrSetValue, data: D) = + visitValueAccess(expression, data) + + override fun visitVararg(expression: IrVararg, data: D) = visitExpression(expression, + data) + + override fun visitSpreadElement(spread: IrSpreadElement, data: D): IrSpreadElement { + spread.transformChildren(this, data) + return spread + } - override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: D) = visitDeclaration(declaration, data) - override fun visitErrorExpression(expression: IrErrorExpression, data: D) = visitExpression(expression, data) - override fun visitErrorCallExpression(expression: IrErrorCallExpression, data: D) = visitErrorExpression(expression, data) + override fun visitWhen(expression: IrWhen, data: D) = visitExpression(expression, data) + + override fun visitBranch(branch: IrBranch, data: D): IrBranch { + branch.transformChildren(this, data) + return branch + } + + override fun visitElseBranch(branch: IrElseBranch, data: D): IrElseBranch { + branch.transformChildren(this, data) + return branch + } } diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt index 9dbda6c425b78..131fbcb3a5de6 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt @@ -1,126 +1,321 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.visitors import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrConstructor +import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase +import org.jetbrains.kotlin.ir.declarations.IrEnumEntry +import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration +import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrField +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty +import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrProperty +import org.jetbrains.kotlin.ir.declarations.IrScript +import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.IrTypeAlias +import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.expressions.IrBlock +import org.jetbrains.kotlin.ir.expressions.IrBlockBody +import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrBranch +import org.jetbrains.kotlin.ir.expressions.IrBreak +import org.jetbrains.kotlin.ir.expressions.IrBreakContinue +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrCallableReference +import org.jetbrains.kotlin.ir.expressions.IrCatch +import org.jetbrains.kotlin.ir.expressions.IrClassReference +import org.jetbrains.kotlin.ir.expressions.IrComposite +import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.IrConstantArray +import org.jetbrains.kotlin.ir.expressions.IrConstantObject +import org.jetbrains.kotlin.ir.expressions.IrConstantPrimitive +import org.jetbrains.kotlin.ir.expressions.IrConstantValue +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrContainerExpression +import org.jetbrains.kotlin.ir.expressions.IrContinue +import org.jetbrains.kotlin.ir.expressions.IrDeclarationReference +import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrDoWhileLoop +import org.jetbrains.kotlin.ir.expressions.IrDynamicExpression +import org.jetbrains.kotlin.ir.expressions.IrDynamicMemberExpression +import org.jetbrains.kotlin.ir.expressions.IrDynamicOperatorExpression +import org.jetbrains.kotlin.ir.expressions.IrElseBranch +import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrErrorCallExpression +import org.jetbrains.kotlin.ir.expressions.IrErrorExpression +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionReference +import org.jetbrains.kotlin.ir.expressions.IrGetClass +import org.jetbrains.kotlin.ir.expressions.IrGetEnumValue +import org.jetbrains.kotlin.ir.expressions.IrGetField +import org.jetbrains.kotlin.ir.expressions.IrGetObjectValue +import org.jetbrains.kotlin.ir.expressions.IrGetSingletonValue +import org.jetbrains.kotlin.ir.expressions.IrGetValue +import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall +import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference +import org.jetbrains.kotlin.ir.expressions.IrLoop +import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrPropertyReference +import org.jetbrains.kotlin.ir.expressions.IrRawFunctionReference +import org.jetbrains.kotlin.ir.expressions.IrReturn +import org.jetbrains.kotlin.ir.expressions.IrSetField +import org.jetbrains.kotlin.ir.expressions.IrSetValue +import org.jetbrains.kotlin.ir.expressions.IrSpreadElement +import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation +import org.jetbrains.kotlin.ir.expressions.IrSuspendableExpression +import org.jetbrains.kotlin.ir.expressions.IrSuspensionPoint +import org.jetbrains.kotlin.ir.expressions.IrSyntheticBody +import org.jetbrains.kotlin.ir.expressions.IrThrow +import org.jetbrains.kotlin.ir.expressions.IrTry +import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall +import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrVararg +import org.jetbrains.kotlin.ir.expressions.IrWhen +import org.jetbrains.kotlin.ir.expressions.IrWhileLoop interface IrElementVisitor { fun visitElement(element: IrElement, data: D): R - fun visitModuleFragment(declaration: IrModuleFragment, data: D) = visitElement(declaration, data) - fun visitPackageFragment(declaration: IrPackageFragment, data: D) = visitElement(declaration, data) - fun visitFile(declaration: IrFile, data: D) = visitPackageFragment(declaration, data) - fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D) = visitPackageFragment(declaration, data) - fun visitScript(declaration: IrScript, data: D) = visitDeclaration(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) - fun visitConstructor(declaration: IrConstructor, data: D) = visitFunction(declaration, data) - fun visitProperty(declaration: IrProperty, data: D) = visitDeclaration(declaration, data) - fun visitField(declaration: IrField, data: D) = visitDeclaration(declaration, data) - fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: D) = visitDeclaration(declaration, data) - fun visitVariable(declaration: IrVariable, data: D) = visitDeclaration(declaration, data) - fun visitEnumEntry(declaration: IrEnumEntry, data: D) = visitDeclaration(declaration, data) - fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D) = visitDeclaration(declaration, data) - fun visitTypeParameter(declaration: IrTypeParameter, data: D) = visitDeclaration(declaration, data) - fun visitValueParameter(declaration: IrValueParameter, data: D) = visitDeclaration(declaration, data) - fun visitTypeAlias(declaration: IrTypeAlias, data: D) = visitDeclaration(declaration, data) - - fun visitBody(body: IrBody, data: D) = visitElement(body, data) - fun visitExpressionBody(body: IrExpressionBody, data: D) = visitBody(body, data) - fun visitBlockBody(body: IrBlockBody, data: D) = visitBody(body, data) - fun visitSyntheticBody(body: IrSyntheticBody, data: D) = visitBody(body, data) - - fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D) = visitExpression(expression, data) - fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D) = visitExpression(expression, data) - - fun visitExpression(expression: IrExpression, data: D) = visitElement(expression, data) - fun visitConst(expression: IrConst<*>, data: D) = visitExpression(expression, data) - fun visitConstantValue(expression: IrConstantValue, data: D) = visitExpression(expression, data) - fun visitConstantObject(expression: IrConstantObject, data: D) = visitConstantValue(expression, data) - fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D) = visitConstantValue(expression, data) - fun visitConstantArray(expression: IrConstantArray, data: D) = visitConstantValue(expression, data) - fun visitVararg(expression: IrVararg, data: D) = visitExpression(expression, data) - fun visitSpreadElement(spread: IrSpreadElement, data: D) = visitElement(spread, data) - - fun visitContainerExpression(expression: IrContainerExpression, data: D) = visitExpression(expression, data) - fun visitBlock(expression: IrBlock, data: D) = visitContainerExpression(expression, data) - fun visitComposite(expression: IrComposite, data: D) = visitContainerExpression(expression, data) - fun visitStringConcatenation(expression: IrStringConcatenation, data: D) = visitExpression(expression, data) - - fun visitDeclarationReference(expression: IrDeclarationReference, data: D) = visitExpression(expression, data) - fun visitSingletonReference(expression: IrGetSingletonValue, data: D) = visitDeclarationReference(expression, data) - fun visitGetObjectValue(expression: IrGetObjectValue, data: D) = visitSingletonReference(expression, data) - fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = visitSingletonReference(expression, data) - fun visitValueAccess(expression: IrValueAccessExpression, data: D) = visitDeclarationReference(expression, data) - fun visitGetValue(expression: IrGetValue, data: D) = visitValueAccess(expression, data) - fun visitSetValue(expression: IrSetValue, data: D) = visitValueAccess(expression, data) - fun visitFieldAccess(expression: IrFieldAccessExpression, data: D) = visitDeclarationReference(expression, data) - fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data) - fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data) - - fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: D) = visitDeclarationReference(expression, data) - fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: D) = visitMemberAccess(expression, data) - fun visitCall(expression: IrCall, data: D) = visitFunctionAccess(expression, data) - fun visitConstructorCall(expression: IrConstructorCall, data: D) = visitFunctionAccess(expression, data) - fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitFunctionAccess(expression, data) - fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitFunctionAccess(expression, data) - fun visitGetClass(expression: IrGetClass, data: D) = visitExpression(expression, data) - - fun visitCallableReference(expression: IrCallableReference<*>, data: D) = visitMemberAccess(expression, data) - fun visitFunctionReference(expression: IrFunctionReference, data: D) = visitCallableReference(expression, data) - fun visitPropertyReference(expression: IrPropertyReference, data: D) = visitCallableReference(expression, data) - fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, data: D) = - visitCallableReference(expression, data) - - fun visitRawFunctionReference(expression: IrRawFunctionReference, data: D) = visitDeclarationReference(expression, data) - - fun visitFunctionExpression(expression: IrFunctionExpression, data: D) = visitExpression(expression, data) - - fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data) - - fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data) - - fun visitTypeOperator(expression: IrTypeOperatorCall, data: D) = visitExpression(expression, data) - - fun visitWhen(expression: IrWhen, data: D) = visitExpression(expression, data) - fun visitBranch(branch: IrBranch, data: D) = visitElement(branch, data) - fun visitElseBranch(branch: IrElseBranch, data: D) = visitBranch(branch, data) - fun visitLoop(loop: IrLoop, data: D) = visitExpression(loop, data) - fun visitWhileLoop(loop: IrWhileLoop, data: D) = visitLoop(loop, data) - fun visitDoWhileLoop(loop: IrDoWhileLoop, data: D) = visitLoop(loop, data) - fun visitTry(aTry: IrTry, data: D) = visitExpression(aTry, data) - fun visitCatch(aCatch: IrCatch, data: D) = visitElement(aCatch, data) - - fun visitBreakContinue(jump: IrBreakContinue, data: D) = visitExpression(jump, data) - fun visitBreak(jump: IrBreak, data: D) = visitBreakContinue(jump, data) - fun visitContinue(jump: IrContinue, data: D) = visitBreakContinue(jump, data) - - fun visitReturn(expression: IrReturn, data: D) = visitExpression(expression, data) - fun visitThrow(expression: IrThrow, data: D) = visitExpression(expression, data) - - fun visitDynamicExpression(expression: IrDynamicExpression, data: D) = visitExpression(expression, data) - fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: D) = visitDynamicExpression(expression, data) - fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: D) = visitDynamicExpression(expression, data) - - fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: D) = visitDeclaration(declaration, data) - fun visitErrorExpression(expression: IrErrorExpression, data: D) = visitExpression(expression, data) - fun visitErrorCallExpression(expression: IrErrorCallExpression, data: D) = visitErrorExpression(expression, data) + + fun visitDeclaration(declaration: IrDeclarationBase, data: D): R = + visitElement(declaration, data) + + fun visitValueParameter(declaration: IrValueParameter, data: D): R = + visitDeclaration(declaration, data) + + fun visitClass(declaration: IrClass, data: D): R = visitDeclaration(declaration, data) + + fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D): R = + visitDeclaration(declaration, data) + + fun visitTypeParameter(declaration: IrTypeParameter, data: D): R = + visitDeclaration(declaration, data) + + fun visitFunction(declaration: IrFunction, data: D): R = visitDeclaration(declaration, + data) + + fun visitConstructor(declaration: IrConstructor, data: D): R = + visitFunction(declaration, data) + + fun visitEnumEntry(declaration: IrEnumEntry, data: D): R = + visitDeclaration(declaration, data) + + fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: D): R = + visitDeclaration(declaration, data) + + fun visitField(declaration: IrField, data: D): R = visitDeclaration(declaration, data) + + fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: D): R = + visitDeclaration(declaration, data) + + fun visitModuleFragment(declaration: IrModuleFragment, data: D): R = + visitElement(declaration, data) + + fun visitProperty(declaration: IrProperty, data: D): R = visitDeclaration(declaration, + data) + + fun visitScript(declaration: IrScript, data: D): R = visitDeclaration(declaration, + data) + + fun visitSimpleFunction(declaration: IrSimpleFunction, data: D): R = + visitFunction(declaration, data) + + fun visitTypeAlias(declaration: IrTypeAlias, data: D): R = + visitDeclaration(declaration, data) + + fun visitVariable(declaration: IrVariable, data: D): R = visitDeclaration(declaration, + data) + + fun visitPackageFragment(declaration: IrPackageFragment, data: D): R = + visitElement(declaration, data) + + fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: D): R = + visitPackageFragment(declaration, data) + + fun visitFile(declaration: IrFile, data: D): R = visitPackageFragment(declaration, + data) + + fun visitExpression(expression: IrExpression, data: D): R = visitElement(expression, + data) + + fun visitBody(body: IrBody, data: D): R = visitElement(body, data) + + fun visitExpressionBody(body: IrExpressionBody, data: D): R = visitBody(body, data) + + fun visitBlockBody(body: IrBlockBody, data: D): R = visitBody(body, data) + + fun visitDeclarationReference(expression: IrDeclarationReference, data: D): R = + visitExpression(expression, data) + + fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: D): R = + visitDeclarationReference(expression, data) + + fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: D): R = + visitMemberAccess(expression, data) + + fun visitConstructorCall(expression: IrConstructorCall, data: D): R = + visitFunctionAccess(expression, data) + + fun visitSingletonReference(expression: IrGetSingletonValue, data: D): R = + visitDeclarationReference(expression, data) + + fun visitGetObjectValue(expression: IrGetObjectValue, data: D): R = + visitSingletonReference(expression, data) + + fun visitGetEnumValue(expression: IrGetEnumValue, data: D): R = + visitSingletonReference(expression, data) + + fun visitRawFunctionReference(expression: IrRawFunctionReference, data: D): R = + visitDeclarationReference(expression, data) + + fun visitContainerExpression(expression: IrContainerExpression, data: D): R = + visitExpression(expression, data) + + fun visitBlock(expression: IrBlock, data: D): R = visitContainerExpression(expression, + data) + + fun visitComposite(expression: IrComposite, data: D): R = + visitContainerExpression(expression, data) + + fun visitSyntheticBody(body: IrSyntheticBody, data: D): R = visitBody(body, data) + + fun visitBreakContinue(jump: IrBreakContinue, data: D): R = visitExpression(jump, data) + + fun visitBreak(jump: IrBreak, data: D): R = visitBreakContinue(jump, data) + + fun visitContinue(jump: IrContinue, data: D): R = visitBreakContinue(jump, data) + + fun visitCall(expression: IrCall, data: D): R = visitFunctionAccess(expression, data) + + fun visitCallableReference(expression: IrCallableReference<*>, data: D): R = + visitMemberAccess(expression, data) + + fun visitFunctionReference(expression: IrFunctionReference, data: D): R = + visitCallableReference(expression, data) + + fun visitPropertyReference(expression: IrPropertyReference, data: D): R = + visitCallableReference(expression, data) + + fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, + data: D): R = visitCallableReference(expression, data) + + fun visitClassReference(expression: IrClassReference, data: D): R = + visitDeclarationReference(expression, data) + + fun visitConst(expression: IrConst<*>, data: D): R = visitExpression(expression, data) + + fun visitConstantValue(expression: IrConstantValue, data: D): R = + visitExpression(expression, data) + + fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D): R = + visitConstantValue(expression, data) + + fun visitConstantObject(expression: IrConstantObject, data: D): R = + visitConstantValue(expression, data) + + fun visitConstantArray(expression: IrConstantArray, data: D): R = + visitConstantValue(expression, data) + + fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D): R + = visitFunctionAccess(expression, data) + + fun visitDynamicExpression(expression: IrDynamicExpression, data: D): R = + visitExpression(expression, data) + + fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: D): R + = visitDynamicExpression(expression, data) + + fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: D): R = + visitDynamicExpression(expression, data) + + fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D): R = + visitFunctionAccess(expression, data) + + fun visitErrorExpression(expression: IrErrorExpression, data: D): R = + visitExpression(expression, data) + + fun visitErrorCallExpression(expression: IrErrorCallExpression, data: D): R = + visitErrorExpression(expression, data) + + fun visitFieldAccess(expression: IrFieldAccessExpression, data: D): R = + visitDeclarationReference(expression, data) + + fun visitGetField(expression: IrGetField, data: D): R = visitFieldAccess(expression, + data) + + fun visitSetField(expression: IrSetField, data: D): R = visitFieldAccess(expression, + data) + + fun visitFunctionExpression(expression: IrFunctionExpression, data: D): R = + visitExpression(expression, data) + + fun visitGetClass(expression: IrGetClass, data: D): R = visitExpression(expression, + data) + + fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D): R = + visitExpression(expression, data) + + fun visitLoop(loop: IrLoop, data: D): R = visitExpression(loop, data) + + fun visitWhileLoop(loop: IrWhileLoop, data: D): R = visitLoop(loop, data) + + fun visitDoWhileLoop(loop: IrDoWhileLoop, data: D): R = visitLoop(loop, data) + + fun visitReturn(expression: IrReturn, data: D): R = visitExpression(expression, data) + + fun visitStringConcatenation(expression: IrStringConcatenation, data: D): R = + visitExpression(expression, data) + + fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D): R = + visitExpression(expression, data) + + fun visitSuspendableExpression(expression: IrSuspendableExpression, data: D): R = + visitExpression(expression, data) + + fun visitThrow(expression: IrThrow, data: D): R = visitExpression(expression, data) + + fun visitTry(aTry: IrTry, data: D): R = visitExpression(aTry, data) + + fun visitCatch(aCatch: IrCatch, data: D): R = visitElement(aCatch, data) + + fun visitTypeOperator(expression: IrTypeOperatorCall, data: D): R = + visitExpression(expression, data) + + fun visitValueAccess(expression: IrValueAccessExpression, data: D): R = + visitDeclarationReference(expression, data) + + fun visitGetValue(expression: IrGetValue, data: D): R = visitValueAccess(expression, + data) + + fun visitSetValue(expression: IrSetValue, data: D): R = visitValueAccess(expression, + data) + + fun visitVararg(expression: IrVararg, data: D): R = visitExpression(expression, data) + + fun visitSpreadElement(spread: IrSpreadElement, data: D): R = visitElement(spread, + data) + + fun visitWhen(expression: IrWhen, data: D): R = visitExpression(expression, data) + + fun visitBranch(branch: IrBranch, data: D): R = visitElement(branch, data) + + fun visitElseBranch(branch: IrElseBranch, data: D): R = visitBranch(branch, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt similarity index 50% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt rename to compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt index 2edb4d4ccbf9a..7618196af6e91 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt @@ -1,280 +1,523 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2021 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. */ +//This file was generated automatically +//DO NOT MODIFY IT MANUALLY + package org.jetbrains.kotlin.ir.visitors import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrConstructor +import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase +import org.jetbrains.kotlin.ir.declarations.IrEnumEntry +import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration +import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrField +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty +import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.ir.declarations.IrProperty +import org.jetbrains.kotlin.ir.declarations.IrScript +import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.IrTypeAlias +import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.expressions.IrBlock +import org.jetbrains.kotlin.ir.expressions.IrBlockBody +import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrBranch +import org.jetbrains.kotlin.ir.expressions.IrBreak +import org.jetbrains.kotlin.ir.expressions.IrBreakContinue +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrCallableReference +import org.jetbrains.kotlin.ir.expressions.IrCatch +import org.jetbrains.kotlin.ir.expressions.IrClassReference +import org.jetbrains.kotlin.ir.expressions.IrComposite +import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.IrConstantArray +import org.jetbrains.kotlin.ir.expressions.IrConstantObject +import org.jetbrains.kotlin.ir.expressions.IrConstantPrimitive +import org.jetbrains.kotlin.ir.expressions.IrConstantValue +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrContainerExpression +import org.jetbrains.kotlin.ir.expressions.IrContinue +import org.jetbrains.kotlin.ir.expressions.IrDeclarationReference +import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrDoWhileLoop +import org.jetbrains.kotlin.ir.expressions.IrDynamicExpression +import org.jetbrains.kotlin.ir.expressions.IrDynamicMemberExpression +import org.jetbrains.kotlin.ir.expressions.IrDynamicOperatorExpression +import org.jetbrains.kotlin.ir.expressions.IrElseBranch +import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrErrorCallExpression +import org.jetbrains.kotlin.ir.expressions.IrErrorExpression +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression +import org.jetbrains.kotlin.ir.expressions.IrFunctionReference +import org.jetbrains.kotlin.ir.expressions.IrGetClass +import org.jetbrains.kotlin.ir.expressions.IrGetEnumValue +import org.jetbrains.kotlin.ir.expressions.IrGetField +import org.jetbrains.kotlin.ir.expressions.IrGetObjectValue +import org.jetbrains.kotlin.ir.expressions.IrGetSingletonValue +import org.jetbrains.kotlin.ir.expressions.IrGetValue +import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall +import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference +import org.jetbrains.kotlin.ir.expressions.IrLoop +import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrPropertyReference +import org.jetbrains.kotlin.ir.expressions.IrRawFunctionReference +import org.jetbrains.kotlin.ir.expressions.IrReturn +import org.jetbrains.kotlin.ir.expressions.IrSetField +import org.jetbrains.kotlin.ir.expressions.IrSetValue +import org.jetbrains.kotlin.ir.expressions.IrSpreadElement +import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation +import org.jetbrains.kotlin.ir.expressions.IrSuspendableExpression +import org.jetbrains.kotlin.ir.expressions.IrSuspensionPoint +import org.jetbrains.kotlin.ir.expressions.IrSyntheticBody +import org.jetbrains.kotlin.ir.expressions.IrThrow +import org.jetbrains.kotlin.ir.expressions.IrTry +import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall +import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression +import org.jetbrains.kotlin.ir.expressions.IrVararg +import org.jetbrains.kotlin.ir.expressions.IrWhen +import org.jetbrains.kotlin.ir.expressions.IrWhileLoop interface IrElementVisitorVoid : IrElementVisitor { - fun visitElement(element: IrElement) override fun visitElement(element: IrElement, data: Nothing?) = visitElement(element) - fun visitModuleFragment(declaration: IrModuleFragment) = visitElement(declaration) - override fun visitModuleFragment(declaration: IrModuleFragment, data: Nothing?) = visitModuleFragment(declaration) + fun visitElement(element: IrElement) { + } - fun visitPackageFragment(declaration: IrPackageFragment) = visitElement(declaration) - override fun visitPackageFragment(declaration: IrPackageFragment, data: Nothing?) = visitPackageFragment(declaration) + override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?) = + visitDeclaration(declaration) - fun visitExternalPackageFragment(declaration: IrExternalPackageFragment) = visitPackageFragment(declaration) - override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: Nothing?) = - visitExternalPackageFragment(declaration) + fun visitDeclaration(declaration: IrDeclarationBase) = visitElement(declaration) - fun visitFile(declaration: IrFile) = visitPackageFragment(declaration) - override fun visitFile(declaration: IrFile, data: Nothing?) = visitFile(declaration) + override fun visitValueParameter(declaration: IrValueParameter, data: Nothing?) = + visitValueParameter(declaration) - fun visitDeclaration(declaration: IrDeclarationBase) = visitElement(declaration) - override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?) = visitDeclaration(declaration) + fun visitValueParameter(declaration: IrValueParameter) = visitDeclaration(declaration) - fun visitClass(declaration: IrClass) = visitDeclaration(declaration) override fun visitClass(declaration: IrClass, data: Nothing?) = visitClass(declaration) - fun visitScript(declaration: IrScript) = visitDeclaration(declaration) - override fun visitScript(declaration: IrScript, data: Nothing?) = visitScript(declaration) + fun visitClass(declaration: IrClass) = visitDeclaration(declaration) + + override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, + data: Nothing?) = visitAnonymousInitializer(declaration) + + fun visitAnonymousInitializer(declaration: IrAnonymousInitializer) = + visitDeclaration(declaration) + + override fun visitTypeParameter(declaration: IrTypeParameter, data: Nothing?) = + visitTypeParameter(declaration) + + fun visitTypeParameter(declaration: IrTypeParameter) = visitDeclaration(declaration) + + override fun visitFunction(declaration: IrFunction, data: Nothing?) = + visitFunction(declaration) fun visitFunction(declaration: IrFunction) = visitDeclaration(declaration) - override fun visitFunction(declaration: IrFunction, data: Nothing?) = visitFunction(declaration) - fun visitSimpleFunction(declaration: IrSimpleFunction) = visitFunction(declaration) - override fun visitSimpleFunction(declaration: IrSimpleFunction, data: Nothing?) = visitSimpleFunction(declaration) + override fun visitConstructor(declaration: IrConstructor, data: Nothing?) = + visitConstructor(declaration) fun visitConstructor(declaration: IrConstructor) = visitFunction(declaration) - override fun visitConstructor(declaration: IrConstructor, data: Nothing?) = visitConstructor(declaration) - fun visitProperty(declaration: IrProperty) = visitDeclaration(declaration) - override fun visitProperty(declaration: IrProperty, data: Nothing?) = visitProperty(declaration) + override fun visitEnumEntry(declaration: IrEnumEntry, data: Nothing?) = + visitEnumEntry(declaration) + + fun visitEnumEntry(declaration: IrEnumEntry) = visitDeclaration(declaration) + + override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: Nothing?) = + visitErrorDeclaration(declaration) + + fun visitErrorDeclaration(declaration: IrErrorDeclaration) = + visitDeclaration(declaration) - fun visitField(declaration: IrField) = visitDeclaration(declaration) override fun visitField(declaration: IrField, data: Nothing?) = visitField(declaration) - fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) = visitDeclaration(declaration) - override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: Nothing?) = - visitLocalDelegatedProperty(declaration) + fun visitField(declaration: IrField) = visitDeclaration(declaration) - fun visitVariable(declaration: IrVariable) = visitDeclaration(declaration) - override fun visitVariable(declaration: IrVariable, data: Nothing?) = visitVariable(declaration) + override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, + data: Nothing?) = visitLocalDelegatedProperty(declaration) - fun visitEnumEntry(declaration: IrEnumEntry) = visitDeclaration(declaration) - override fun visitEnumEntry(declaration: IrEnumEntry, data: Nothing?) = visitEnumEntry(declaration) + fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) = + visitDeclaration(declaration) - fun visitAnonymousInitializer(declaration: IrAnonymousInitializer) = visitDeclaration(declaration) - override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: Nothing?) = visitAnonymousInitializer(declaration) + override fun visitModuleFragment(declaration: IrModuleFragment, data: Nothing?) = + visitModuleFragment(declaration) - fun visitTypeParameter(declaration: IrTypeParameter) = visitDeclaration(declaration) - override fun visitTypeParameter(declaration: IrTypeParameter, data: Nothing?) = visitTypeParameter(declaration) + fun visitModuleFragment(declaration: IrModuleFragment) = visitElement(declaration) - fun visitValueParameter(declaration: IrValueParameter) = visitDeclaration(declaration) - override fun visitValueParameter(declaration: IrValueParameter, data: Nothing?) = visitValueParameter(declaration) + override fun visitProperty(declaration: IrProperty, data: Nothing?) = + visitProperty(declaration) + + fun visitProperty(declaration: IrProperty) = visitDeclaration(declaration) + + override fun visitScript(declaration: IrScript, data: Nothing?) = + visitScript(declaration) + + fun visitScript(declaration: IrScript) = visitDeclaration(declaration) + + override fun visitSimpleFunction(declaration: IrSimpleFunction, data: Nothing?) = + visitSimpleFunction(declaration) + + fun visitSimpleFunction(declaration: IrSimpleFunction) = visitFunction(declaration) + + override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?) = + visitTypeAlias(declaration) fun visitTypeAlias(declaration: IrTypeAlias) = visitDeclaration(declaration) - override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?) = visitTypeAlias(declaration) - fun visitBody(body: IrBody) = visitElement(body) + override fun visitVariable(declaration: IrVariable, data: Nothing?) = + visitVariable(declaration) + + fun visitVariable(declaration: IrVariable) = visitDeclaration(declaration) + + override fun visitPackageFragment(declaration: IrPackageFragment, data: Nothing?) = + visitPackageFragment(declaration) + + fun visitPackageFragment(declaration: IrPackageFragment) = visitElement(declaration) + + override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, + data: Nothing?) = visitExternalPackageFragment(declaration) + + fun visitExternalPackageFragment(declaration: IrExternalPackageFragment) = + visitPackageFragment(declaration) + + override fun visitFile(declaration: IrFile, data: Nothing?) = visitFile(declaration) + + fun visitFile(declaration: IrFile) = visitPackageFragment(declaration) + + override fun visitExpression(expression: IrExpression, data: Nothing?) = + visitExpression(expression) + + fun visitExpression(expression: IrExpression) = visitElement(expression) + override fun visitBody(body: IrBody, data: Nothing?) = visitBody(body) + fun visitBody(body: IrBody) = visitElement(body) + + override fun visitExpressionBody(body: IrExpressionBody, data: Nothing?) = + visitExpressionBody(body) + fun visitExpressionBody(body: IrExpressionBody) = visitBody(body) - override fun visitExpressionBody(body: IrExpressionBody, data: Nothing?) = visitExpressionBody(body) - fun visitBlockBody(body: IrBlockBody) = visitBody(body) override fun visitBlockBody(body: IrBlockBody, data: Nothing?) = visitBlockBody(body) + fun visitBlockBody(body: IrBlockBody) = visitBody(body) + + override fun visitDeclarationReference(expression: IrDeclarationReference, + data: Nothing?) = visitDeclarationReference(expression) + + fun visitDeclarationReference(expression: IrDeclarationReference) = + visitExpression(expression) + + override fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: Nothing?) + = visitMemberAccess(expression) + + fun visitMemberAccess(expression: IrMemberAccessExpression<*>) = + visitDeclarationReference(expression) + + override fun visitFunctionAccess(expression: IrFunctionAccessExpression, + data: Nothing?) = visitFunctionAccess(expression) + + fun visitFunctionAccess(expression: IrFunctionAccessExpression) = + visitMemberAccess(expression) + + override fun visitConstructorCall(expression: IrConstructorCall, data: Nothing?) = + visitConstructorCall(expression) + + fun visitConstructorCall(expression: IrConstructorCall) = visitFunctionAccess(expression) + + override fun visitSingletonReference(expression: IrGetSingletonValue, data: Nothing?) = + visitSingletonReference(expression) + + fun visitSingletonReference(expression: IrGetSingletonValue) = + visitDeclarationReference(expression) + + override fun visitGetObjectValue(expression: IrGetObjectValue, data: Nothing?) = + visitGetObjectValue(expression) + + fun visitGetObjectValue(expression: IrGetObjectValue) = + visitSingletonReference(expression) + + override fun visitGetEnumValue(expression: IrGetEnumValue, data: Nothing?) = + visitGetEnumValue(expression) + + fun visitGetEnumValue(expression: IrGetEnumValue) = visitSingletonReference(expression) + + override fun visitRawFunctionReference(expression: IrRawFunctionReference, + data: Nothing?) = visitRawFunctionReference(expression) + + fun visitRawFunctionReference(expression: IrRawFunctionReference) = + visitDeclarationReference(expression) + + override fun visitContainerExpression(expression: IrContainerExpression, + data: Nothing?) = visitContainerExpression(expression) + + fun visitContainerExpression(expression: IrContainerExpression) = + visitExpression(expression) + + override fun visitBlock(expression: IrBlock, data: Nothing?) = visitBlock(expression) + + fun visitBlock(expression: IrBlock) = visitContainerExpression(expression) + + override fun visitComposite(expression: IrComposite, data: Nothing?) = + visitComposite(expression) + + fun visitComposite(expression: IrComposite) = visitContainerExpression(expression) + + override fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) = + visitSyntheticBody(body) + fun visitSyntheticBody(body: IrSyntheticBody) = visitBody(body) - override fun visitSyntheticBody(body: IrSyntheticBody, data: Nothing?) = visitSyntheticBody(body) - fun visitSuspendableExpression(expression: IrSuspendableExpression) = visitExpression(expression) - override fun visitSuspendableExpression(expression: IrSuspendableExpression, data: Nothing?) = visitSuspendableExpression(expression) + override fun visitBreakContinue(jump: IrBreakContinue, data: Nothing?) = + visitBreakContinue(jump) - fun visitSuspensionPoint(expression: IrSuspensionPoint) = visitExpression(expression) - override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: Nothing?) = visitSuspensionPoint(expression) + fun visitBreakContinue(jump: IrBreakContinue) = visitExpression(jump) - fun visitExpression(expression: IrExpression) = visitElement(expression) - override fun visitExpression(expression: IrExpression, data: Nothing?) = visitExpression(expression) + override fun visitBreak(jump: IrBreak, data: Nothing?) = visitBreak(jump) + + fun visitBreak(jump: IrBreak) = visitBreakContinue(jump) + + override fun visitContinue(jump: IrContinue, data: Nothing?) = visitContinue(jump) + + fun visitContinue(jump: IrContinue) = visitBreakContinue(jump) + + override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression) + + fun visitCall(expression: IrCall) = visitFunctionAccess(expression) + + override fun visitCallableReference(expression: IrCallableReference<*>, data: Nothing?) + = visitCallableReference(expression) + + fun visitCallableReference(expression: IrCallableReference<*>) = + visitMemberAccess(expression) + + override fun visitFunctionReference(expression: IrFunctionReference, data: Nothing?) = + visitFunctionReference(expression) + + fun visitFunctionReference(expression: IrFunctionReference) = + visitCallableReference(expression) + + override fun visitPropertyReference(expression: IrPropertyReference, data: Nothing?) = + visitPropertyReference(expression) + + fun visitPropertyReference(expression: IrPropertyReference) = + visitCallableReference(expression) + + override + fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, + data: Nothing?) = visitLocalDelegatedPropertyReference(expression) + + fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference) = + visitCallableReference(expression) + + override fun visitClassReference(expression: IrClassReference, data: Nothing?) = + visitClassReference(expression) + + fun visitClassReference(expression: IrClassReference) = + visitDeclarationReference(expression) + + override fun visitConst(expression: IrConst<*>, data: Nothing?) = + visitConst(expression) fun visitConst(expression: IrConst<*>) = visitExpression(expression) - override fun visitConst(expression: IrConst<*>, data: Nothing?) = visitConst(expression) + + override fun visitConstantValue(expression: IrConstantValue, data: Nothing?) = + visitConstantValue(expression) fun visitConstantValue(expression: IrConstantValue) = visitExpression(expression) - override fun visitConstantValue(expression: IrConstantValue, data: Nothing?) = visitConstantValue(expression) + + override fun visitConstantPrimitive(expression: IrConstantPrimitive, data: Nothing?) = + visitConstantPrimitive(expression) + + fun visitConstantPrimitive(expression: IrConstantPrimitive) = + visitConstantValue(expression) + + override fun visitConstantObject(expression: IrConstantObject, data: Nothing?) = + visitConstantObject(expression) fun visitConstantObject(expression: IrConstantObject) = visitConstantValue(expression) - override fun visitConstantObject(expression: IrConstantObject, data: Nothing?) = visitConstantObject(expression) - fun visitConstantPrimitive(expression: IrConstantPrimitive) = visitConstantValue(expression) - override fun visitConstantPrimitive(expression: IrConstantPrimitive, data: Nothing?) = visitConstantPrimitive(expression) + override fun visitConstantArray(expression: IrConstantArray, data: Nothing?) = + visitConstantArray(expression) fun visitConstantArray(expression: IrConstantArray) = visitConstantValue(expression) - override fun visitConstantArray(expression: IrConstantArray, data: Nothing?) = visitConstantArray(expression) - fun visitVararg(expression: IrVararg) = visitExpression(expression) - override fun visitVararg(expression: IrVararg, data: Nothing?) = visitVararg(expression) + override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, + data: Nothing?) = visitDelegatingConstructorCall(expression) - fun visitSpreadElement(spread: IrSpreadElement) = visitElement(spread) - override fun visitSpreadElement(spread: IrSpreadElement, data: Nothing?) = visitSpreadElement(spread) + fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = + visitFunctionAccess(expression) - fun visitContainerExpression(expression: IrContainerExpression) = visitExpression(expression) - override fun visitContainerExpression(expression: IrContainerExpression, data: Nothing?) = visitContainerExpression(expression) + override fun visitDynamicExpression(expression: IrDynamicExpression, data: Nothing?) = + visitDynamicExpression(expression) - fun visitComposite(expression: IrComposite) = visitContainerExpression(expression) - override fun visitComposite(expression: IrComposite, data: Nothing?) = visitComposite(expression) + fun visitDynamicExpression(expression: IrDynamicExpression) = visitExpression(expression) - fun visitBlock(expression: IrBlock) = visitContainerExpression(expression) - override fun visitBlock(expression: IrBlock, data: Nothing?) = visitBlock(expression) + override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, + data: Nothing?) = visitDynamicOperatorExpression(expression) - fun visitStringConcatenation(expression: IrStringConcatenation) = visitExpression(expression) - override fun visitStringConcatenation(expression: IrStringConcatenation, data: Nothing?) = visitStringConcatenation(expression) + fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression) = + visitDynamicExpression(expression) - fun visitDeclarationReference(expression: IrDeclarationReference) = visitExpression(expression) - override fun visitDeclarationReference(expression: IrDeclarationReference, data: Nothing?) = visitDeclarationReference(expression) + override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, + data: Nothing?) = visitDynamicMemberExpression(expression) - fun visitSingletonReference(expression: IrGetSingletonValue) = visitDeclarationReference(expression) - override fun visitSingletonReference(expression: IrGetSingletonValue, data: Nothing?) = visitSingletonReference(expression) + fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression) = + visitDynamicExpression(expression) - fun visitGetObjectValue(expression: IrGetObjectValue) = visitSingletonReference(expression) - override fun visitGetObjectValue(expression: IrGetObjectValue, data: Nothing?) = visitGetObjectValue(expression) + override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, + data: Nothing?) = visitEnumConstructorCall(expression) - fun visitGetEnumValue(expression: IrGetEnumValue) = visitSingletonReference(expression) - override fun visitGetEnumValue(expression: IrGetEnumValue, data: Nothing?) = visitGetEnumValue(expression) + fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = + visitFunctionAccess(expression) - fun visitValueAccess(expression: IrValueAccessExpression) = visitDeclarationReference(expression) - override fun visitValueAccess(expression: IrValueAccessExpression, data: Nothing?) = visitValueAccess(expression) + override fun visitErrorExpression(expression: IrErrorExpression, data: Nothing?) = + visitErrorExpression(expression) - fun visitGetValue(expression: IrGetValue) = visitValueAccess(expression) - override fun visitGetValue(expression: IrGetValue, data: Nothing?) = visitGetValue(expression) + fun visitErrorExpression(expression: IrErrorExpression) = visitExpression(expression) - fun visitSetValue(expression: IrSetValue) = visitValueAccess(expression) - override fun visitSetValue(expression: IrSetValue, data: Nothing?) = visitSetValue(expression) + override fun visitErrorCallExpression(expression: IrErrorCallExpression, + data: Nothing?) = visitErrorCallExpression(expression) + + fun visitErrorCallExpression(expression: IrErrorCallExpression) = + visitErrorExpression(expression) + + override fun visitFieldAccess(expression: IrFieldAccessExpression, data: Nothing?) = + visitFieldAccess(expression) + + fun visitFieldAccess(expression: IrFieldAccessExpression) = + visitDeclarationReference(expression) - fun visitFieldAccess(expression: IrFieldAccessExpression) = visitDeclarationReference(expression) - override fun visitFieldAccess(expression: IrFieldAccessExpression, data: Nothing?) = visitFieldAccess(expression) + override fun visitGetField(expression: IrGetField, data: Nothing?) = + visitGetField(expression) fun visitGetField(expression: IrGetField) = visitFieldAccess(expression) - override fun visitGetField(expression: IrGetField, data: Nothing?) = visitGetField(expression) + + override fun visitSetField(expression: IrSetField, data: Nothing?) = + visitSetField(expression) fun visitSetField(expression: IrSetField) = visitFieldAccess(expression) - override fun visitSetField(expression: IrSetField, data: Nothing?) = visitSetField(expression) - fun visitMemberAccess(expression: IrMemberAccessExpression<*>) = visitDeclarationReference(expression) - override fun visitMemberAccess(expression: IrMemberAccessExpression<*>, data: Nothing?) = visitMemberAccess(expression) + override fun visitFunctionExpression(expression: IrFunctionExpression, data: Nothing?) + = visitFunctionExpression(expression) - fun visitFunctionAccess(expression: IrFunctionAccessExpression) = visitMemberAccess(expression) - override fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: Nothing?) = visitFunctionAccess(expression) + fun visitFunctionExpression(expression: IrFunctionExpression) = + visitExpression(expression) - fun visitCall(expression: IrCall) = visitFunctionAccess(expression) - override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression) + override fun visitGetClass(expression: IrGetClass, data: Nothing?) = + visitGetClass(expression) - fun visitConstructorCall(expression: IrConstructorCall) = visitFunctionAccess(expression) - override fun visitConstructorCall(expression: IrConstructorCall, data: Nothing?) = visitConstructorCall(expression) + fun visitGetClass(expression: IrGetClass) = visitExpression(expression) - fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitFunctionAccess(expression) - override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?) = - visitDelegatingConstructorCall(expression) + override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, + data: Nothing?) = visitInstanceInitializerCall(expression) - fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitFunctionAccess(expression) - override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: Nothing?) = visitEnumConstructorCall(expression) + fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) = + visitExpression(expression) - fun visitGetClass(expression: IrGetClass) = visitExpression(expression) - override fun visitGetClass(expression: IrGetClass, data: Nothing?) = visitGetClass(expression) + override fun visitLoop(loop: IrLoop, data: Nothing?) = visitLoop(loop) - fun visitCallableReference(expression: IrCallableReference<*>) = visitMemberAccess(expression) - override fun visitCallableReference(expression: IrCallableReference<*>, data: Nothing?) = visitCallableReference(expression) + fun visitLoop(loop: IrLoop) = visitExpression(loop) - fun visitFunctionReference(expression: IrFunctionReference) = visitCallableReference(expression) - override fun visitFunctionReference(expression: IrFunctionReference, data: Nothing?) = visitFunctionReference(expression) + override fun visitWhileLoop(loop: IrWhileLoop, data: Nothing?) = visitWhileLoop(loop) - fun visitPropertyReference(expression: IrPropertyReference) = visitCallableReference(expression) - override fun visitPropertyReference(expression: IrPropertyReference, data: Nothing?) = visitPropertyReference(expression) + fun visitWhileLoop(loop: IrWhileLoop) = visitLoop(loop) - fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference) = visitCallableReference(expression) - override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference, data: Nothing?) = - visitLocalDelegatedPropertyReference(expression) + override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: Nothing?) = + visitDoWhileLoop(loop) - fun visitRawFunctionReference(expression: IrRawFunctionReference) = visitDeclarationReference(expression) - override fun visitRawFunctionReference(expression: IrRawFunctionReference, data: Nothing?) = - visitRawFunctionReference(expression) + fun visitDoWhileLoop(loop: IrDoWhileLoop) = visitLoop(loop) - fun visitFunctionExpression(expression: IrFunctionExpression) = visitExpression(expression) - override fun visitFunctionExpression(expression: IrFunctionExpression, data: Nothing?) = visitFunctionExpression(expression) + override fun visitReturn(expression: IrReturn, data: Nothing?) = + visitReturn(expression) - fun visitClassReference(expression: IrClassReference) = visitDeclarationReference(expression) - override fun visitClassReference(expression: IrClassReference, data: Nothing?) = visitClassReference(expression) + fun visitReturn(expression: IrReturn) = visitExpression(expression) - fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall) = visitExpression(expression) - override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: Nothing?) = - visitInstanceInitializerCall(expression) + override fun visitStringConcatenation(expression: IrStringConcatenation, + data: Nothing?) = visitStringConcatenation(expression) - fun visitTypeOperator(expression: IrTypeOperatorCall) = visitExpression(expression) - override fun visitTypeOperator(expression: IrTypeOperatorCall, data: Nothing?) = visitTypeOperator(expression) + fun visitStringConcatenation(expression: IrStringConcatenation) = + visitExpression(expression) - fun visitWhen(expression: IrWhen) = visitExpression(expression) - override fun visitWhen(expression: IrWhen, data: Nothing?) = visitWhen(expression) + override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: Nothing?) = + visitSuspensionPoint(expression) - fun visitBranch(branch: IrBranch) = visitElement(branch) - override fun visitBranch(branch: IrBranch, data: Nothing?) = visitBranch(branch) + fun visitSuspensionPoint(expression: IrSuspensionPoint) = visitExpression(expression) - fun visitElseBranch(branch: IrElseBranch) = visitBranch(branch) - override fun visitElseBranch(branch: IrElseBranch, data: Nothing?) = visitElseBranch(branch) + override fun visitSuspendableExpression(expression: IrSuspendableExpression, + data: Nothing?) = visitSuspendableExpression(expression) - fun visitLoop(loop: IrLoop) = visitExpression(loop) - override fun visitLoop(loop: IrLoop, data: Nothing?) = visitLoop(loop) + fun visitSuspendableExpression(expression: IrSuspendableExpression) = + visitExpression(expression) - fun visitWhileLoop(loop: IrWhileLoop) = visitLoop(loop) - override fun visitWhileLoop(loop: IrWhileLoop, data: Nothing?) = visitWhileLoop(loop) + override fun visitThrow(expression: IrThrow, data: Nothing?) = visitThrow(expression) - fun visitDoWhileLoop(loop: IrDoWhileLoop) = visitLoop(loop) - override fun visitDoWhileLoop(loop: IrDoWhileLoop, data: Nothing?) = visitDoWhileLoop(loop) + fun visitThrow(expression: IrThrow) = visitExpression(expression) - fun visitTry(aTry: IrTry) = visitExpression(aTry) override fun visitTry(aTry: IrTry, data: Nothing?) = visitTry(aTry) - fun visitCatch(aCatch: IrCatch) = visitElement(aCatch) + fun visitTry(aTry: IrTry) = visitExpression(aTry) + override fun visitCatch(aCatch: IrCatch, data: Nothing?) = visitCatch(aCatch) - fun visitBreakContinue(jump: IrBreakContinue) = visitExpression(jump) - override fun visitBreakContinue(jump: IrBreakContinue, data: Nothing?) = visitBreakContinue(jump) + fun visitCatch(aCatch: IrCatch) = visitElement(aCatch) - fun visitBreak(jump: IrBreak) = visitBreakContinue(jump) - override fun visitBreak(jump: IrBreak, data: Nothing?) = visitBreak(jump) + override fun visitTypeOperator(expression: IrTypeOperatorCall, data: Nothing?) = + visitTypeOperator(expression) - fun visitContinue(jump: IrContinue) = visitBreakContinue(jump) - override fun visitContinue(jump: IrContinue, data: Nothing?) = visitContinue(jump) + fun visitTypeOperator(expression: IrTypeOperatorCall) = visitExpression(expression) - fun visitReturn(expression: IrReturn) = visitExpression(expression) - override fun visitReturn(expression: IrReturn, data: Nothing?) = visitReturn(expression) + override fun visitValueAccess(expression: IrValueAccessExpression, data: Nothing?) = + visitValueAccess(expression) - fun visitThrow(expression: IrThrow) = visitExpression(expression) - override fun visitThrow(expression: IrThrow, data: Nothing?) = visitThrow(expression) + fun visitValueAccess(expression: IrValueAccessExpression) = + visitDeclarationReference(expression) - fun visitDynamicExpression(expression: IrDynamicExpression) = visitExpression(expression) - override fun visitDynamicExpression(expression: IrDynamicExpression, data: Nothing?) = visitDynamicExpression(expression) + override fun visitGetValue(expression: IrGetValue, data: Nothing?) = + visitGetValue(expression) + + fun visitGetValue(expression: IrGetValue) = visitValueAccess(expression) - fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression) = visitDynamicExpression(expression) - override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression, data: Nothing?) = - visitDynamicOperatorExpression(expression) + override fun visitSetValue(expression: IrSetValue, data: Nothing?) = + visitSetValue(expression) - fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression) = visitDynamicExpression(expression) - override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression, data: Nothing?) = - visitDynamicMemberExpression(expression) + fun visitSetValue(expression: IrSetValue) = visitValueAccess(expression) - fun visitErrorDeclaration(declaration: IrErrorDeclaration) = visitDeclaration(declaration) - override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: Nothing?) = visitErrorDeclaration(declaration) + override fun visitVararg(expression: IrVararg, data: Nothing?) = + visitVararg(expression) - fun visitErrorExpression(expression: IrErrorExpression) = visitExpression(expression) - override fun visitErrorExpression(expression: IrErrorExpression, data: Nothing?) = visitErrorExpression(expression) + fun visitVararg(expression: IrVararg) = visitExpression(expression) + + override fun visitSpreadElement(spread: IrSpreadElement, data: Nothing?) = + visitSpreadElement(spread) - fun visitErrorCallExpression(expression: IrErrorCallExpression) = visitErrorExpression(expression) - override fun visitErrorCallExpression(expression: IrErrorCallExpression, data: Nothing?) = visitErrorCallExpression(expression) + fun visitSpreadElement(spread: IrSpreadElement) = visitElement(spread) + + override fun visitWhen(expression: IrWhen, data: Nothing?) = visitWhen(expression) + + fun visitWhen(expression: IrWhen) = visitExpression(expression) + + override fun visitBranch(branch: IrBranch, data: Nothing?) = visitBranch(branch) + + fun visitBranch(branch: IrBranch) = visitElement(branch) + + override fun visitElseBranch(branch: IrElseBranch, data: Nothing?) = + visitElseBranch(branch) + + fun visitElseBranch(branch: IrElseBranch) = visitBranch(branch) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt index 22ad20008d756..ce40d959f2e47 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrScriptImpl.kt @@ -48,7 +48,8 @@ class IrScriptImpl( override lateinit var baseClass: IrType override lateinit var explicitCallParameters: List override lateinit var implicitReceiversParameters: List - override lateinit var providedProperties: List> + override lateinit var providedProperties: List + override lateinit var providedPropertiesParameters: List override var resultProperty: IrPropertySymbol? = null override var earlierScriptsParameter: IrValueParameter? = null override var earlierScripts: List? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt index d4d343d11bbc9..c8f5f4f17bfb2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt @@ -20,6 +20,10 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.types.KotlinType +// todo: autogenerate +/** + * A non-leaf IR tree element. + */ abstract class IrMemberAccessExpression : IrDeclarationReference() { var dispatchReceiver: IrExpression? = null var extensionReceiver: IrExpression? = null diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt index e192ec75fbac9..0e661f5fca685 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDoWhileLoopImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.expressions.IrDoWhileLoop +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.types.IrType @@ -25,4 +26,6 @@ class IrDoWhileLoopImpl( override val endOffset: Int, override var type: IrType, override val origin: IrStatementOrigin?, -) : IrDoWhileLoop() +) : IrDoWhileLoop() { + override lateinit var condition: IrExpression +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt index 4ff5058809439..70338c6bf2821 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrWhileLoopImpl.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.ir.expressions.impl +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.IrWhileLoop import org.jetbrains.kotlin.ir.types.IrType @@ -25,4 +26,6 @@ class IrWhileLoopImpl( override val endOffset: Int, override var type: IrType, override val origin: IrStatementOrigin?, -) : IrWhileLoop() +) : IrWhileLoop() { + override lateinit var condition: IrExpression +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index baaa67bfa1182..17086b2dcddda 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -134,7 +134,7 @@ open class DeepCopyIrTreeWithSymbols( scriptCopy.earlierScriptsParameter = declaration.earlierScriptsParameter scriptCopy.explicitCallParameters = declaration.explicitCallParameters.map { it.transform() } scriptCopy.implicitReceiversParameters = declaration.implicitReceiversParameters.map { it.transform() } - scriptCopy.providedProperties = declaration.providedProperties.map { it.first.transform() to it.second } + scriptCopy.providedPropertiesParameters = declaration.providedPropertiesParameters.map { it.transform() } } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt index 75f03661bc414..d492ea95db6cf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt @@ -163,16 +163,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption if (options.printRegionsPerFile) p.println("//endregion") } - override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: IrDeclaration?) { - // TODO support - super.visitExternalPackageFragment(declaration, data) - } - - override fun visitScript(declaration: IrScript, data: IrDeclaration?) { - // TODO support - super.visitScript(declaration, data) - } - override fun visitClass(declaration: IrClass, data: IrDeclaration?) { // TODO omit super class for enums, annotations? // TODO omit Companion name for companion objects? @@ -1461,18 +1451,6 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption } } - override fun visitSuspendableExpression(expression: IrSuspendableExpression, data: IrDeclaration?) { - // TODO support - // TODO no test - super.visitSuspendableExpression(expression, data) - } - - override fun visitSuspensionPoint(expression: IrSuspensionPoint, data: IrDeclaration?) { - // TODO support - // TODO no test - super.visitSuspensionPoint(expression, data) - } - private fun p(condition: Boolean, s: String) { if (condition) p.printWithNoIndent("$s ") } diff --git a/compiler/ir/ir.tree/tree-generator/build.gradle.kts b/compiler/ir/ir.tree/tree-generator/build.gradle.kts new file mode 100644 index 0000000000000..41446a855e0b8 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/build.gradle.kts @@ -0,0 +1,42 @@ +import tasks.WriteCopyrightToFile + +plugins { + kotlin("jvm") + id("jps-compatible") + application +} + +val runtimeOnly by configurations +val compileOnly by configurations +runtimeOnly.extendsFrom(compileOnly) + +dependencies { + implementation(project(":generators")) + implementation(project(":core:compiler.common")) + implementation("com.squareup:kotlinpoet:1.11.0") + + compileOnly(intellijCore()) + compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + + runtimeOnly(commonDependency("org.jetbrains.intellij.deps:jdom")) +} + +val writeCopyright by task { + outputFile.set(file("$buildDir/copyright/notice.txt")) + commented.set(true) +} + +application { + mainClassName = "org.jetbrains.kotlin.ir.generator.MainKt" +} + +val processResources by tasks +processResources.dependsOn(writeCopyright) + +sourceSets { + "main" { + projectDefault() + resources.srcDir("$buildDir/copyright") + } + "test" {} +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/CommonTypes.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/CommonTypes.kt new file mode 100644 index 0000000000000..ee9481c7fc456 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/CommonTypes.kt @@ -0,0 +1,55 @@ +/* + * Copyright 2010-2021 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.generator + +import org.jetbrains.kotlin.ir.generator.Packages.declarations +import org.jetbrains.kotlin.ir.generator.Packages.exprs +import org.jetbrains.kotlin.ir.generator.Packages.symbols +import org.jetbrains.kotlin.ir.generator.Packages.tree +import org.jetbrains.kotlin.ir.generator.Packages.types +import org.jetbrains.kotlin.ir.generator.Packages.visitors +import org.jetbrains.kotlin.ir.generator.util.TypeKind +import org.jetbrains.kotlin.ir.generator.util.type + +object Packages { + const val tree = "org.jetbrains.kotlin.ir" + const val exprs = "org.jetbrains.kotlin.ir.expressions" + const val symbols = "org.jetbrains.kotlin.ir.symbols" + const val declarations = "org.jetbrains.kotlin.ir.declarations" + const val types = "org.jetbrains.kotlin.ir.types" + const val visitors = "org.jetbrains.kotlin.ir.visitors" + const val descriptors = "org.jetbrains.kotlin.descriptors" +} + +val elementBaseType = type(tree, "IrElementBase", TypeKind.Class) +val statementOriginType = type(exprs, "IrStatementOrigin") +val elementVisitorType = type(visitors, "IrElementVisitor") +val elementTransformerType = type(visitors, "IrElementTransformer") +val mutableAnnotationContainerType = type(declarations, "IrMutableAnnotationContainer") +val irTypeType = type(types, "IrType") + +val symbolType = type(symbols, "IrSymbol") +val packageFragmentSymbolType = type(symbols, "IrPackageFragmentSymbol") +val fileSymbolType = type(symbols, "IrFileSymbol") +val externalPackageFragmentSymbolType = type(symbols, "IrExternalPackageFragmentSymbol") +val anonymousInitializerSymbolType = type(symbols, "IrAnonymousInitializerSymbol") +val enumEntrySymbolType = type(symbols, "IrEnumEntrySymbol") +val fieldSymbolType = type(symbols, "IrFieldSymbol") +val classifierSymbolType = type(symbols, "IrClassifierSymbol") +val classSymbolType = type(symbols, "IrClassSymbol") +val scriptSymbolType = type(symbols, "IrScriptSymbol") +val typeParameterSymbolType = type(symbols, "IrTypeParameterSymbol") +val valueSymbolType = type(symbols, "IrValueSymbol") +val valueParameterSymbolType = type(symbols, "IrValueParameterSymbol") +val variableSymbolType = type(symbols, "IrVariableSymbol") +val returnTargetSymbolType = type(symbols, "IrReturnTargetSymbol") +val functionSymbolType = type(symbols, "IrFunctionSymbol") +val constructorSymbolType = type(symbols, "IrConstructorSymbol") +val simpleFunctionSymbolType = type(symbols, "IrSimpleFunctionSymbol") +val returnableBlockSymbolType = type(symbols, "IrReturnableBlockSymbol") +val propertySymbolType = type(symbols, "IrPropertySymbol") +val localDelegatedPropertySymbolType = type(symbols, "IrLocalDelegatedPropertySymbol") +val typeAliasSymbolType = type(symbols, "IrTypeAliasSymbol") diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt new file mode 100644 index 0000000000000..bc95a4d73b44a --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt @@ -0,0 +1,1055 @@ +/* + * Copyright 2010-2021 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.generator + +import com.squareup.kotlinpoet.FunSpec +import com.squareup.kotlinpoet.KModifier +import com.squareup.kotlinpoet.MemberName +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.SourceElement +import org.jetbrains.kotlin.descriptors.ValueClassRepresentation +import org.jetbrains.kotlin.ir.generator.config.AbstractTreeBuilder +import org.jetbrains.kotlin.ir.generator.config.ElementConfig +import org.jetbrains.kotlin.ir.generator.config.ElementConfig.Category.* +import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.List +import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.Var +import org.jetbrains.kotlin.ir.generator.config.SimpleFieldConfig +import org.jetbrains.kotlin.ir.generator.print.toPoet +import org.jetbrains.kotlin.ir.generator.util.* +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.types.Variance + +// Note the style of the DSL to describe IR elements, which is these things in the following order: +// 1) config (see properties of ElementConfig) +// 2) parents +// 3) fields +object IrTree : AbstractTreeBuilder() { + private fun symbol(type: TypeRef) = field("symbol", type) + private fun descriptor(typeName: String) = + field("descriptor", ClassRef(TypeKind.Interface, "org.jetbrains.kotlin.descriptors", typeName)) + + private val factory: SimpleFieldConfig = field("factory", type(Packages.declarations, "IrFactory")) + + override val rootElement: ElementConfig by element(Other, name = "element") { + accept = true + transform = true + transformByChildren = true + + +field("startOffset", int) + +field("endOffset", int) + } + val statement: ElementConfig by element(Other) + + val declaration: ElementConfig by element(Declaration) { + parent(statement) + parent(symbolOwner) + parent(mutableAnnotationContainerType) + + +descriptor("DeclarationDescriptor") + +field("origin", type(Packages.declarations, "IrDeclarationOrigin"), mutable = true) + +field("parent", declarationParent, mutable = true) + +factory + } + val declarationBase: ElementConfig by element(Declaration) { + typeKind = TypeKind.Class + transformByChildren = true + transformerReturnType = statement + visitorParent = rootElement + visitorName = "declaration" + + parent(declaration) + } + val declarationParent: ElementConfig by element(Declaration) + val declarationWithVisibility: ElementConfig by element(Declaration) { + parent(declaration) + + +field("visibility", type(Packages.descriptors, "DescriptorVisibility"), mutable = true) + } + val declarationWithName: ElementConfig by element(Declaration) { + parent(declaration) + + +field("name", type(), mutable = true) + } + val possiblyExternalDeclaration: ElementConfig by element(Declaration) { + parent(declarationWithName) + + +field("isExternal", boolean) + } + val symbolOwner: ElementConfig by element(Declaration) { + +symbol(symbolType) + } + val metadataSourceOwner: ElementConfig by element(Declaration) { + +field("metadata", type(Packages.declarations, "MetadataSource"), nullable = true, mutable = true) + } + val overridableMember: ElementConfig by element(Declaration) { + parent(declaration) + parent(declarationWithVisibility) + parent(declarationWithName) + parent(symbolOwner) + + +field("modality", type()) + } + val overridableDeclaration: ElementConfig by element(Declaration) { + val s = +param("S", symbolType) + + parent(overridableMember) + + +field("symbol", s) + +field("isFakeOverride", boolean) + +listField("overriddenSymbols", s, mutability = Var) + } + val memberWithContainerSource: ElementConfig by element(Declaration) { + parent(declarationWithName) + + +field("containerSource", type(), nullable = true) + } + val valueDeclaration: ElementConfig by element(Declaration) { + parent(declarationWithName) + parent(symbolOwner) + + +descriptor("ValueDescriptor") + +symbol(valueSymbolType) + +field("type", irTypeType, mutable = true) + +field("isAssignable", boolean) + } + val valueParameter: ElementConfig by element(Declaration) { + transform = true + visitorParent = declarationBase + + parent(declarationBase) + parent(valueDeclaration) + + +descriptor("ParameterDescriptor") + +symbol(valueParameterSymbolType) + +field("index", int) + +field("varargElementType", irTypeType, nullable = true, mutable = true) + +field("isCrossinline", boolean) + +field("isNoinline", boolean) + // if true parameter is not included into IdSignature. + // Skipping hidden params makes IrFunction be look similar to FE. + // NOTE: it is introduced to fix KT-40980 because more clear solution was not possible to implement. + // Once we are able to load any top-level declaration from klib this hack should be deprecated and removed. + +field("isHidden", boolean) + +field("defaultValue", expressionBody, nullable = true, mutable = true, isChild = true) + } + val `class`: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(possiblyExternalDeclaration) + parent(declarationWithVisibility) + parent(typeParametersContainer) + parent(declarationContainer) + parent(attributeContainer) + parent(metadataSourceOwner) + + +descriptor("ClassDescriptor") + +symbol(classSymbolType) + +field("kind", type()) + +field("modality", type(), mutable = true) + +field("isCompanion", boolean) + +field("isInner", boolean) + +field("isData", boolean) + +field("isValue", boolean) + +field("isExpect", boolean) + +field("isFun", boolean) + +field("source", type()) + +listField("superTypes", irTypeType, mutability = Var) + +field("thisReceiver", valueParameter, nullable = true, mutable = true, isChild = true) + +field( + "valueClassRepresentation", + type>().withArgs(type(Packages.types, "IrSimpleType")), + nullable = true, + mutable = true + ) + +listField("sealedSubclasses", classSymbolType, mutability = Var) + } + val attributeContainer: ElementConfig by element(Declaration) { + +field("attributeOwnerId", attributeContainer, mutable = true) + } + val anonymousInitializer: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + + +descriptor("ClassDescriptor") // TODO special descriptor for anonymous initializer blocks + +symbol(anonymousInitializerSymbolType) + +field("isStatic", boolean) + +field("body", blockBody, mutable = true, isChild = true) + } + val declarationContainer: ElementConfig by element(Declaration) { + ownsChildren = false + + parent(declarationParent) + + +listField("declarations", declaration, mutability = List, isChild = true) + } + val typeParametersContainer: ElementConfig by element(Declaration) { + ownsChildren = false + + parent(declaration) + parent(declarationParent) + + +listField("typeParameters", typeParameter, mutability = Var, isChild = true) + } + val typeParameter: ElementConfig by element(Declaration) { + visitorParent = declarationBase + transform = true + + parent(declarationBase) + parent(declarationWithName) + + +descriptor("TypeParameterDescriptor") + +symbol(typeParameterSymbolType) + +field("variance", type()) + +field("index", int) + +field("isReified", boolean) + +listField("superTypes", irTypeType, mutability = Var) + } + val returnTarget: ElementConfig by element(Declaration) { + parent(symbolOwner) + + +descriptor("FunctionDescriptor") + +symbol(returnTargetSymbolType) + } + val function: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(possiblyExternalDeclaration) + parent(declarationWithVisibility) + parent(typeParametersContainer) + parent(symbolOwner) + parent(declarationParent) + parent(returnTarget) + parent(memberWithContainerSource) + parent(metadataSourceOwner) + + +descriptor("FunctionDescriptor") + +symbol(functionSymbolType) + // NB: there's an inline constructor for Array and each primitive array class. + +field("isInline", boolean) + +field("isExpect", boolean) + +field("returnType", irTypeType, mutable = true) + +field("dispatchReceiverParameter", valueParameter, mutable = true, nullable = true, isChild = true) + +field("extensionReceiverParameter", valueParameter, mutable = true, nullable = true, isChild = true) + +listField("valueParameters", valueParameter, mutability = Var, isChild = true) + // The first `contextReceiverParametersCount` value parameters are context receivers. + +field("contextReceiverParametersCount", int, mutable = true) + +field("body", body, mutable = true, nullable = true, isChild = true) + } + val constructor: ElementConfig by element(Declaration) { + visitorParent = function + + parent(function) + + +descriptor("ClassConstructorDescriptor") + +symbol(constructorSymbolType) + +field("isPrimary", boolean) + } + val enumEntry: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(declarationWithName) + + +descriptor("ClassDescriptor") + +symbol(enumEntrySymbolType) + +field("initializerExpression", expressionBody, mutable = true, nullable = true, isChild = true) + +field("correspondingClass", `class`, mutable = true, nullable = true, isChild = true) + } + val errorDeclaration: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + + +field("symbol", symbolType) { + baseGetter = code("error(\"Should never be called\")") + } + } + val fakeOverrideFunction: ElementConfig by element(Declaration) { + typeKind = TypeKind.Interface + + parent(declaration) + + +symbol(simpleFunctionSymbolType) + +field("modality", type(), mutable = true) + +field("isBound", boolean) + generationCallback = { + addFunction( + FunSpec.builder("acquireSymbol") + .addModifiers(KModifier.ABSTRACT) + .addParameter("symbol", simpleFunctionSymbolType.toPoet()) + .returns(simpleFunction.toPoet()) + .build() + ) + } + } + val fakeOverrideProperty: ElementConfig by element(Declaration) { + typeKind = TypeKind.Interface + + parent(declaration) + + +symbol(propertySymbolType) + +field("modality", type(), mutable = true) + +field("getter", simpleFunction, mutable = true, nullable = true) + +field("setter", simpleFunction, mutable = true, nullable = true) + +field("isBound", boolean) + generationCallback = { + addFunction( + FunSpec.builder("acquireSymbol") + .addModifiers(KModifier.ABSTRACT) + .addParameter("symbol", propertySymbolType.toPoet()) + .returns(property.toPoet()) + .build() + ) + } + } + val field: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(possiblyExternalDeclaration) + parent(declarationWithVisibility) + parent(declarationParent) + parent(metadataSourceOwner) + + +descriptor("PropertyDescriptor") + +symbol(fieldSymbolType) + +field("type", irTypeType, mutable = true) + +field("isFinal", boolean) + +field("isStatic", boolean) + +field("initializer", expressionBody, mutable = true, nullable = true, isChild = true) + +field("correspondingPropertySymbol", propertySymbolType, mutable = true, nullable = true) + } + val localDelegatedProperty: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(declarationWithName) + parent(symbolOwner) + parent(metadataSourceOwner) + + +descriptor("VariableDescriptorWithAccessors") + +symbol(localDelegatedPropertySymbolType) + +field("type", irTypeType, mutable = true) + +field("isVar", boolean) + +field("delegate", variable, mutable = true, isChild = true) + +field("getter", simpleFunction, mutable = true, isChild = true) + +field("setter", simpleFunction, mutable = true, nullable = true, isChild = true) + } + val moduleFragment: ElementConfig by element(Declaration) { + visitorParent = rootElement + transform = true + transformByChildren = true + + +descriptor("ModuleDescriptor") + +field("name", type()) + +field("irBuiltins", type(Packages.tree, "IrBuiltIns")) + +listField("files", file, mutability = List, isChild = true) + val undefinedOffset = MemberName(Packages.tree, "UNDEFINED_OFFSET") + +field("startOffset", int) { + baseGetter = code("%M", undefinedOffset) + } + +field("endOffset", int) { + baseGetter = code("%M", undefinedOffset) + } + } + val property: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(possiblyExternalDeclaration) + parent(overridableDeclaration.withArgs("S" to propertySymbolType)) + parent(metadataSourceOwner) + parent(attributeContainer) + parent(memberWithContainerSource) + + +descriptor("PropertyDescriptor") + +symbol(propertySymbolType) + +field("isVar", boolean) + +field("isConst", boolean) + +field("isLateinit", boolean) + +field("isDelegated", boolean) + +field("isExpect", boolean) + +field("isFakeOverride", boolean) + +field("backingField", field, mutable = true, nullable = true, isChild = true) + +field("getter", simpleFunction, mutable = true, nullable = true, isChild = true) + +field("setter", simpleFunction, mutable = true, nullable = true, isChild = true) + } + + //TODO: make IrScript as IrPackageFragment, because script is used as a file, not as a class + //NOTE: declarations and statements stored separately + val script: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(declarationWithName) + parent(declarationParent) + parent(statementContainer) + parent(metadataSourceOwner) + + +symbol(scriptSymbolType) + // NOTE: is the result of the FE conversion, because there script interpreted as a class and has receiver + // TODO: consider removing from here and handle appropriately in the lowering + +field("thisReceiver", valueParameter, mutable = true, isChild = true) + +field("baseClass", irTypeType, mutable = true) + +listField("explicitCallParameters", valueParameter, mutability = Var, isChild = true) + +listField("implicitReceiversParameters", valueParameter, mutability = Var, isChild = true) + +listField("providedProperties", propertySymbolType, mutability = Var) + +listField("providedPropertiesParameters", valueParameter, mutability = Var, isChild = true) + +field("resultProperty", propertySymbolType, mutable = true, nullable = true) + +field("earlierScriptsParameter", valueParameter, mutable = true, nullable = true, isChild = true) + +listField("earlierScripts", scriptSymbolType, mutability = Var, nullable = true) + +field("targetClass", classSymbolType, mutable = true, nullable = true) + +field("constructor", constructor, mutable = true, nullable = true) + } + val simpleFunction: ElementConfig by element(Declaration) { + visitorParent = function + + parent(function) + parent(overridableDeclaration.withArgs("S" to simpleFunctionSymbolType)) + parent(attributeContainer) + + +symbol(simpleFunctionSymbolType) + +field("isTailrec", boolean) + +field("isSuspend", boolean) + +field("isFakeOverride", boolean) + +field("isOperator", boolean) + +field("isInfix", boolean) + +field("correspondingPropertySymbol", propertySymbolType, mutable = true, nullable = true) + } + val typeAlias: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(declarationWithName) + parent(declarationWithVisibility) + parent(typeParametersContainer) + + +descriptor("TypeAliasDescriptor") + +symbol(typeAliasSymbolType) + +field("isActual", boolean) + +field("expandedType", irTypeType, mutable = true) + } + val variable: ElementConfig by element(Declaration) { + visitorParent = declarationBase + + parent(declarationBase) + parent(valueDeclaration) + + +descriptor("VariableDescriptor") + +symbol(variableSymbolType) + +field("isVar", boolean) + +field("isConst", boolean) + +field("isLateinit", boolean) + +field("initializer", expression, nullable = true, mutable = true, isChild = true) + } + val packageFragment: ElementConfig by element(Declaration) { + visitorParent = rootElement + ownsChildren = false + + parent(declarationContainer) + parent(symbolOwner) + + +symbol(packageFragmentSymbolType) + +field("packageFragmentDescriptor", type(Packages.descriptors, "PackageFragmentDescriptor")) + +field("fqName", type()) + } + val externalPackageFragment: ElementConfig by element(Declaration) { + visitorParent = packageFragment + transformByChildren = true + + parent(packageFragment) + + +symbol(externalPackageFragmentSymbolType) + +field("containerSource", type(), nullable = true) + } + val file: ElementConfig by element(Declaration) { + transform = true + transformByChildren = true + visitorParent = packageFragment + + parent(packageFragment) + parent(mutableAnnotationContainerType) + parent(metadataSourceOwner) + + +symbol(fileSymbolType) + +field("module", moduleFragment) + +field("fileEntry", type(Packages.tree, "IrFileEntry")) + } + + val expression: ElementConfig by element(Expression) { + visitorParent = rootElement + transform = true + transformByChildren = true + + parent(statement) + parent(varargElement) + parent(attributeContainer) + + +field("attributeOwnerId", attributeContainer, mutable = true) { + baseDefaultValue = code("this") + } + +field("type", irTypeType, mutable = true) + } + val statementContainer: ElementConfig by element(Expression) { + ownsChildren = false + + +listField("statements", statement, mutability = List, isChild = true) + } + val body: ElementConfig by element(Expression) { + transform = true + visitorParent = rootElement + visitorParam = "body" + transformByChildren = true + typeKind = TypeKind.Class + } + val expressionBody: ElementConfig by element(Expression) { + transform = true + visitorParent = body + visitorParam = "body" + + parent(body) + + +factory + +field("expression", expression, mutable = true, isChild = true) + } + val blockBody: ElementConfig by element(Expression) { + visitorParent = body + visitorParam = "body" + + parent(body) + parent(statementContainer) + + +factory + } + val declarationReference: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +symbol(symbolType) + //diff: no accept + } + val memberAccessExpression: ElementConfig by element(Expression) { + suppressPrint = true //todo: generate this element too + visitorParent = declarationReference + visitorName = "memberAccess" + transformerReturnType = rootElement + val s = +param("S", symbolType) + + parent(declarationReference) + + +field("dispatchReceiver", expression, nullable = true, mutable = true, isChild = true) { + baseDefaultValue = code("this") + } + +field("extensionReceiver", expression, nullable = true, mutable = true, isChild = true) { + baseDefaultValue = code("this") + } + +symbol(s) + +field("origin", statementOriginType, nullable = true) + +field("typeArgumentsCount", int) + +field("typeArgumentsByIndex", type>(irTypeType.copy(nullable = true))) + } + val functionAccessExpression: ElementConfig by element(Expression) { + visitorParent = memberAccessExpression + visitorName = "functionAccess" + transformerReturnType = rootElement + + parent(memberAccessExpression.withArgs("S" to functionSymbolType)) + + +field("contextReceiversCount", int, mutable = true) + } + val constructorCall: ElementConfig by element(Expression) { + visitorParent = functionAccessExpression + transformerReturnType = rootElement + + parent(functionAccessExpression) + + +symbol(constructorSymbolType) + +field("source", type()) + +field("constructorTypeArgumentsCount", int) + } + val getSingletonValue: ElementConfig by element(Expression) { + visitorParent = declarationReference + visitorName = "SingletonReference" + + parent(declarationReference) + } + val getObjectValue: ElementConfig by element(Expression) { + visitorParent = getSingletonValue + + parent(getSingletonValue) + + +symbol(classSymbolType) + } + val getEnumValue: ElementConfig by element(Expression) { + visitorParent = getSingletonValue + + parent(getSingletonValue) + + +symbol(enumEntrySymbolType) + } + + /** + * Platform-specific low-level reference to function. + * + * On JS platform it represents a plain reference to JavaScript function. + * On JVM platform it represents a MethodHandle constant. + */ + val rawFunctionReference: ElementConfig by element(Expression) { + visitorParent = declarationReference + + parent(declarationReference) + + +symbol(functionSymbolType) + } + val containerExpression: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + parent(statementContainer) + + +field("origin", statementOriginType, nullable = true) + +field("isTransparentScope", boolean) + +listField("statements", statement, mutability = List, isChild = true) { + generationCallback = { + addModifiers(KModifier.OVERRIDE) + } + baseDefaultValue = code("ArrayList(2)") + } + } + val block: ElementConfig by element(Expression) { + visitorParent = containerExpression + accept = true + + parent(containerExpression) + + +field("isTransparentScope", boolean) { + baseGetter = code("false") + } + } + val composite: ElementConfig by element(Expression) { + visitorParent = containerExpression + + parent(containerExpression) + + +field("isTransparentScope", boolean) { + baseGetter = code("true") + } + } + val returnableBlock: ElementConfig by element(Expression) { + parent(block) + parent(symbolOwner) + parent(returnTarget) + + +symbol(returnableBlockSymbolType) + +field("inlineFunctionSymbol", functionSymbolType, nullable = true) + } + val syntheticBody: ElementConfig by element(Expression) { + visitorParent = body + visitorParam = "body" + + parent(body) + + +field("kind", type(Packages.exprs, "IrSyntheticBodyKind")) + } + val breakContinue: ElementConfig by element(Expression) { + visitorParent = expression + visitorParam = "jump" + + parent(expression) + + +field("loop", loop, mutable = true) + +field("label", string, nullable = true, mutable = true) { + baseDefaultValue = code("null") + } + } + val `break` by element(Expression) { + visitorParent = breakContinue + visitorParam = "jump" + + parent(breakContinue) + } + val `continue` by element(Expression) { + visitorParent = breakContinue + visitorParam = "jump" + + parent(breakContinue) + } + val call: ElementConfig by element(Expression) { + visitorParent = functionAccessExpression + + parent(functionAccessExpression) + + +symbol(simpleFunctionSymbolType) + +field("superQualifierSymbol", classSymbolType, nullable = true) + } + val callableReference: ElementConfig by element(Expression) { + visitorParent = memberAccessExpression + val s = +param("S", symbolType) + + parent(memberAccessExpression.withArgs("S" to s)) + + +field("referencedName", type()) + } + val functionReference: ElementConfig by element(Expression) { + visitorParent = callableReference + + parent(callableReference.withArgs("S" to functionSymbolType)) + + +field("reflectionTarget", functionSymbolType, nullable = true) + } + val propertyReference: ElementConfig by element(Expression) { + visitorParent = callableReference + + parent(callableReference.withArgs("S" to propertySymbolType)) + + +field("field", fieldSymbolType, nullable = true) + +field("getter", simpleFunctionSymbolType, nullable = true) + +field("setter", simpleFunctionSymbolType, nullable = true) + } + val localDelegatedPropertyReference: ElementConfig by element(Expression) { + visitorParent = callableReference + + parent(callableReference.withArgs("S" to localDelegatedPropertySymbolType)) + + +field("delegate", variableSymbolType) + +field("getter", simpleFunctionSymbolType) + +field("setter", simpleFunctionSymbolType, nullable = true) + } + val classReference: ElementConfig by element(Expression) { + visitorParent = declarationReference + + parent(declarationReference) + + +symbol(classifierSymbolType) + +field("classType", irTypeType, mutable = true) + } + val const: ElementConfig by element(Expression) { + visitorParent = expression + val t = +param("T") + + parent(expression) + + +field("kind", type(Packages.exprs, "IrConstKind").withArgs(t)) + +field("value", t) + } + val constantValue: ElementConfig by element(Expression) { + visitorParent = expression + transformByChildren = true + + parent(expression) + + generationCallback = { + addFunction( + FunSpec.builder("contentEquals") + .addModifiers(KModifier.ABSTRACT) + .addParameter("other", constantValue.toPoet()) + .returns(boolean.toPoet()) + .build() + ) + addFunction( + FunSpec.builder("contentHashCode") + .addModifiers(KModifier.ABSTRACT) + .returns(int.toPoet()) + .build() + ) + } + } + val constantPrimitive: ElementConfig by element(Expression) { + visitorParent = constantValue + + parent(constantValue) + + +field("value", const.withArgs("T" to TypeRef.Star), mutable = true, isChild = true) + } + val constantObject: ElementConfig by element(Expression) { + visitorParent = constantValue + + parent(constantValue) + + +field("constructor", constructorSymbolType) + +listField("valueArguments", constantValue, mutability = List, isChild = true) + +listField("typeArguments", irTypeType) + } + val constantArray: ElementConfig by element(Expression) { + visitorParent = constantValue + + parent(constantValue) + + +listField("elements", constantValue, mutability = List, isChild = true) + } + val delegatingConstructorCall: ElementConfig by element(Expression) { + visitorParent = functionAccessExpression + + parent(functionAccessExpression) + + +symbol(constructorSymbolType) + } + val dynamicExpression: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + } + val dynamicOperatorExpression: ElementConfig by element(Expression) { + visitorParent = dynamicExpression + + parent(dynamicExpression) + + +field("operator", type(Packages.exprs, "IrDynamicOperator")) + +field("receiver", expression, mutable = true, isChild = true) + +listField("arguments", expression, mutability = List, isChild = true) + } + val dynamicMemberExpression: ElementConfig by element(Expression) { + visitorParent = dynamicExpression + + parent(dynamicExpression) + + +field("memberName", string) + +field("receiver", expression, mutable = true, isChild = true) + } + val enumConstructorCall: ElementConfig by element(Expression) { + visitorParent = functionAccessExpression + + parent(functionAccessExpression) + + +symbol(constructorSymbolType) + } + val errorExpression: ElementConfig by element(Expression) { + visitorParent = expression + accept = true + + parent(expression) + + +field("description", string) + } + val errorCallExpression: ElementConfig by element(Expression) { + visitorParent = errorExpression + + parent(errorExpression) + + +field("explicitReceiver", expression, nullable = true, mutable = true, isChild = true) + +listField("arguments", expression, mutability = List, isChild = true) + } + val fieldAccessExpression: ElementConfig by element(Expression) { + visitorParent = declarationReference + visitorName = "fieldAccess" + ownsChildren = false + + parent(declarationReference) + + +symbol(fieldSymbolType) + +field("superQualifierSymbol", classSymbolType, nullable = true) + +field("receiver", expression, nullable = true, mutable = true, isChild = true) { + baseDefaultValue = code("null") + } + +field("origin", statementOriginType, nullable = true) + } + val getField: ElementConfig by element(Expression) { + visitorParent = fieldAccessExpression + + parent(fieldAccessExpression) + } + val setField: ElementConfig by element(Expression) { + visitorParent = fieldAccessExpression + + parent(fieldAccessExpression) + + +field("value", expression, mutable = true, isChild = true) + } + val functionExpression: ElementConfig by element(Expression) { + visitorParent = expression + transformerReturnType = rootElement + + parent(expression) + + +field("origin", statementOriginType) + +field("function", simpleFunction, mutable = true, isChild = true) + } + val getClass: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("argument", expression, mutable = true, isChild = true) + } + val instanceInitializerCall: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("classSymbol", classSymbolType) + } + val loop: ElementConfig by element(Expression) { + visitorParent = expression + visitorParam = "loop" + ownsChildren = false + + parent(expression) + + +field("origin", statementOriginType, nullable = true) + +field("body", expression, nullable = true, mutable = true, isChild = true) { + baseDefaultValue = code("null") + } + +field("condition", expression, mutable = true, isChild = true) + +field("label", string, nullable = true, mutable = true) { + baseDefaultValue = code("null") + } + } + val whileLoop: ElementConfig by element(Expression) { + visitorParent = loop + visitorParam = "loop" + + parent(loop) + } + val doWhileLoop: ElementConfig by element(Expression) { + visitorParent = loop + visitorParam = "loop" + + parent(loop) + } + val `return`: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("value", expression, mutable = true, isChild = true) + +field("returnTargetSymbol", returnTargetSymbolType) + } + val stringConcatenation: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +listField("arguments", expression, mutability = List, isChild = true) + } + val suspensionPoint: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("suspensionPointIdParameter", variable, mutable = true, isChild = true) + +field("result", expression, mutable = true, isChild = true) + +field("resumeResult", expression, mutable = true, isChild = true) + } + val suspendableExpression: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("suspensionPointId", expression, mutable = true, isChild = true) + +field("result", expression, mutable = true, isChild = true) + } + val `throw`: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("value", expression, mutable = true, isChild = true) + } + val `try`: ElementConfig by element(Expression) { + visitorParent = expression + visitorParam = "aTry" + + parent(expression) + + +field("tryResult", expression, mutable = true, isChild = true) + +listField("catches", catch, mutability = List, isChild = true) + +field("finallyExpression", expression, nullable = true, mutable = true, isChild = true) + } + val catch: ElementConfig by element(Expression) { + visitorParent = rootElement + visitorParam = "aCatch" + transform = true + transformByChildren = true + + +field("catchParameter", variable, mutable = true, isChild = true) + +field("result", expression, mutable = true, isChild = true) + } + val typeOperatorCall: ElementConfig by element(Expression) { + visitorParent = expression + visitorName = "typeOperator" + + parent(expression) + + +field("operator", type(Packages.exprs, "IrTypeOperator")) + +field("argument", expression, mutable = true, isChild = true) + +field("typeOperand", irTypeType, mutable = true) + +field("typeOperandClassifier", classifierSymbolType) + } + val valueAccessExpression: ElementConfig by element(Expression) { + visitorParent = declarationReference + visitorName = "valueAccess" + + parent(declarationReference) + + +symbol(valueSymbolType) + +field("origin", statementOriginType, nullable = true) + } + val getValue: ElementConfig by element(Expression) { + visitorParent = valueAccessExpression + + parent(valueAccessExpression) + } + val setValue: ElementConfig by element(Expression) { + visitorParent = valueAccessExpression + + parent(valueAccessExpression) + + +symbol(valueSymbolType) + +field("value", expression, mutable = true, isChild = true) + } + val varargElement: ElementConfig by element(Expression) + val vararg: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("varargElementType", irTypeType, mutable = true) + +listField("elements", varargElement, mutability = List, isChild = true) + } + val spreadElement: ElementConfig by element(Expression) { + visitorParent = rootElement + visitorParam = "spread" + transform = true + transformByChildren = true + + parent(varargElement) + + +field("expression", expression, mutable = true, isChild = true) + } + val `when`: ElementConfig by element(Expression) { + visitorParent = expression + + parent(expression) + + +field("origin", statementOriginType, nullable = true) + +listField("branches", branch, mutability = List, isChild = true) + } + val branch: ElementConfig by element(Expression) { + visitorParent = rootElement + visitorParam = "branch" + accept = true + transform = true + transformByChildren = true + + +field("condition", expression, mutable = true, isChild = true) + +field("result", expression, mutable = true, isChild = true) + } + val elseBranch: ElementConfig by element(Expression) { + visitorParent = branch + visitorParam = "branch" + transform = true + transformByChildren = true + + parent(branch) + } +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt new file mode 100644 index 0000000000000..912847d617d98 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/Main.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2021 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.generator + +import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil +import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.collectPreviouslyGeneratedFiles +import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration +import org.jetbrains.kotlin.ir.generator.model.config2model +import org.jetbrains.kotlin.ir.generator.print.printElements +import org.jetbrains.kotlin.ir.generator.print.printTransformer +import org.jetbrains.kotlin.ir.generator.print.printVisitor +import org.jetbrains.kotlin.ir.generator.print.printVisitorVoid +import java.io.File + +const val BASE_PACKAGE = "org.jetbrains.kotlin.ir" +const val VISITOR_PACKAGE = "$BASE_PACKAGE.visitors" + +fun main(args: Array) { + val generationPath = args.firstOrNull()?.let { File(it) } + ?: File("compiler/ir/ir.tree/gen").canonicalFile + + val config = IrTree.build() + val model = config2model(config) + + val previouslyGeneratedFiles = collectPreviouslyGeneratedFiles(generationPath) + val generatedFiles = sequence { + yieldAll(printElements(generationPath, model)) + yield(printVisitor(generationPath, model)) + yield(printVisitorVoid(generationPath, model)) + yield(printTransformer(generationPath, model)) + // IrElementTransformerVoid is too random to autogenerate + }.map { + GeneratorsFileUtil.writeFileIfContentChanged(it.file, it.newText, logNotChanged = false) + it.file + }.toList() + removeExtraFilesFromPreviousGeneration(previouslyGeneratedFiles, generatedFiles) +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt new file mode 100644 index 0000000000000..dc70db53c2fd3 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt @@ -0,0 +1,95 @@ +/* + * Copyright 2010-2021 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.generator.config + +import org.jetbrains.kotlin.ir.generator.util.TypeRef +import org.jetbrains.kotlin.ir.generator.util.TypeVariable +import org.jetbrains.kotlin.ir.generator.util.type +import org.jetbrains.kotlin.types.Variance +import kotlin.properties.PropertyDelegateProvider +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + +abstract class AbstractTreeBuilder { + private val configurationCallbacks = mutableListOf<() -> ElementConfig>() + + abstract val rootElement: ElementConfig + + fun element(category: ElementConfig.Category, name: String? = null, initializer: ElementConfig.() -> Unit = {}): ElementConfigDel { + val del = ElementConfigDel(category, name) + configurationCallbacks.add { + del.element!!.apply { initializer() } + } + return del + } + + protected fun ElementConfig.parent(type: TypeRef) { + parents.add(type) + } + + protected fun param(name: String, vararg bounds: TypeRef, variance: Variance = Variance.INVARIANT): TypeVariable { + return TypeVariable(name, bounds.toList(), variance) + } + + protected fun field( + name: String, + type: TypeRef?, + nullable: Boolean = false, + mutable: Boolean = false, + isChild: Boolean = false, + initializer: SimpleFieldConfig.() -> Unit = {} + ): SimpleFieldConfig { + checkChildType(isChild, type, name) + return SimpleFieldConfig(name, type, nullable, mutable, isChild).apply(initializer) + } + + protected fun listField( + name: String, + elementType: TypeRef?, + nullable: Boolean = false, + mutability: ListFieldConfig.Mutability = ListFieldConfig.Mutability.Immutable, + isChild: Boolean = false, + initializer: ListFieldConfig.() -> Unit = {} + ): ListFieldConfig { + checkChildType(isChild, elementType, name) + return ListFieldConfig(name, elementType, nullable, mutability, isChild).apply(initializer) + } + + private fun checkChildType(isChild: Boolean, type: TypeRef?, name: String) { + if (isChild) { + require(type == null || type is ElementConfigOrRef) { "Field $name is a child field but has non-element type $type" } + } + } + + fun build(): Config { + val elements = configurationCallbacks.map { it() } + return Config(elements, rootElement) + } + + companion object { + val int = type() + val string = type() + val boolean = type() + } +} + +class ElementConfigDel( + private val category: ElementConfig.Category, + private val name: String? +) : ReadOnlyProperty, PropertyDelegateProvider { + var element: ElementConfig? = null + private set + + override fun getValue(thisRef: AbstractTreeBuilder, property: KProperty<*>): ElementConfig { + return element!! + } + + override fun provideDelegate(thisRef: AbstractTreeBuilder, property: KProperty<*>): ElementConfigDel { + val path = thisRef.javaClass.name + "." + property.name + element = ElementConfig(path, name ?: property.name, category) + return this + } +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/ConfigModel.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/ConfigModel.kt new file mode 100644 index 0000000000000..bdde5eab6449e --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/ConfigModel.kt @@ -0,0 +1,116 @@ +/* + * Copyright 2010-2021 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.generator.config + +import com.squareup.kotlinpoet.CodeBlock +import com.squareup.kotlinpoet.PropertySpec +import com.squareup.kotlinpoet.TypeSpec +import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE +import org.jetbrains.kotlin.ir.generator.util.* + +class Config( + val elements: List, + val rootElement: ElementConfig, +) + +class ElementConfig( + val propertyName: String, + val name: String, + val category: Category +) : ElementConfigOrRef { + val params = mutableListOf() + val parents = mutableListOf() + val fields = mutableListOf() + + var visitorName: String? = null + var visitorParent: ElementConfig? = null + var visitorParam: String? = null + var accept = false // By default, accept is generated only for leaves. + var transform = false + var transformByChildren = false + var transformerReturnType: ElementConfig? = null + + var ownsChildren = true // If false, acceptChildren/transformChildren will NOT be generated. + + var typeKind: TypeKind? = null + + var generationCallback: (TypeSpec.Builder.() -> Unit)? = null + var suppressPrint = false + + override val element get() = this + override val args get() = emptyMap() + override val nullable get() = false + override fun copy(args: Map) = ElementConfigRef(this, args, false) + override fun copy(nullable: Boolean) = ElementConfigRef(this, args, nullable) + + operator fun TypeVariable.unaryPlus() = apply { + params.add(this) + } + + operator fun FieldConfig.unaryPlus() = apply { + fields.add(this) + } + + override fun toString() = element.name + + enum class Category(private val packageDir: String, val defaultVisitorParam: String) { + Expression("expressions", "expression"), + Declaration("declarations", "declaration"), + Other("", "element"); + + val packageName: String get() = BASE_PACKAGE + if (packageDir.isNotEmpty()) ".$packageDir" else "" + } +} + +sealed interface ElementConfigOrRef : ParametrizedTypeRef, TypeRefWithNullability { + val element: ElementConfig +} + +class ElementConfigRef( + override val element: ElementConfig, + override val args: Map, + override val nullable: Boolean +) : ElementConfigOrRef { + override fun copy(args: Map) = ElementConfigRef(element, args, nullable) + override fun copy(nullable: Boolean) = ElementConfigRef(element, args, nullable) + + override fun toString() = element.name +} + +sealed class FieldConfig( + val name: String, + val isChild: Boolean, +) { + var baseDefaultValue: CodeBlock? = null + var baseGetter: CodeBlock? = null + var printProperty = true + + var generationCallback: (PropertySpec.Builder.() -> Unit)? = null + + override fun toString() = name +} + +class SimpleFieldConfig( + name: String, + val type: TypeRef?, + val nullable: Boolean, + val mutable: Boolean, + isChildElement: Boolean, +) : FieldConfig(name, isChildElement) + +class ListFieldConfig( + name: String, + val elementType: TypeRef?, + val nullable: Boolean, + val mutability: Mutability, + isChildElement: Boolean, +) : FieldConfig(name, isChildElement) { + enum class Mutability { + Immutable, + Var, + List + } +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt new file mode 100644 index 0000000000000..08b6bfca72ede --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt @@ -0,0 +1,119 @@ +/* + * Copyright 2010-2021 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.generator.model + +import com.squareup.kotlinpoet.CodeBlock +import org.jetbrains.kotlin.ir.generator.config.ElementConfig +import org.jetbrains.kotlin.ir.generator.config.FieldConfig +import org.jetbrains.kotlin.ir.generator.util.* + +class Element( + config: ElementConfig, + val name: String, + val packageName: String, + val params: List, + val fields: MutableList, +) { + var elementParents: List = emptyList() + var otherParents: List> = emptyList() + var visitorParent: ElementRef? = null + var transformerReturnType: Element? = null + val targetKind = config.typeKind + var kind: Kind? = null + val typeName + get() = elementName2typeName(name) + val allParents: List + get() = elementParents + otherParents + var isLeaf = false + var walkableChildren: List = emptyList() + val transformableChildren get() = walkableChildren.filter { it.transformable } + + val visitFunName = "visit" + (config.visitorName ?: name).replaceFirstChar(Char::uppercaseChar) + val visitorParam = config.visitorParam ?: config.category.defaultVisitorParam + var accept = config.accept + val transform = config.transform + val transformByChildren = config.transformByChildren + val ownsChildren = config.ownsChildren + + val generationCallback = config.generationCallback + val suppressPrint = config.suppressPrint + val propertyName = config.propertyName + + override fun toString() = name + + enum class Kind(val typeKind: TypeKind) { + FinalClass(TypeKind.Class), + OpenClass(TypeKind.Class), + AbstractClass(TypeKind.Class), + SealedClass(TypeKind.Class), + Interface(TypeKind.Interface), + SealedInterface(TypeKind.Interface), + } + + companion object { + fun elementName2typeName(name: String) = "Ir" + name.replaceFirstChar(Char::uppercaseChar) + } +} + +data class ElementRef( + val element: Element, + override val args: Map = emptyMap(), + override val nullable: Boolean = false, +) : ParametrizedTypeRef, ClassOrElementRef { + override fun copy(args: Map) = ElementRef(element, args, nullable) + override fun copy(nullable: Boolean) = ElementRef(element, args, nullable) + override fun toString() = "${element.name}<${args}>" +} + +sealed class Field( + config: FieldConfig?, + val name: String, + val nullable: Boolean, + val mutable: Boolean, + val isChild: Boolean, +) { + abstract val type: TypeRef + abstract val baseDefaultValue: CodeBlock? + abstract val baseGetter: CodeBlock? + var isOverride = false + var needsDescriptorApiAnnotation = false + abstract val transformable: Boolean + + val printProperty = config?.printProperty ?: true + val generationCallback = config?.generationCallback + + override fun toString() = "$name: $type" +} + +class SingleField( + config: FieldConfig?, + name: String, + override var type: TypeRef, + nullable: Boolean, + mutable: Boolean, + isChild: Boolean, + override val baseDefaultValue: CodeBlock?, + override val baseGetter: CodeBlock?, +) : Field(config, name, nullable, mutable, isChild) { + override val transformable: Boolean + get() = mutable +} + +class ListField( + config: FieldConfig?, + name: String, + var elementType: TypeRef, + private val listType: ClassRef, + nullable: Boolean, + mutable: Boolean, + isChild: Boolean, + override val transformable: Boolean, + override val baseDefaultValue: CodeBlock?, + override val baseGetter: CodeBlock?, +) : Field(config, name, nullable, mutable, isChild) { + override val type: TypeRef + get() = listType.withArgs(elementType) +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt new file mode 100644 index 0000000000000..69e395f35e5e0 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Transformations.kt @@ -0,0 +1,243 @@ +/* + * Copyright 2010-2021 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.generator.model + +import org.jetbrains.kotlin.ir.generator.config.* +import org.jetbrains.kotlin.ir.generator.elementBaseType +import org.jetbrains.kotlin.ir.generator.util.* +import org.jetbrains.kotlin.utils.addToStdlib.castAll +import org.jetbrains.kotlin.utils.addToStdlib.partitionIsInstance + +private object InferredOverriddenType : TypeRef + +data class Model(val elements: List, val rootElement: Element) + +fun config2model(config: Config): Model { + val ec2el = mutableMapOf() + + val elements = config.elements.map { ec -> + val fields = ec.fields.mapTo(mutableListOf()) { fc -> + val field = when (fc) { + is SimpleFieldConfig -> SingleField( + fc, + fc.name, + fc.type ?: InferredOverriddenType, + fc.nullable, + fc.mutable, + fc.isChild, + fc.baseDefaultValue, + fc.baseGetter + ) + is ListFieldConfig -> { + val listType = if (fc.mutability == ListFieldConfig.Mutability.List) type( + "kotlin.collections", + "MutableList" + ) else type("kotlin.collections", "List") + ListField( + fc, + fc.name, + fc.elementType ?: InferredOverriddenType, + listType, + fc.nullable, + fc.mutability == ListFieldConfig.Mutability.Var, + fc.isChild, + fc.mutability != ListFieldConfig.Mutability.Immutable, + fc.baseDefaultValue, + fc.baseGetter + ) + } + } + field + } + + val element = Element( + ec, + ec.name, + ec.category.packageName, + ec.params, + fields + ) + ec2el[ec.element] = element + element + } + + val rootElement = replaceElementRefs(config, ec2el) + configureInterfacesAndAbstractClasses(elements) + addAbstractElement(elements) + markLeaves(elements) + configureDescriptorApiAnnotation(elements) + processFieldOverrides(elements) + addWalkableChildren(elements) + + return Model(elements, rootElement) +} + +private fun replaceElementRefs(config: Config, mapping: Map): Element { + val visited = mutableMapOf() + + fun transform(type: TypeRef): TypeRef { + visited[type]?.let { + return it + } + + return when (type) { + is ElementConfigOrRef -> { + val args = type.args.mapValues { transform(it.value) } + val el = mapping.getValue(type.element) + ElementRef(el, args, type.nullable) + } + is ClassRef<*> -> { + @Suppress("UNCHECKED_CAST") // this is the upper bound, compiler could know that, right? + type as ClassRef + + val args = type.args.mapValues { transform(it.value) } + type.copy(args = args) + } + else -> type + }.also { visited[type] = it } + } + + val rootEl = transform(config.rootElement) as ElementRef + + for (ec in config.elements) { + val el = mapping[ec.element]!! + val (elParents, otherParents) = ec.parents + .map { transform(it) } + .partitionIsInstance() + el.elementParents = elParents.takeIf { it.isNotEmpty() || el == rootEl.element } ?: listOf(rootEl) + el.otherParents = otherParents.castAll>().toList() + el.visitorParent = ec.visitorParent?.let(::transform) as ElementRef? + el.transformerReturnType = (ec.transformerReturnType?.let(::transform) as ElementRef?)?.element + + for (field in el.fields) { + when (field) { + is SingleField -> { + field.type = transform(field.type) + } + is ListField -> { + field.elementType = transform(field.elementType) + } + } + } + } + + return rootEl.element +} + +private fun markLeaves(elements: List) { + val leaves = elements.toMutableSet() + + for (el in elements) { + for (parent in el.elementParents) { + leaves.remove(parent.element) + } + } + + for (el in leaves) { + el.isLeaf = true + if (el.visitorParent != null) { + el.accept = true + } + } +} + +private fun addAbstractElement(elements: List) { + for (el in elements) { + if (el.kind!!.typeKind == TypeKind.Class && el.elementParents.none { it.element.kind!!.typeKind == TypeKind.Class }) { + el.otherParents += elementBaseType + } + } +} + +private fun configureDescriptorApiAnnotation(elements: List) { + for (el in elements) { + for (field in el.fields) { + val type = field.type + if (type is ClassRef<*> && type.packageName.startsWith("org.jetbrains.kotlin.descriptors") && + type.simpleName.endsWith("Descriptor") && type.simpleName != "ModuleDescriptor" + ) { + field.needsDescriptorApiAnnotation = true + } + } + } +} + +private fun processFieldOverrides(elements: List) { + for (element in iterateElementsParentFirst(elements)) { + for (field in element.fields) { + fun visitParents(visited: Element) { + for (parent in visited.elementParents) { + val overriddenField = parent.element.fields.singleOrNull { it.name == field.name } + if (overriddenField != null) { + field.isOverride = true + field.needsDescriptorApiAnnotation = + field.needsDescriptorApiAnnotation || overriddenField.needsDescriptorApiAnnotation + + fun transformInferredType(type: TypeRef, overriddenType: TypeRef) = + type.takeUnless { it is InferredOverriddenType } ?: overriddenType + when (field) { + is SingleField -> { + field.type = transformInferredType(field.type, (overriddenField as SingleField).type) + } + is ListField -> { + field.elementType = transformInferredType(field.elementType, (overriddenField as ListField).elementType) + } + } + + break + } + + visitParents(parent.element) + } + } + + visitParents(element) + } + } +} + +private fun addWalkableChildren(elements: List) { + for (element in elements) { + val walkableChildren = mutableMapOf() + + fun visitParents(visited: Element) { + for (parent in visited.elementParents) { + if (!parent.element.ownsChildren) { + for (field in parent.element.fields) { + if (field.isChild) { + walkableChildren[field.name] = field + } + } + + visitParents(parent.element) + } + } + } + + visitParents(element) + + element.fields.filter { it.isChild }.associateByTo(walkableChildren) { it.name } + + element.walkableChildren = walkableChildren.values.toList() + } +} + +private fun iterateElementsParentFirst(elements: List) = sequence { + val pending = elements.sortedBy { it.elementParents.size }.toMutableSet() + pendingLoop@ while (pending.isNotEmpty()) { + val iter = pending.iterator() + while (iter.hasNext()) { + val element = iter.next() + if (element.elementParents.none { it.element in pending }) { + yield(element) + iter.remove() + continue@pendingLoop + } + } + + error("Cannot find next element to process") + } +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt new file mode 100644 index 0000000000000..99db31bf3fd63 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/configureInterfacesAndAbstractClasses.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2010-2021 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.generator.model + +import org.jetbrains.kotlin.generators.util.Node +import org.jetbrains.kotlin.generators.util.solveGraphForClassVsInterface +import org.jetbrains.kotlin.ir.generator.util.TypeKind + +private class NodeImpl(val element: Element) : Node { + override val parents: List + get() = element.elementParents.map { NodeImpl(it.element) } + + override val origin: Node + get() = this + + override fun equals(other: Any?): Boolean = + other is NodeImpl && element == other.element + + override fun hashCode(): Int = + element.hashCode() +} + +fun configureInterfacesAndAbstractClasses(elements: List) { + val nodes = elements.map(::NodeImpl) + val solution = solveGraphForClassVsInterface( + nodes, + nodes.filter { it.element.targetKind == TypeKind.Interface }, + nodes.filter { it.element.targetKind == TypeKind.Class }, + ) + updateKinds(nodes, solution) +} + +private fun updateKinds(nodes: List, solution: List) { + for (index in solution.indices) { + val isClass = solution[index] + val element = nodes[index].element + if (isClass) { + check(element.targetKind != TypeKind.Interface) { element } + element.kind = Element.Kind.AbstractClass + } else { + element.kind = Element.Kind.Interface + } + } +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Common.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Common.kt new file mode 100644 index 0000000000000..a79257d62dbbd --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Common.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2021 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.generator.print + +import com.squareup.kotlinpoet.FileSpec +import com.squareup.kotlinpoet.TypeSpec +import org.jetbrains.kotlin.ir.generator.util.GeneratedFile +import java.io.File + +private val COPYRIGHT by lazy { File("license/COPYRIGHT_HEADER.txt").readText() } +private val GENERATED_MESSAGE = """ + //This file was generated automatically + //DO NOT MODIFY IT MANUALLY + """.trimIndent() +private val PREFIX by lazy { "$COPYRIGHT\n\n$GENERATED_MESSAGE\n\n" } + +fun printTypeCommon(generationPath: File, packageName: String, type: TypeSpec): GeneratedFile { + val code = FileSpec.builder(packageName, type.name!!) + .indent(" ") + .addType(type) + .build() + .toString() + .replace("`", "") + .replace("public ", "") + .replace(":\\s*Unit".toRegex(), "") + .replace("import kotlin\\..*\\n".toRegex(), "") + // Half-baked attempt to remove double indent generated by KotlinPoet, which is not idiomatic according to the Kotlin style guide + .replace(" visitor.visit", " visitor.visit") + .replace(" accept(transformer, data)", " accept(transformer, data)") + + val text = PREFIX + code + return GeneratedFile(getPathForFile(generationPath, packageName, type.name!!), text) +} + +fun getPathForFile(generationPath: File, packageName: String, typeName: String): File { + val dir = generationPath.resolve(packageName.replace(".", "/")) + return File(dir, "$typeName.kt") +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt new file mode 100644 index 0000000000000..b92fd38c6c3be --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt @@ -0,0 +1,194 @@ +/* + * Copyright 2010-2021 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.generator.print + +import com.squareup.kotlinpoet.* +import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE +import org.jetbrains.kotlin.ir.generator.elementTransformerType +import org.jetbrains.kotlin.ir.generator.elementVisitorType +import org.jetbrains.kotlin.ir.generator.model.* +import org.jetbrains.kotlin.ir.generator.util.TypeKind +import org.jetbrains.kotlin.ir.generator.util.tryParameterizedBy +import java.io.File + +fun printElements(generationPath: File, model: Model) = sequence { + for (element in model.elements) { + if (element.suppressPrint) continue + + val elementName = element.toPoet() + val selfParametrizedElementName = element.toPoetSelfParameterized() + + val elementType = when (element.kind?.typeKind) { + null -> error("Element's category not configured") + TypeKind.Class -> TypeSpec.classBuilder(elementName) + TypeKind.Interface -> TypeSpec.interfaceBuilder(elementName) + }.apply { + addModifiers( + when (element.kind) { + Element.Kind.SealedClass -> listOf(KModifier.SEALED) + Element.Kind.SealedInterface -> listOf(KModifier.SEALED) + Element.Kind.AbstractClass -> listOf(KModifier.ABSTRACT) + Element.Kind.FinalClass -> listOf(KModifier.FINAL) + Element.Kind.OpenClass -> listOf(KModifier.OPEN) + else -> emptyList() + } + ) + addTypeVariables(element.params.map { it.toPoet() }) + + val (classes, interfaces) = element.allParents.partition { it.typeKind == TypeKind.Class } + classes.singleOrNull()?.let { + superclass(it.toPoet()) + } + addSuperinterfaces(interfaces.map { it.toPoet() }) + + for (field in element.fields) { + if (!field.printProperty) continue + val poetType = field.type.toPoet().copy(nullable = field.nullable) + addProperty(PropertySpec.builder(field.name, poetType).apply { + mutable(field.mutable) + if (field.isOverride) { + addModifiers(KModifier.OVERRIDE) + } + if (field.baseDefaultValue == null && field.baseGetter == null) { + addModifiers(KModifier.ABSTRACT) + } + + field.baseDefaultValue?.let { + initializer(it) + } + field.baseGetter?.let { + getter(FunSpec.getterBuilder().addCode("return ").addCode(it).build()) + } + + if (field.needsDescriptorApiAnnotation) { + addAnnotation(descriptorApiAnnotation) + } + + field.generationCallback?.invoke(this) + }.build()) + } + + val isRootElement = element.elementParents.isEmpty() + if (element.accept) { + addFunction(FunSpec.builder("accept").apply { + addModifiers(if (isRootElement) KModifier.ABSTRACT else KModifier.OVERRIDE) + val r = TypeVariableName("R") + val d = TypeVariableName("D") + addTypeVariable(r) + addTypeVariable(d) + addParameter("visitor", elementVisitorType.toPoet().tryParameterizedBy(r, d)) + addParameter("data", d) + returns(r) + if (!isRootElement) { + addStatement("return visitor.${element.visitFunName}(this, data)") + } + }.build()) + } + + if (element.transform) { + addFunction(FunSpec.builder("transform").apply { + addModifiers(if (isRootElement) KModifier.ABSTRACT else KModifier.OVERRIDE) + val d = TypeVariableName("D") + addTypeVariable(d) + addParameter("transformer", elementTransformerType.toPoet().tryParameterizedBy(d)) + addParameter("data", d) + returns(selfParametrizedElementName) + if (!isRootElement) { + addStatement("return accept(transformer, data) as %T", selfParametrizedElementName) + } + }.build()) + } + + if (element.ownsChildren && (isRootElement || element.walkableChildren.isNotEmpty())) { + addFunction(FunSpec.builder("acceptChildren").apply { + addModifiers(if (isRootElement) KModifier.ABSTRACT else KModifier.OVERRIDE) + val d = TypeVariableName("D") + addTypeVariable(d) + addParameter("visitor", elementVisitorType.toPoet().tryParameterizedBy(UNIT, d)) + addParameter("data", d) + + for (child in element.walkableChildren) { + addStatement(buildString { + append(child.name) + if (child.nullable) append("?") + when (child) { + is SingleField -> append(".accept(visitor, data)") + is ListField -> append(".forEach { it.accept(visitor, data) }") + } + }) + } + }.build()) + } + + if (element.ownsChildren && (isRootElement || element.transformableChildren.isNotEmpty())) { + addFunction(FunSpec.builder("transformChildren").apply { + addModifiers(if (isRootElement) KModifier.ABSTRACT else KModifier.OVERRIDE) + val d = TypeVariableName("D") + addTypeVariable(d) + addParameter("transformer", elementTransformerType.toPoet().tryParameterizedBy(d)) + addParameter("data", d) + + for (child in element.transformableChildren) { + val args = mutableListOf() + val code = buildString { + when (child) { + is SingleField -> { + append(child.name) + append(" = ") + append(child.name) + if (child.nullable) append("?") + append(".transform(transformer, data)") + } + is ListField -> { + append(child.name) + if (child.mutable) { + append(" = ") + append(child.name) + if (child.nullable) append("?") + } + append(".%M(transformer, data)") + args.add(if (child.mutable) transformIfNeeded else transformInPlace) + } + } + + if (child is SingleField) { + val elRef = child.type as ElementRef + if (!elRef.element.transform) { + append(" as") + if (child.nullable) append("?") + append(" %T") + args.add(elRef.toPoet()) + } + } + } + + addStatement(code, *args.toTypedArray()) + } + }.build()) + } + + generateElementKDoc(element) + + element.generationCallback?.invoke(this) + }.build() + + yield(printTypeCommon(generationPath, elementName.packageName, elementType)) + } +} + +private fun TypeSpec.Builder.generateElementKDoc(element: Element) { + addKdoc(buildString { + append("A ") + append(if (element.isLeaf) "leaf" else "non-leaf") + appendLine(" IR tree element.") + + append("@sample ${element.propertyName}") + }) +} + +private val descriptorApiAnnotation = ClassName("org.jetbrains.kotlin.ir", "ObsoleteDescriptorBasedAPI") +private val transformIfNeeded = MemberName("$BASE_PACKAGE.util", "transformIfNeeded", true) +private val transformInPlace = MemberName("$BASE_PACKAGE.util", "transformInPlace", true) diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Types.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Types.kt new file mode 100644 index 0000000000000..dbf1f3347c434 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Types.kt @@ -0,0 +1,73 @@ +/* + * Copyright 2010-2021 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.generator.print + +import com.squareup.kotlinpoet.* +import org.jetbrains.kotlin.ir.generator.config.ElementConfigOrRef +import org.jetbrains.kotlin.ir.generator.model.Element +import org.jetbrains.kotlin.ir.generator.model.Element.Companion.elementName2typeName +import org.jetbrains.kotlin.ir.generator.model.ElementRef +import org.jetbrains.kotlin.ir.generator.util.* +import org.jetbrains.kotlin.types.Variance + +fun Element.toPoet() = ClassName(packageName, typeName) +fun Element.toPoetSelfParameterized() = toPoet().parameterizedByIfAny(poetTypeVariables) +fun Element.toPoetStarParameterized() = toPoet().parameterizedByIfAny(List(params.size) { STAR }) +val Element.poetTypeVariables get() = params.map { TypeVariableName(it.name) } + +fun TypeRef.toPoet(): TypeName { + return when (this) { + is ElementRef -> ClassName(element.packageName, element.typeName).parameterizedByIfAny(typeArgsToPoet()) + is ClassRef<*> -> ClassName(packageName, simpleNames).parameterizedByIfAny(typeArgsToPoet()) + is NamedTypeParameterRef -> TypeVariableName(name) + is ElementConfigOrRef -> ClassName(this.element.category.packageName, elementName2typeName(element.name)).parameterizedByIfAny( + typeArgsToPoet() + ) // ad-hoc solution + is TypeRef.Star -> STAR + else -> error("Unexpected type reference: $this") + }.let { + if (this is TypeRefWithNullability) it.copy(nullable = nullable) else it + } +} + +private fun ParametrizedTypeRef<*, *>.typeArgsToPoet(): List { + if (args.isEmpty()) { + return emptyList() + } + + fun fromPositional(args: Map): List { + val num = args.keys.maxOfOrNull { it.index }!! + return (0..num).map { i -> args[PositionTypeParameterRef(i)]?.toPoet() ?: STAR } + } + + val positional = args.keys.filterIsInstance() + if (positional.size == args.size) { + @Suppress("UNCHECKED_CAST") + return fromPositional(args as Map) + } else { + check(positional.isEmpty()) { "Can't yet handle mixed index-name args" } + this as ElementRef // Named args must only be used with generated elements (for now) + + val args = args.entries + .associate { p -> PositionTypeParameterRef(element.params.withIndex().single { it.value.name == p.key.name }.index) to p.value } + return fromPositional(args) + } +} + +fun TypeVariable.toPoet() = TypeVariableName( + name, bounds.map { it.toPoet() }, when (variance) { + Variance.INVARIANT -> null + Variance.IN_VARIANCE -> KModifier.IN + Variance.OUT_VARIANCE -> KModifier.OUT + } +) + +val ClassOrElementRef.typeKind: TypeKind + get() = when (this) { + is ElementRef -> element.kind!!.typeKind + is ClassRef<*> -> kind + else -> error("Unexpected type: $this") + } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt new file mode 100644 index 0000000000000..e484586b6ff48 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt @@ -0,0 +1,114 @@ +/* + * Copyright 2010-2021 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.generator.print + +import com.squareup.kotlinpoet.* +import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy +import org.jetbrains.kotlin.ir.generator.VISITOR_PACKAGE +import org.jetbrains.kotlin.ir.generator.model.Element +import org.jetbrains.kotlin.ir.generator.model.Model +import org.jetbrains.kotlin.ir.generator.util.GeneratedFile +import java.io.File + +private val visitorTypeName = ClassName(VISITOR_PACKAGE, "IrElementVisitor") +private val visitorVoidTypeName = ClassName(VISITOR_PACKAGE, "IrElementVisitorVoid") +private val transformerTypeName = ClassName(VISITOR_PACKAGE, "IrElementTransformer") + +fun printVisitor(generationPath: File, model: Model): GeneratedFile { + val visitorType = TypeSpec.interfaceBuilder(visitorTypeName).apply { + val r = TypeVariableName("R", KModifier.OUT) + val d = TypeVariableName("D", KModifier.IN) + addTypeVariable(r) + addTypeVariable(d) + + fun buildVisitFun(element: Element) = FunSpec.builder(element.visitFunName).apply { + addParameter(element.visitorParam, element.toPoetStarParameterized()) + addParameter("data", d) + returns(r) + } + + addFunction(buildVisitFun(model.rootElement).addModifiers(KModifier.ABSTRACT).build()) + + for (element in model.elements) { + element.visitorParent?.let { parent -> + addFunction(buildVisitFun(element).apply { + addStatement("return ${parent.element.visitFunName}(${element.visitorParam}, data)") + }.build()) + } + } + }.build() + + return printTypeCommon(generationPath, visitorTypeName.packageName, visitorType) +} + +fun printVisitorVoid(generationPath: File, model: Model): GeneratedFile { + val dataType = NOTHING.copy(nullable = true) + + val visitorType = TypeSpec.interfaceBuilder(visitorVoidTypeName).apply { + addSuperinterface(visitorTypeName.parameterizedBy(UNIT, dataType)) + + fun buildVisitFun(element: Element) = FunSpec.builder(element.visitFunName).apply { + addModifiers(KModifier.OVERRIDE) + addParameter(element.visitorParam, element.toPoetStarParameterized()) + addParameter("data", dataType) + addStatement("return ${element.visitFunName}(${element.visitorParam})") + } + + fun buildVisitVoidFun(element: Element) = FunSpec.builder(element.visitFunName).apply { + addParameter(element.visitorParam, element.toPoetStarParameterized()) + } + + addFunction(buildVisitFun(model.rootElement).build()) + addFunction(buildVisitVoidFun(model.rootElement).build()) + + for (element in model.elements) { + element.visitorParent?.let { parent -> + addFunction(buildVisitFun(element).build()) + addFunction(buildVisitVoidFun(element).apply { + addStatement("return ${parent.element.visitFunName}(${element.visitorParam})") + }.build()) + } + } + }.build() + + return printTypeCommon(generationPath, visitorVoidTypeName.packageName, visitorType) +} + +fun printTransformer(generationPath: File, model: Model): GeneratedFile { + val visitorType = TypeSpec.interfaceBuilder(transformerTypeName).apply { + val d = TypeVariableName("D", KModifier.IN) + addTypeVariable(d) + + addSuperinterface(visitorTypeName.parameterizedBy(model.rootElement.toPoetStarParameterized(), d)) + + fun buildVisitFun(element: Element) = FunSpec.builder(element.visitFunName).apply { + addModifiers(KModifier.OVERRIDE) + addParameter(element.visitorParam, element.toPoetStarParameterized()) + addParameter("data", d) + } + + for (element in model.elements) { + if (element.transformByChildren) { + addFunction(buildVisitFun(element).apply { + addStatement("${element.visitorParam}.transformChildren(this, data)") + addStatement("return ${element.visitorParam}") + returns((element.transformerReturnType ?: element).toPoetStarParameterized()) + }.build()) + } else { + element.visitorParent?.let { parent -> + addFunction(buildVisitFun(element).apply { + addStatement("return ${parent.element.visitFunName}(${element.visitorParam}, data)") + element.transformerReturnType?.let { + returns(it.toPoetStarParameterized()) + } + }.build()) + } + } + } + }.build() + + return printTypeCommon(generationPath, transformerTypeName.packageName, visitorType) +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/util/TypeRef.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/util/TypeRef.kt new file mode 100644 index 0000000000000..55abb8370b27d --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/util/TypeRef.kt @@ -0,0 +1,128 @@ +/* + * Copyright 2010-2021 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.generator.util + +import com.squareup.kotlinpoet.asClassName +import org.jetbrains.kotlin.types.Variance +import java.util.* +import kotlin.reflect.KClass + +interface TypeRef { + object Star : TypeRef +} + +interface ClassOrElementRef : TypeRefWithNullability + +// Based on com.squareup.kotlinpoet.ClassName +class ClassRef

private constructor( + val kind: TypeKind, + names: List, + override val args: Map, + override val nullable: Boolean = false, +) : ParametrizedTypeRef, P>, ClassOrElementRef { + /** + * Returns a class name created from the given parts. For example, calling this with package name + * `"java.util"` and simple names `"Map"`, `"Entry"` yields `Map.Entry`. + */ + constructor(kind: TypeKind, packageName: String, vararg simpleNames: String, args: Map = emptyMap()) : + this(kind, listOf(packageName, *simpleNames), args) { + require(simpleNames.isNotEmpty()) { "simpleNames must not be empty" } + require(simpleNames.none { it.isEmpty() }) { + "simpleNames must not contain empty items: ${simpleNames.contentToString()}" + } + } + + /** From top to bottom. This will be `["java.util", "Map", "Entry"]` for `Map.Entry`. */ + private val names = Collections.unmodifiableList(names) + + /** Fully qualified name using `.` as a separator, like `kotlin.collections.Map.Entry`. */ + val canonicalName: String = if (names[0].isEmpty()) + names.subList(1, names.size).joinToString(".") else + names.joinToString(".") + + /** Package name, like `"kotlin.collections"` for `Map.Entry`. */ + val packageName: String get() = names[0] + + /** Simple name of this class, like `"Entry"` for `Map.Entry`. */ + val simpleName: String get() = names[names.size - 1] + + /** + * The enclosing classes, outermost first, followed by the simple name. This is `["Map", "Entry"]` + * for `Map.Entry`. + */ + val simpleNames: List get() = names.subList(1, names.size) + + override fun copy(args: Map) = ClassRef(kind, names, args, nullable) + override fun copy(nullable: Boolean) = ClassRef(kind, names, args, nullable) + + override fun toString() = canonicalName +} + +sealed interface TypeParameterRef : TypeRef + +data class PositionTypeParameterRef( + val index: Int +) : TypeParameterRef { + override fun toString() = index.toString() +} + +open class NamedTypeParameterRef( + val name: String +) : TypeParameterRef { + override fun equals(other: Any?): Boolean { + return other is NamedTypeParameterRef && other.name == name + } + + override fun hashCode(): Int { + return name.hashCode() + } + + override fun toString() = name +} + +interface TypeRefWithNullability : TypeRef { + val nullable: Boolean + + fun copy(nullable: Boolean): TypeRefWithNullability +} + +interface ParametrizedTypeRef : TypeRef { + val args: Map + + fun copy(args: Map): Self +} + +fun ParametrizedTypeRef.withArgs(vararg args: Pair) = + copy(args.associate { (k, v) -> NamedTypeParameterRef(k) to v }) + +fun ParametrizedTypeRef.withArgs(vararg args: TypeRef) = + copy(args.withIndex().associate { (i, t) -> PositionTypeParameterRef(i) to t }) + + +class TypeVariable( + name: String, + val bounds: List, + val variance: Variance +) : NamedTypeParameterRef(name) + +fun

KClass<*>.asRef(): ClassRef

{ + val poet = this.asClassName() + val kind = if (this.java.isInterface) TypeKind.Interface else TypeKind.Class + return ClassRef(kind, poet.packageName, *poet.simpleNames.toTypedArray()) +} + +inline fun type() = T::class.asRef() +inline fun refNamed() = T::class.asRef() +inline fun type(vararg args: Pair) = T::class.asRef().withArgs(*args) +inline fun type(vararg args: TypeRef) = T::class.asRef().withArgs(*args) + +fun type(packageName: String, name: String, kind: TypeKind = TypeKind.Interface) = + ClassRef(kind, packageName, name) + +enum class TypeKind { + Class, + Interface +} diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/util/Utils.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/util/Utils.kt new file mode 100644 index 0000000000000..7232ee582b74f --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/util/Utils.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2021 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.generator.util + +import com.squareup.kotlinpoet.ClassName +import com.squareup.kotlinpoet.CodeBlock +import com.squareup.kotlinpoet.ParameterizedTypeName +import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy +import com.squareup.kotlinpoet.TypeName +import java.io.File + +class GeneratedFile(val file: File, val newText: String) + +fun ClassName.parameterizedByIfAny(typeArguments: List) = + if (typeArguments.isNotEmpty()) parameterizedBy(typeArguments) else this + +fun TypeName.tryParameterizedBy(vararg typeArguments: TypeName) = when (this) { + is ClassName -> parameterizedBy(*typeArguments) + is ParameterizedTypeName -> this.rawType.parameterizedBy(*typeArguments) + else -> { + if (typeArguments.isNotEmpty()) + error("Type $this cannot be parameterized") + else this + } +} + +fun code(code: String, vararg args: Any?) = CodeBlock.of(code, *args) diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt index 2b4e1713da324..80e407d3a0653 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/addToStdlib.kt @@ -68,6 +68,25 @@ inline fun Iterable<*>.lastIsInstanceOrNull(): T? { } } +inline fun Iterable.partitionIsInstance(): Pair, List> { + val first = ArrayList() + val second = ArrayList() + for (element in this) { + if (element is R) { + first.add(element) + } else { + second.add(element) + } + } + return Pair(first, second) +} + +inline fun Iterable<*>.castAll(): Iterable { + for (element in this) element as T + @Suppress("UNCHECKED_CAST") + return this as Iterable +} + fun sequenceOfLazyValues(vararg elements: () -> T): Sequence = elements.asSequence().map { it() } fun Pair.swap(): Pair = Pair(second, first) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index c118451c8cebb..663a888f577d0 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2663,6 +2663,12 @@ + + + + + + diff --git a/settings.gradle b/settings.gradle index 2ffa9441e6776..ba2701409aa34 100644 --- a/settings.gradle +++ b/settings.gradle @@ -123,6 +123,7 @@ include ":benchmarks", ":kotlin-compiler-runner", ":compiler:cli-common", ":compiler:ir.tree", + ":compiler:ir.tree:tree-generator", ":compiler:ir.tree.impl", ":compiler:ir.psi2ir", ":compiler:ir.ir2cfg", @@ -667,6 +668,7 @@ project(':kotlin-compiler-runner-unshaded').projectDir = "$rootDir/compiler/comp project(':kotlin-compiler-runner').projectDir = "$rootDir/compiler/compiler-runner" as File project(':kotlin-ant').projectDir = "$rootDir/ant" as File project(':compiler:ir.tree').projectDir = "$rootDir/compiler/ir/ir.tree" as File +project(':compiler:ir.tree:tree-generator').projectDir = "$rootDir/compiler/ir/ir.tree/tree-generator" as File project(':compiler:ir.tree.impl').projectDir = "$rootDir/compiler/ir/ir.tree.impl" as File project(':compiler:ir.psi2ir').projectDir = "$rootDir/compiler/ir/ir.psi2ir" as File project(':compiler:ir.ir2cfg').projectDir = "$rootDir/compiler/ir/ir.ir2cfg" as File