From 7dc15b15bbbc0ed7f403fa672263fd27a4a0b56d Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 12 Jan 2018 13:47:04 +0300 Subject: [PATCH] Add basic properties to IR declarations --- .../kotlin/ir/declarations/IrClass.kt | 33 +++++++---- .../kotlin/ir/declarations/IrDeclaration.kt | 2 +- .../ir/declarations/IrDeclarationOrigin.kt | 2 +- .../kotlin/ir/declarations/IrEnumEntry.kt | 3 + .../kotlin/ir/declarations/IrField.kt | 25 ++++++++ .../kotlin/ir/declarations/IrFile.kt | 5 +- .../kotlin/ir/declarations/IrFunction.kt | 22 +++---- .../declarations/IrLocalDelegatedProperty.kt | 7 +++ .../ir/declarations/IrModuleFragment.kt | 4 +- .../kotlin/ir/declarations/IrProperty.kt | 27 +++++---- .../ir/declarations/IrSimpleFunction.kt | 31 ++++++++++ .../kotlin/ir/declarations/IrTypeParameter.kt | 8 +++ .../ir/declarations/IrValueParameter.kt | 11 +++- .../kotlin/ir/declarations/IrVariable.kt | 8 +++ .../impl/IrAnonymousInitializerImpl.kt | 12 ++-- .../ir/declarations/impl/IrClassImpl.kt | 37 +++++++++--- .../ir/declarations/impl/IrConstructorImpl.kt | 46 +++++++++++---- .../ir/declarations/impl/IrDeclarationBase.kt | 6 +- .../ir/declarations/impl/IrEnumEntryImpl.kt | 22 ++++--- .../impl/IrErrorDeclarationImpl.kt | 6 +- .../impl/IrExternalPackageFragmentImpl.kt | 9 ++- .../ir/declarations/impl/IrFieldImpl.kt | 28 ++++++--- .../kotlin/ir/declarations/impl/IrFileImpl.kt | 24 +++++--- .../ir/declarations/impl/IrFunctionBase.kt | 11 +++- .../ir/declarations/impl/IrFunctionImpl.kt | 57 +++++++++++++++---- .../impl/IrLocalDelegatedPropertyImpl.kt | 47 ++++++++++----- .../declarations/impl/IrModuleFragmentImpl.kt | 11 ++-- .../ir/declarations/impl/IrPropertyImpl.kt | 44 +++++++++++--- .../ir/declarations/impl/IrTypeAliasImpl.kt | 8 +-- .../declarations/impl/IrTypeParameterImpl.kt | 31 +++++++--- .../declarations/impl/IrValueParameterImpl.kt | 47 +++++++++++---- .../ir/declarations/impl/IrVariableImpl.kt | 49 ++++++++++++---- 32 files changed, 508 insertions(+), 175 deletions(-) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt index 603d1b9ad1e..972d5eddc98 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt @@ -17,9 +17,11 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ValueDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.symbols.IrClassSymbol +import org.jetbrains.kotlin.name.Name interface IrClass : IrSymbolDeclaration, IrDeclarationContainer, IrTypeParametersContainer { override val declarationKind: IrDeclarationKind @@ -27,6 +29,13 @@ interface IrClass : IrSymbolDeclaration, IrDeclarationContainer, override val descriptor: ClassDescriptor + val name: Name + val kind: ClassKind + val visibility: Visibility + val modality: Modality + val isCompanion: Boolean + val isData: Boolean + var thisReceiver: IrValueParameter? } @@ -39,15 +48,15 @@ fun IrClass.addAll(members: List) { } fun IrClass.getInstanceInitializerMembers() = - declarations.filter { - when (it) { - is IrAnonymousInitializer -> - true - is IrProperty -> - it.backingField?.initializer != null - is IrField -> - it.initializer != null - else -> false - } + declarations.filter { + when (it) { + is IrAnonymousInitializer -> + true + is IrProperty -> + it.backingField?.initializer != null + is IrField -> + it.initializer != null + else -> false } + } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index c89b66660ac..a4a63c30dc7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -32,7 +32,7 @@ interface IrDeclaration : IrStatement { val origin: IrDeclarationOrigin override fun transform(transformer: IrElementTransformer, data: D): IrStatement = - accept(transformer, data) as IrStatement + accept(transformer, data) as IrStatement } interface IrSymbolDeclaration : IrDeclaration, IrSymbolOwner { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index 11ca617150d..9d468adb214 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -38,6 +38,6 @@ interface IrDeclarationOrigin { object IR_BUILTINS_STUB : IrDeclarationOriginImpl("IR_BUILTINS_STUB") } -abstract class IrDeclarationOriginImpl(val name: String): IrDeclarationOrigin { +abstract class IrDeclarationOriginImpl(val name: String) : IrDeclarationOrigin { override fun toString(): String = name } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt index df014af605f..e190c477d98 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt @@ -19,12 +19,15 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol +import org.jetbrains.kotlin.name.Name interface IrEnumEntry : IrSymbolDeclaration { override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.ENUM_ENTRY override val descriptor: ClassDescriptor + val name: Name + var correspondingClass: IrClass? var initializerExpression: IrExpression? } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt new file mode 100644 index 00000000000..637ec7b8282 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. 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.declarations + +import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody +import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType + +interface IrField : IrSymbolDeclaration { + override val descriptor: PropertyDescriptor + + override val declarationKind: IrDeclarationKind + get() = IrDeclarationKind.FIELD + + val name: Name + val type: KotlinType + val visibility: Visibility + var initializer: IrExpressionBody? +} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt index adb17eb60f0..816a782547a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFile.kt @@ -24,10 +24,13 @@ import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrFileSymbol import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.name.FqName interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner { val packageFragmentDescriptor: PackageFragmentDescriptor override val symbol: IrPackageFragmentSymbol + + val fqName: FqName } interface IrExternalPackageFragment : IrPackageFragment { @@ -41,7 +44,7 @@ interface IrFile : IrPackageFragment { val fileAnnotations: MutableList override fun transform(transformer: IrElementTransformer, data: D): IrFile = - accept(transformer, data) as IrFile + accept(transformer, data) as IrFile } val IrFile.name: String get() = fileEntry.name diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt index c6923071ebb..ce9f9d3aa3b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFunction.kt @@ -18,14 +18,19 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol -import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.types.KotlinType interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner { override val descriptor: FunctionDescriptor - override val symbol : IrFunctionSymbol + override val symbol: IrFunctionSymbol + + val visibility: Visibility + val isInline: Boolean // NB: there's an inline constructor for Array and each primitive array class + val returnType: KotlinType var dispatchReceiverParameter: IrValueParameter? var extensionReceiverParameter: IrValueParameter? @@ -35,22 +40,17 @@ interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner { } -interface IrSimpleFunction : IrFunction, IrSymbolDeclaration { - override val declarationKind: IrDeclarationKind - get() = IrDeclarationKind.FUNCTION -} - fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter = - valueParameters.getOrElse(parameter.index) { - throw AssertionError("No IrValueParameter for $parameter") - }.also { found -> + valueParameters.getOrElse(parameter.index) { + throw AssertionError("No IrValueParameter for $parameter") + }.also { found -> assert(found.descriptor == parameter) { "Parameter indices mismatch at $descriptor: $parameter != ${found.descriptor}" } } fun IrFunction.getDefault(parameter: ValueParameterDescriptor): IrExpressionBody? = - getIrValueParameter(parameter).defaultValue + getIrValueParameter(parameter).defaultValue fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) { getIrValueParameter(parameter).defaultValue = expressionBody diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt index d9270d25930..e9cacc4dae3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt @@ -17,9 +17,16 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType interface IrLocalDelegatedProperty : IrDeclaration { override val descriptor: VariableDescriptorWithAccessors + + val name: Name + val type: KotlinType + val isVar: Boolean + var delegate: IrVariable var getter: IrFunction var setter: IrFunction? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt index 3fa4bf1a5a5..98c8e1fb02e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrModuleFragment.kt @@ -21,8 +21,10 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.name.Name interface IrModuleFragment : IrElement { + val name: Name val descriptor: ModuleDescriptor val irBuiltins: IrBuiltIns val files: MutableList @@ -33,6 +35,6 @@ interface IrModuleFragment : IrElement { override val endOffset: Int get() = UNDEFINED_OFFSET override fun transform(transformer: IrElementTransformer, data: D): IrElement = - accept(transformer, data) as IrModuleFragment + accept(transformer, data) as IrModuleFragment } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt index daeb2c57a61..d90a37c5cf3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrProperty.kt @@ -16,27 +16,30 @@ package org.jetbrains.kotlin.ir.declarations +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor -import org.jetbrains.kotlin.ir.expressions.IrExpressionBody -import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol +import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType interface IrProperty : IrDeclaration { override val descriptor: PropertyDescriptor - val typeParameters: MutableList + + val name: Name + val type: KotlinType + val modality: Modality + val visibility: Visibility + val isVar: Boolean + val isConst: Boolean + val isLateinit: Boolean val isDelegated: Boolean + + val typeParameters: MutableList + var backingField: IrField? var getter: IrFunction? var setter: IrFunction? override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.PROPERTY -} - -interface IrField : IrSymbolDeclaration { - override val descriptor: PropertyDescriptor - - override val declarationKind: IrDeclarationKind - get() = IrDeclarationKind.FIELD - - var initializer: IrExpressionBody? } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt new file mode 100644 index 00000000000..4c8335b3a5d --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2017 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. + */ + +package org.jetbrains.kotlin.ir.declarations + +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.name.Name + +interface IrSimpleFunction : IrFunction, IrSymbolDeclaration { + val name: Name + val modality: Modality + val isTailrec: Boolean + val isSuspend: Boolean + + override val declarationKind: IrDeclarationKind + get() = IrDeclarationKind.FUNCTION +} \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt index c032aeb701b..90ff3fcbdfd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt @@ -19,6 +19,9 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.Variance interface IrTypeParameter : IrSymbolDeclaration { override val declarationKind: IrDeclarationKind @@ -26,5 +29,10 @@ interface IrTypeParameter : IrSymbolDeclaration { override val descriptor: TypeParameterDescriptor + val name: Name + val variance: Variance + val index: Int + val upperBounds: List + override fun transform(transformer: IrElementTransformer, data: D): IrTypeParameter } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt index 5dda400fdf1..b871bf5a15e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt @@ -20,6 +20,8 @@ import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType interface IrValueParameter : IrSymbolDeclaration { override val declarationKind: IrDeclarationKind @@ -27,7 +29,14 @@ interface IrValueParameter : IrSymbolDeclaration { override val descriptor: ParameterDescriptor - override fun transform(transformer: IrElementTransformer, data: D): IrValueParameter + val name: Name + val index: Int + val type: KotlinType + val varargElementType: KotlinType? + val isCrossinline: Boolean + val isNoinline: Boolean var defaultValue: IrExpressionBody? + + override fun transform(transformer: IrElementTransformer, data: D): IrValueParameter } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt index 42a2718d8c1..5c5eaf0c7fe 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt @@ -19,10 +19,18 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType interface IrVariable : IrSymbolDeclaration { override val descriptor: VariableDescriptor + val name: Name + val type: KotlinType + val isVar: Boolean + val isConst: Boolean + val isLateinit: Boolean + override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.VARIABLE diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt index 0c349ef3cc7..9f6dac06030 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrAnonymousInitializerImpl.kt @@ -26,17 +26,17 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor class IrAnonymousInitializerImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val symbol: IrAnonymousInitializerSymbol + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrAnonymousInitializerSymbol ) : IrDeclarationBase(startOffset, endOffset, origin), IrAnonymousInitializer { constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor) : this(startOffset, endOffset, origin, IrAnonymousInitializerSymbolImpl(descriptor)) constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, - body: IrBlockBody + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, + body: IrBlockBody ) : this(startOffset, endOffset, origin, descriptor) { this.body = body } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt index 7cf4b47297c..bb38bdabeef 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt @@ -17,27 +17,46 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.util.transform import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.SmartList -import kotlin.collections.ArrayList class IrClassImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val symbol: IrClassSymbol -) : IrDeclarationBase(startOffset, endOffset, origin), IrClass { + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrClassSymbol, + override val name: Name, + override val kind: ClassKind, + override val visibility: Visibility, + override val modality: Modality, + override val isCompanion: Boolean, + override val isData: Boolean +) : IrDeclarationBase(startOffset, endOffset, origin), + IrClass { + + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrClassSymbol) : + this( + startOffset, endOffset, origin, symbol, + symbol.descriptor.name, symbol.descriptor.kind, + symbol.descriptor.visibility, symbol.descriptor.modality, + symbol.descriptor.isCompanionObject, symbol.descriptor.isData + ) + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor) : this(startOffset, endOffset, origin, IrClassSymbolImpl(descriptor)) constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, - members: List + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, + members: List ) : this(startOffset, endOffset, origin, descriptor) { addAll(members) } @@ -55,7 +74,7 @@ class IrClassImpl( override val typeParameters: MutableList = SmartList() override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitClass(this, data) + visitor.visitClass(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { thisReceiver?.accept(visitor, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt index 46e588fd758..a115a2acac3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt @@ -17,27 +17,52 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.types.KotlinType class IrConstructorImpl( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrConstructorSymbol, + visibility: Visibility, + returnType: KotlinType, + isInline: Boolean +) : + IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, returnType), + IrConstructor { + + constructor( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - override val symbol: IrConstructorSymbol -) : IrFunctionBase(startOffset, endOffset, origin), IrConstructor { - constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassConstructorDescriptor) : - this(startOffset, endOffset, origin, IrConstructorSymbolImpl(descriptor)) + symbol: IrConstructorSymbol + ) : this( + startOffset, endOffset, origin, symbol, + symbol.descriptor.visibility, + symbol.descriptor.returnType, + symbol.descriptor.isInline + ) constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassConstructorDescriptor, - body: IrBody + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: ClassConstructorDescriptor + ) : this(startOffset, endOffset, origin, IrConstructorSymbolImpl(descriptor)) + + constructor( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: ClassConstructorDescriptor, + body: IrBody ) : this(startOffset, endOffset, origin, descriptor) { this.body = body } @@ -48,7 +73,6 @@ class IrConstructorImpl( override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor - override fun accept(visitor: IrElementVisitor, data: D): R { - return visitor.visitConstructor(this, data) - } + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitConstructor(this, data) } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt index da9439e13bf..245f592ff38 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin abstract class IrDeclarationBase( - startOffset: Int, - endOffset: Int, - override val origin: IrDeclarationOrigin + startOffset: Int, + endOffset: Int, + override val origin: IrDeclarationOrigin ) : IrElementBase(startOffset, endOffset), IrDeclaration \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt index 858b0115b14..8a8f1689afc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrEnumEntryImpl.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrEnumEntry @@ -26,19 +25,26 @@ import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.symbols.impl.IrEnumEntrySymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name class IrEnumEntryImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val symbol: IrEnumEntrySymbol -) : IrDeclarationBase(startOffset, endOffset, origin), IrEnumEntry { + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrEnumEntrySymbol, + override val name: Name +) : IrDeclarationBase(startOffset, endOffset, origin), + IrEnumEntry { + + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrEnumEntrySymbol) : + this(startOffset, endOffset, origin, symbol, symbol.descriptor.name) + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor) : this(startOffset, endOffset, origin, IrEnumEntrySymbolImpl(descriptor)) constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, - correspondingClass: IrClass?, initializerExpression: IrExpression? + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, + correspondingClass: IrClass?, initializerExpression: IrExpression? ) : this(startOffset, endOffset, origin, descriptor) { this.correspondingClass = correspondingClass this.initializerExpression = initializerExpression diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt index fd586a81461..7adb08cb34a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrErrorDeclarationImpl.kt @@ -24,9 +24,9 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor class IrErrorDeclarationImpl( - startOffset: Int, - endOffset: Int, - override val descriptor: DeclarationDescriptor + startOffset: Int, + endOffset: Int, + override val descriptor: DeclarationDescriptor ) : IrDeclarationBase(startOffset, endOffset, IrDeclarationOrigin.DEFINED), IrErrorDeclaration { override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.ERROR diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt index bcc89714726..1d40cda8944 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt @@ -24,10 +24,15 @@ import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.FqName class IrExternalPackageFragmentImpl( - override val symbol: IrExternalPackageFragmentSymbol + override val symbol: IrExternalPackageFragmentSymbol, + override val fqName: FqName ) : IrExternalPackageFragment, IrElementBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { + + constructor(symbol: IrExternalPackageFragmentSymbol) : this(symbol, symbol.descriptor.fqName) + init { symbol.bind(this) } @@ -37,7 +42,7 @@ class IrExternalPackageFragmentImpl( override val declarations: MutableList = ArrayList() override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitExternalPackageFragment(this, data) + visitor.visitExternalPackageFragment(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { declarations.forEach { it.accept(visitor, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt index 177b27be198..002b0b4d4f4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt @@ -17,27 +17,39 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrField -import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType class IrFieldImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val symbol: IrFieldSymbol -): IrDeclarationBase(startOffset, endOffset, origin), IrField { + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrFieldSymbol, + override val name: Name, + override val type: KotlinType, + override val visibility: Visibility +) : IrDeclarationBase(startOffset, endOffset, origin), IrField { + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrFieldSymbol) : + this( + startOffset, endOffset, origin, symbol, + symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.visibility + ) + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor) : this(startOffset, endOffset, origin, IrFieldSymbolImpl(descriptor)) - constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, - initializer: IrExpressionBody? + constructor( + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, + initializer: IrExpressionBody? ) : this(startOffset, endOffset, origin, descriptor) { this.initializer = initializer } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt index d444745cb67..d0669ed52c6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt @@ -26,21 +26,27 @@ import org.jetbrains.kotlin.ir.symbols.IrFileSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.utils.SmartList import java.util.* class IrFileImpl( - override val fileEntry: SourceManager.FileEntry, - override val symbol: IrFileSymbol + override val fileEntry: SourceManager.FileEntry, + override val symbol: IrFileSymbol, + override val fqName: FqName ) : IrElementBase(0, fileEntry.maxOffset), IrFile { - constructor(fileEntry: SourceManager.FileEntry, packageFragmentDescriptor: PackageFragmentDescriptor) - : this(fileEntry, IrFileSymbolImpl(packageFragmentDescriptor)) + + constructor(fileEntry: SourceManager.FileEntry, symbol: IrFileSymbol) : + this(fileEntry, symbol, symbol.descriptor.fqName) + + constructor(fileEntry: SourceManager.FileEntry, packageFragmentDescriptor: PackageFragmentDescriptor) : + this(fileEntry, IrFileSymbolImpl(packageFragmentDescriptor), packageFragmentDescriptor.fqName) constructor( - fileEntry: SourceManager.FileEntry, - packageFragmentDescriptor: PackageFragmentDescriptor, - fileAnnotations: List, - declarations: List + fileEntry: SourceManager.FileEntry, + packageFragmentDescriptor: PackageFragmentDescriptor, + fileAnnotations: List, + declarations: List ) : this(fileEntry, packageFragmentDescriptor) { this.fileAnnotations.addAll(fileAnnotations) this.declarations.addAll(declarations) @@ -57,7 +63,7 @@ class IrFileImpl( override val declarations: MutableList = ArrayList() override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitFile(this, data) + visitor.visitFile(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { declarations.forEach { it.accept(visitor, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt index 27cc3cdabc6..c8e21c05541 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.ir.declarations.impl +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrTypeParameter @@ -24,12 +25,16 @@ import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.util.transform import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.SmartList abstract class IrFunctionBase( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val visibility: Visibility, + override val isInline: Boolean, + override val returnType: KotlinType ) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction { override val typeParameters: MutableList = SmartList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index c1a068ba8cf..bdec6f29737 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -17,30 +17,67 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType class IrFunctionImpl( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrSimpleFunctionSymbol, + override val name: Name, + visibility: Visibility, + override val modality: Modality, + returnType: KotlinType, + isInline: Boolean, + override val isTailrec: Boolean, + override val isSuspend: Boolean +) : + IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, returnType), + IrSimpleFunction { + + constructor( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - override val symbol: IrSimpleFunctionSymbol -) : IrFunctionBase(startOffset, endOffset, origin), IrSimpleFunction { + symbol: IrSimpleFunctionSymbol + ) : this( + startOffset, endOffset, origin, symbol, + symbol.descriptor.name, + symbol.descriptor.visibility, + symbol.descriptor.modality, + symbol.descriptor.returnType!!, + symbol.descriptor.isInline, + symbol.descriptor.isTailrec, + symbol.descriptor.isSuspend + ) + override val descriptor: FunctionDescriptor = symbol.descriptor - constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: FunctionDescriptor) : - this(startOffset, endOffset, origin, IrSimpleFunctionSymbolImpl(descriptor)) + constructor( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: FunctionDescriptor + ) : this( + startOffset, endOffset, origin, + IrSimpleFunctionSymbolImpl(descriptor) + ) constructor( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - descriptor: FunctionDescriptor, - body: IrBody? + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: FunctionDescriptor, + body: IrBody? ) : this(startOffset, endOffset, origin, descriptor) { this.body = body } @@ -50,5 +87,5 @@ class IrFunctionImpl( } override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitSimpleFunction(this, data) + visitor.visitSimpleFunction(this, data) } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt index d4bc714d1f4..0cc2a8662e2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrLocalDelegatedPropertyImpl.kt @@ -23,31 +23,48 @@ import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType class IrLocalDelegatedPropertyImpl( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val descriptor: VariableDescriptorWithAccessors, + override val name: Name, + override val type: KotlinType, + override val isVar: Boolean +) : IrDeclarationBase(startOffset, endOffset, origin), + IrLocalDelegatedProperty { + + constructor( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - override val descriptor: VariableDescriptorWithAccessors -) : IrDeclarationBase(startOffset, endOffset, origin), IrLocalDelegatedProperty { + descriptor: VariableDescriptorWithAccessors + ) : this( + startOffset, endOffset, origin, descriptor, + descriptor.name, descriptor.type, descriptor.isVar + ) + constructor( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - descriptor: VariableDescriptorWithAccessors, - delegate: IrVariable + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: VariableDescriptorWithAccessors, + delegate: IrVariable ) : this(startOffset, endOffset, origin, descriptor) { this.delegate = delegate } constructor( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - descriptor: VariableDescriptorWithAccessors, - delegate: IrVariable, - getter: IrFunction, - setter: IrFunction? + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: VariableDescriptorWithAccessors, + delegate: IrVariable, + getter: IrFunction, + setter: IrFunction? ) : this(startOffset, endOffset, origin, descriptor) { this.delegate = delegate this.getter = getter @@ -59,7 +76,7 @@ class IrLocalDelegatedPropertyImpl( override var setter: IrFunction? = null override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitLocalDelegatedProperty(this, data) + visitor.visitLocalDelegatedProperty(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { delegate.accept(visitor, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt index 676fba68db0..3e3379f4f85 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrModuleFragmentImpl.kt @@ -23,16 +23,19 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import kotlin.collections.ArrayList +import org.jetbrains.kotlin.name.Name class IrModuleFragmentImpl( - override val descriptor: ModuleDescriptor, - override val irBuiltins: IrBuiltIns + override val descriptor: ModuleDescriptor, + override val irBuiltins: IrBuiltIns ) : IrModuleFragment { + constructor(descriptor: ModuleDescriptor, irBuiltins: IrBuiltIns, files: List) : this(descriptor, irBuiltins) { this.files.addAll(files) } + override val name: Name get() = descriptor.name // TODO + override val files: MutableList = ArrayList() override val externalPackageFragments: MutableList = ArrayList() @@ -40,7 +43,7 @@ class IrModuleFragmentImpl( override val dependencyModules: MutableList = ArrayList() override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitModuleFragment(this, data) + visitor.visitModuleFragment(this, data) 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/impl/IrPropertyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt index 967ae4df914..2911e4465a3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt @@ -16,35 +16,61 @@ package org.jetbrains.kotlin.ir.declarations.impl +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.util.transform import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.SmartList class IrPropertyImpl( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val descriptor: PropertyDescriptor, + override val name: Name, + override val type: KotlinType, + override val visibility: Visibility, + override val modality: Modality, + override val isVar: Boolean, + override val isConst: Boolean, + override val isLateinit: Boolean, + override val isDelegated: Boolean +) : IrDeclarationBase(startOffset, endOffset, origin), + IrProperty { + + constructor( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - override val isDelegated: Boolean, - override val descriptor: PropertyDescriptor -) : IrDeclarationBase(startOffset, endOffset, origin), IrProperty { + isDelegated: Boolean, + descriptor: PropertyDescriptor + ) : this( + startOffset, endOffset, origin, descriptor, + descriptor.name, descriptor.type, descriptor.visibility, descriptor.modality, + descriptor.isVar, descriptor.isConst, descriptor.isLateInit, + isDelegated + ) + constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - descriptor: PropertyDescriptor + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, + descriptor: PropertyDescriptor ) : this(startOffset, endOffset, origin, descriptor.isDelegated, descriptor) constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, isDelegated: Boolean, descriptor: PropertyDescriptor, - backingField: IrField? + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, isDelegated: Boolean, descriptor: PropertyDescriptor, + backingField: IrField? ) : this(startOffset, endOffset, origin, isDelegated, descriptor) { this.backingField = backingField } constructor( - startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, isDelegated: Boolean, descriptor: PropertyDescriptor, - backingField: IrField?, getter: IrFunction?, setter: IrFunction? + startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, isDelegated: Boolean, descriptor: PropertyDescriptor, + backingField: IrField?, getter: IrFunction?, setter: IrFunction? ) : this(startOffset, endOffset, origin, isDelegated, descriptor, backingField) { this.getter = getter this.setter = setter diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt index 9eff414834c..15e9e79c082 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt @@ -23,10 +23,10 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor class IrTypeAliasImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val descriptor: TypeAliasDescriptor + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val descriptor: TypeAliasDescriptor ) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeAlias { override fun accept(visitor: IrElementVisitor, data: D): R { return visitor.visitTypeAlias(this, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt index ce08eec8252..b4754e66b45 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt @@ -23,14 +23,29 @@ import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.Variance class IrTypeParameterImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val symbol: IrTypeParameterSymbol + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrTypeParameterSymbol, + override val name: Name, + override val index: Int, + override val variance: Variance, + override val upperBounds: List ) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeParameter { - override val descriptor: TypeParameterDescriptor get() = symbol.descriptor + + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrTypeParameterSymbol) : + this( + startOffset, endOffset, origin, symbol, + symbol.descriptor.name, + symbol.descriptor.index, + symbol.descriptor.variance, + symbol.descriptor.upperBounds.toMutableList() + ) constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: TypeParameterDescriptor) : this(startOffset, endOffset, origin, IrTypeParameterSymbolImpl(descriptor)) @@ -39,11 +54,13 @@ class IrTypeParameterImpl( symbol.bind(this) } + override val descriptor: TypeParameterDescriptor get() = symbol.descriptor + override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitTypeParameter(this, data) + visitor.visitTypeParameter(this, data) override fun transform(transformer: IrElementTransformer, data: D): IrTypeParameter = - transformer.visitTypeParameter(this, data) as IrTypeParameter + transformer.visitTypeParameter(this, data) as IrTypeParameter override fun acceptChildren(visitor: IrElementVisitor, data: D) { // no children diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt index fc1fb17163c..dd99431529b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ParameterDescriptor +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.IrExpressionBody @@ -24,28 +25,50 @@ import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.utils.addToStdlib.safeAs class IrValueParameterImpl( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - override val symbol: IrValueParameterSymbol + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrValueParameterSymbol, + override val name: Name, + override val index: Int, + override val type: KotlinType, + override val varargElementType: KotlinType?, + override val isCrossinline: Boolean, + override val isNoinline: Boolean ) : IrDeclarationBase(startOffset, endOffset, origin), IrValueParameter { - override val descriptor: ParameterDescriptor = symbol.descriptor + + constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrValueParameterSymbol) : + this( + startOffset, endOffset, origin, + symbol, + symbol.descriptor.name, + symbol.descriptor.safeAs()?.index ?: -1, + symbol.descriptor.type, + symbol.descriptor.safeAs()?.varargElementType, + symbol.descriptor.safeAs()?.isCrossinline ?: false, + symbol.descriptor.safeAs()?.isNoinline ?: false + ) constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ParameterDescriptor) : this(startOffset, endOffset, origin, IrValueParameterSymbolImpl(descriptor)) constructor( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - descriptor: ParameterDescriptor, - defaultValue: IrExpressionBody? + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: ParameterDescriptor, + defaultValue: IrExpressionBody? ) : this(startOffset, endOffset, origin, descriptor) { this.defaultValue = defaultValue } + override val descriptor: ParameterDescriptor = symbol.descriptor + init { symbol.bind(this) } @@ -53,10 +76,10 @@ class IrValueParameterImpl( override var defaultValue: IrExpressionBody? = null override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitValueParameter(this, data) + visitor.visitValueParameter(this, data) override fun transform(transformer: IrElementTransformer, data: D): IrValueParameter = - transformer.visitValueParameter(this, data) as IrValueParameter + transformer.visitValueParameter(this, 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/impl/IrVariableImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt index 0789e7d6b9e..152b4be92cf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt @@ -24,22 +24,48 @@ import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.KotlinType class IrVariableImpl( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + override val symbol: IrVariableSymbol, + override val name: Name, + override val type: KotlinType, + override val isVar: Boolean, + override val isConst: Boolean, + override val isLateinit: Boolean +) : IrDeclarationBase(startOffset, endOffset, origin), + IrVariable { + + constructor( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - override val symbol: IrVariableSymbol -) : IrDeclarationBase(startOffset, endOffset, origin), IrVariable { - constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: VariableDescriptor) : - this(startOffset, endOffset, origin, IrVariableSymbolImpl(descriptor)) + symbol: IrVariableSymbol + ) : this( + startOffset, endOffset, origin, symbol, + symbol.descriptor.name, symbol.descriptor.type, + isVar = symbol.descriptor.isVar, + isConst = symbol.descriptor.isConst, + isLateinit = symbol.descriptor.isLateInit + ) constructor( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - descriptor: VariableDescriptor, - initializer: IrExpression? + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: VariableDescriptor + ) : this(startOffset, endOffset, origin, IrVariableSymbolImpl(descriptor)) + + constructor( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + descriptor: VariableDescriptor, + initializer: IrExpression? ) : this(startOffset, endOffset, origin, descriptor) { this.initializer = initializer } @@ -52,9 +78,8 @@ class IrVariableImpl( override var initializer: IrExpression? = null - override fun accept(visitor: IrElementVisitor, data: D): R { - return visitor.visitVariable(this, data) - } + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitVariable(this, data) override fun acceptChildren(visitor: IrElementVisitor, data: D) { initializer?.accept(visitor, data)