Add basic properties to IR declarations

This commit is contained in:
Dmitry Petrov
2018-01-12 13:47:04 +03:00
parent 2f09c51dca
commit 7dc15b15bb
32 changed files with 508 additions and 175 deletions
@@ -17,9 +17,11 @@
package org.jetbrains.kotlin.ir.declarations package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ValueDescriptor import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.name.Name
interface IrClass : IrSymbolDeclaration<IrClassSymbol>, IrDeclarationContainer, IrTypeParametersContainer { interface IrClass : IrSymbolDeclaration<IrClassSymbol>, IrDeclarationContainer, IrTypeParametersContainer {
override val declarationKind: IrDeclarationKind override val declarationKind: IrDeclarationKind
@@ -27,6 +29,13 @@ interface IrClass : IrSymbolDeclaration<IrClassSymbol>, IrDeclarationContainer,
override val descriptor: ClassDescriptor 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? var thisReceiver: IrValueParameter?
} }
@@ -38,6 +38,6 @@ interface IrDeclarationOrigin {
object IR_BUILTINS_STUB : IrDeclarationOriginImpl("IR_BUILTINS_STUB") 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 override fun toString(): String = name
} }
@@ -19,12 +19,15 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
import org.jetbrains.kotlin.name.Name
interface IrEnumEntry : IrSymbolDeclaration<IrEnumEntrySymbol> { interface IrEnumEntry : IrSymbolDeclaration<IrEnumEntrySymbol> {
override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.ENUM_ENTRY override val declarationKind: IrDeclarationKind get() = IrDeclarationKind.ENUM_ENTRY
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
val name: Name
var correspondingClass: IrClass? var correspondingClass: IrClass?
var initializerExpression: IrExpression? var initializerExpression: IrExpression?
} }
@@ -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<IrFieldSymbol> {
override val descriptor: PropertyDescriptor
override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.FIELD
val name: Name
val type: KotlinType
val visibility: Visibility
var initializer: IrExpressionBody?
}
@@ -24,10 +24,13 @@ import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.FqName
interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner { interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
val packageFragmentDescriptor: PackageFragmentDescriptor val packageFragmentDescriptor: PackageFragmentDescriptor
override val symbol: IrPackageFragmentSymbol override val symbol: IrPackageFragmentSymbol
val fqName: FqName
} }
interface IrExternalPackageFragment : IrPackageFragment { interface IrExternalPackageFragment : IrPackageFragment {
@@ -18,14 +18,19 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor 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.IrBody
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol 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 { interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner {
override val descriptor: FunctionDescriptor 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 dispatchReceiverParameter: IrValueParameter?
var extensionReceiverParameter: IrValueParameter? var extensionReceiverParameter: IrValueParameter?
@@ -35,11 +40,6 @@ interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner {
} }
interface IrSimpleFunction : IrFunction, IrSymbolDeclaration<IrSimpleFunctionSymbol> {
override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.FUNCTION
}
fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter = fun IrFunction.getIrValueParameter(parameter: ValueParameterDescriptor): IrValueParameter =
valueParameters.getOrElse(parameter.index) { valueParameters.getOrElse(parameter.index) {
throw AssertionError("No IrValueParameter for $parameter") throw AssertionError("No IrValueParameter for $parameter")
@@ -17,9 +17,16 @@
package org.jetbrains.kotlin.ir.declarations package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
interface IrLocalDelegatedProperty : IrDeclaration { interface IrLocalDelegatedProperty : IrDeclaration {
override val descriptor: VariableDescriptorWithAccessors override val descriptor: VariableDescriptorWithAccessors
val name: Name
val type: KotlinType
val isVar: Boolean
var delegate: IrVariable var delegate: IrVariable
var getter: IrFunction var getter: IrFunction
var setter: IrFunction? var setter: IrFunction?
@@ -21,8 +21,10 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.Name
interface IrModuleFragment : IrElement { interface IrModuleFragment : IrElement {
val name: Name
val descriptor: ModuleDescriptor val descriptor: ModuleDescriptor
val irBuiltins: IrBuiltIns val irBuiltins: IrBuiltIns
val files: MutableList<IrFile> val files: MutableList<IrFile>
@@ -16,14 +16,26 @@
package org.jetbrains.kotlin.ir.declarations package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
interface IrProperty : IrDeclaration { interface IrProperty : IrDeclaration {
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
val typeParameters: MutableList<IrTypeParameter>
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 isDelegated: Boolean
val typeParameters: MutableList<IrTypeParameter>
var backingField: IrField? var backingField: IrField?
var getter: IrFunction? var getter: IrFunction?
var setter: IrFunction? var setter: IrFunction?
@@ -31,12 +43,3 @@ interface IrProperty : IrDeclaration {
override val declarationKind: IrDeclarationKind override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.PROPERTY get() = IrDeclarationKind.PROPERTY
} }
interface IrField : IrSymbolDeclaration<IrFieldSymbol> {
override val descriptor: PropertyDescriptor
override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.FIELD
var initializer: IrExpressionBody?
}
@@ -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<IrSimpleFunctionSymbol> {
val name: Name
val modality: Modality
val isTailrec: Boolean
val isSuspend: Boolean
override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.FUNCTION
}
@@ -19,6 +19,9 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer 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<IrTypeParameterSymbol> { interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol> {
override val declarationKind: IrDeclarationKind override val declarationKind: IrDeclarationKind
@@ -26,5 +29,10 @@ interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol> {
override val descriptor: TypeParameterDescriptor override val descriptor: TypeParameterDescriptor
val name: Name
val variance: Variance
val index: Int
val upperBounds: List<KotlinType>
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrTypeParameter override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrTypeParameter
} }
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
interface IrValueParameter : IrSymbolDeclaration<IrValueParameterSymbol> { interface IrValueParameter : IrSymbolDeclaration<IrValueParameterSymbol> {
override val declarationKind: IrDeclarationKind override val declarationKind: IrDeclarationKind
@@ -27,7 +29,14 @@ interface IrValueParameter : IrSymbolDeclaration<IrValueParameterSymbol> {
override val descriptor: ParameterDescriptor override val descriptor: ParameterDescriptor
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrValueParameter val name: Name
val index: Int
val type: KotlinType
val varargElementType: KotlinType?
val isCrossinline: Boolean
val isNoinline: Boolean
var defaultValue: IrExpressionBody? var defaultValue: IrExpressionBody?
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrValueParameter
} }
@@ -19,10 +19,18 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
interface IrVariable : IrSymbolDeclaration<IrVariableSymbol> { interface IrVariable : IrSymbolDeclaration<IrVariableSymbol> {
override val descriptor: VariableDescriptor override val descriptor: VariableDescriptor
val name: Name
val type: KotlinType
val isVar: Boolean
val isConst: Boolean
val isLateinit: Boolean
override val declarationKind: IrDeclarationKind override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.VARIABLE get() = IrDeclarationKind.VARIABLE
@@ -17,21 +17,40 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ClassDescriptor 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.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
import org.jetbrains.kotlin.ir.util.transform import org.jetbrains.kotlin.ir.util.transform
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
import kotlin.collections.ArrayList
class IrClassImpl( class IrClassImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrClassSymbol override val symbol: IrClassSymbol,
) : IrDeclarationBase(startOffset, endOffset, origin), IrClass { 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) : constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor) :
this(startOffset, endOffset, origin, IrClassSymbolImpl(descriptor)) this(startOffset, endOffset, origin, IrClassSymbolImpl(descriptor))
@@ -17,26 +17,51 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor 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.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin 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.expressions.IrBody
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl 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.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.types.KotlinType
class IrConstructorImpl( class IrConstructorImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrConstructorSymbol override val symbol: IrConstructorSymbol,
) : IrFunctionBase(startOffset, endOffset, origin), IrConstructor { visibility: Visibility,
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassConstructorDescriptor) : returnType: KotlinType,
this(startOffset, endOffset, origin, IrConstructorSymbolImpl(descriptor)) isInline: Boolean
) :
IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, returnType),
IrConstructor {
constructor( constructor(
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassConstructorDescriptor, startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
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
) : this(startOffset, endOffset, origin, IrConstructorSymbolImpl(descriptor))
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: ClassConstructorDescriptor,
body: IrBody body: IrBody
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor) {
this.body = body this.body = body
@@ -48,7 +73,6 @@ class IrConstructorImpl(
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
return visitor.visitConstructor(this, data) visitor.visitConstructor(this, data)
}
} }
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ClassDescriptor 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.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
@@ -26,13 +25,20 @@ import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrEnumEntrySymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrEnumEntrySymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrEnumEntryImpl( class IrEnumEntryImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrEnumEntrySymbol override val symbol: IrEnumEntrySymbol,
) : IrDeclarationBase(startOffset, endOffset, origin), IrEnumEntry { 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) : constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor) :
this(startOffset, endOffset, origin, IrEnumEntrySymbolImpl(descriptor)) this(startOffset, endOffset, origin, IrEnumEntrySymbolImpl(descriptor))
@@ -24,10 +24,15 @@ import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment
import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.FqName
class IrExternalPackageFragmentImpl( class IrExternalPackageFragmentImpl(
override val symbol: IrExternalPackageFragmentSymbol override val symbol: IrExternalPackageFragmentSymbol,
override val fqName: FqName
) : IrExternalPackageFragment, IrElementBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { ) : IrExternalPackageFragment, IrElementBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
constructor(symbol: IrExternalPackageFragmentSymbol) : this(symbol, symbol.descriptor.fqName)
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -17,26 +17,38 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.PropertyDescriptor 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.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrField 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.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
class IrFieldImpl( class IrFieldImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrFieldSymbol override val symbol: IrFieldSymbol,
): IrDeclarationBase(startOffset, endOffset, origin), IrField { 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) : constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor) :
this(startOffset, endOffset, origin, IrFieldSymbolImpl(descriptor)) this(startOffset, endOffset, origin, IrFieldSymbolImpl(descriptor))
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, constructor(
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor,
initializer: IrExpressionBody? initializer: IrExpressionBody?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor) {
this.initializer = initializer this.initializer = initializer
@@ -26,15 +26,21 @@ import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
import java.util.* import java.util.*
class IrFileImpl( class IrFileImpl(
override val fileEntry: SourceManager.FileEntry, override val fileEntry: SourceManager.FileEntry,
override val symbol: IrFileSymbol override val symbol: IrFileSymbol,
override val fqName: FqName
) : IrElementBase(0, fileEntry.maxOffset), IrFile { ) : 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( constructor(
fileEntry: SourceManager.FileEntry, fileEntry: SourceManager.FileEntry,
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.ir.declarations.impl 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.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter 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.util.transform
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
abstract class IrFunctionBase( abstract class IrFunctionBase(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin origin: IrDeclarationOrigin,
override val visibility: Visibility,
override val isInline: Boolean,
override val returnType: KotlinType
) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction { ) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction {
override val typeParameters: MutableList<IrTypeParameter> = SmartList() override val typeParameters: MutableList<IrTypeParameter> = SmartList()
@@ -17,23 +17,60 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.FunctionDescriptor 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.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
class IrFunctionImpl( class IrFunctionImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol override val symbol: IrSimpleFunctionSymbol,
) : IrFunctionBase(startOffset, endOffset, origin), IrSimpleFunction { 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,
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 override val descriptor: FunctionDescriptor = symbol.descriptor
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: FunctionDescriptor) : constructor(
this(startOffset, endOffset, origin, IrSimpleFunctionSymbolImpl(descriptor)) startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: FunctionDescriptor
) : this(
startOffset, endOffset, origin,
IrSimpleFunctionSymbolImpl(descriptor)
)
constructor( constructor(
startOffset: Int, startOffset: Int,
@@ -23,13 +23,30 @@ import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
class IrLocalDelegatedPropertyImpl( class IrLocalDelegatedPropertyImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val descriptor: VariableDescriptorWithAccessors override val descriptor: VariableDescriptorWithAccessors,
) : IrDeclarationBase(startOffset, endOffset, origin), IrLocalDelegatedProperty { override val name: Name,
override val type: KotlinType,
override val isVar: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin),
IrLocalDelegatedProperty {
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: VariableDescriptorWithAccessors
) : this(
startOffset, endOffset, origin, descriptor,
descriptor.name, descriptor.type, descriptor.isVar
)
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
@@ -23,16 +23,19 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import kotlin.collections.ArrayList import org.jetbrains.kotlin.name.Name
class IrModuleFragmentImpl( class IrModuleFragmentImpl(
override val descriptor: ModuleDescriptor, override val descriptor: ModuleDescriptor,
override val irBuiltins: IrBuiltIns override val irBuiltins: IrBuiltIns
) : IrModuleFragment { ) : IrModuleFragment {
constructor(descriptor: ModuleDescriptor, irBuiltins: IrBuiltIns, files: List<IrFile>) : this(descriptor, irBuiltins) { constructor(descriptor: ModuleDescriptor, irBuiltins: IrBuiltIns, files: List<IrFile>) : this(descriptor, irBuiltins) {
this.files.addAll(files) this.files.addAll(files)
} }
override val name: Name get() = descriptor.name // TODO
override val files: MutableList<IrFile> = ArrayList() override val files: MutableList<IrFile> = ArrayList()
override val externalPackageFragments: MutableList<IrExternalPackageFragment> = ArrayList() override val externalPackageFragments: MutableList<IrExternalPackageFragment> = ArrayList()
@@ -16,20 +16,46 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.util.transform import org.jetbrains.kotlin.ir.util.transform
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
class IrPropertyImpl( class IrPropertyImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val isDelegated: Boolean, override val descriptor: PropertyDescriptor,
override val descriptor: PropertyDescriptor override val name: Name,
) : IrDeclarationBase(startOffset, endOffset, origin), IrProperty { 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,
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( constructor(
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor descriptor: PropertyDescriptor
@@ -23,14 +23,29 @@ import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.Variance
class IrTypeParameterImpl( class IrTypeParameterImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrTypeParameterSymbol override val symbol: IrTypeParameterSymbol,
override val name: Name,
override val index: Int,
override val variance: Variance,
override val upperBounds: List<KotlinType>
) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeParameter { ) : 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) : constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: TypeParameterDescriptor) :
this(startOffset, endOffset, origin, IrTypeParameterSymbolImpl(descriptor)) this(startOffset, endOffset, origin, IrTypeParameterSymbolImpl(descriptor))
@@ -39,6 +54,8 @@ class IrTypeParameterImpl(
symbol.bind(this) symbol.bind(this)
} }
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitTypeParameter(this, data) visitor.visitTypeParameter(this, data)
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ParameterDescriptor 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.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
@@ -24,14 +25,34 @@ import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class IrValueParameterImpl( class IrValueParameterImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrValueParameterSymbol 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 { ) : 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<ValueParameterDescriptor>()?.index ?: -1,
symbol.descriptor.type,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.varargElementType,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isCrossinline ?: false,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isNoinline ?: false
)
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ParameterDescriptor) : constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ParameterDescriptor) :
this(startOffset, endOffset, origin, IrValueParameterSymbolImpl(descriptor)) this(startOffset, endOffset, origin, IrValueParameterSymbolImpl(descriptor))
@@ -46,6 +67,8 @@ class IrValueParameterImpl(
this.defaultValue = defaultValue this.defaultValue = defaultValue
} }
override val descriptor: ParameterDescriptor = symbol.descriptor
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -24,15 +24,41 @@ import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
class IrVariableImpl( class IrVariableImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrVariableSymbol override val symbol: IrVariableSymbol,
) : IrDeclarationBase(startOffset, endOffset, origin), IrVariable { override val name: Name,
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: VariableDescriptor) : override val type: KotlinType,
this(startOffset, endOffset, origin, IrVariableSymbolImpl(descriptor)) override val isVar: Boolean,
override val isConst: Boolean,
override val isLateinit: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin),
IrVariable {
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
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
) : this(startOffset, endOffset, origin, IrVariableSymbolImpl(descriptor))
constructor( constructor(
startOffset: Int, startOffset: Int,
@@ -52,9 +78,8 @@ class IrVariableImpl(
override var initializer: IrExpression? = null override var initializer: IrExpression? = null
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
return visitor.visitVariable(this, data) visitor.visitVariable(this, data)
}
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) { override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
initializer?.accept(visitor, data) initializer?.accept(visitor, data)