IR declarations: KotlinType -> IrType

This commit is contained in:
Dmitry Petrov
2018-04-26 12:35:08 +03:00
parent 4992ca9179
commit 4bd2504367
18 changed files with 180 additions and 94 deletions
@@ -36,6 +36,7 @@ interface IrClass : IrSymbolDeclaration<IrClassSymbol>, IrDeclarationContainer,
val isExternal: Boolean val isExternal: Boolean
// NB type parameters can't be top-level classifiers in supetypes of a class // NB type parameters can't be top-level classifiers in supetypes of a class
// TODO val superTypes: MutableList<IrType>
val superClasses: MutableList<IrClassSymbol> val superClasses: MutableList<IrClassSymbol>
var thisReceiver: IrValueParameter? var thisReceiver: IrValueParameter?
@@ -9,14 +9,14 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
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.types.IrType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
interface IrField : IrSymbolDeclaration<IrFieldSymbol> { interface IrField : IrSymbolDeclaration<IrFieldSymbol> {
override val descriptor: PropertyDescriptor override val descriptor: PropertyDescriptor
val name: Name val name: Name
val type: KotlinType val type: IrType
val visibility: Visibility val visibility: Visibility
val isFinal: Boolean val isFinal: Boolean
val isExternal: Boolean val isExternal: Boolean
@@ -23,7 +23,7 @@ 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.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.ir.types.IrType
interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget { interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget {
override val descriptor: FunctionDescriptor override val descriptor: FunctionDescriptor
@@ -33,7 +33,7 @@ interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner,
val visibility: Visibility val visibility: Visibility
val isInline: Boolean // NB: there's an inline constructor for Array and each primitive array class val isInline: Boolean // NB: there's an inline constructor for Array and each primitive array class
val isExternal: Boolean val isExternal: Boolean
val returnType: KotlinType val returnType: IrType
var dispatchReceiverParameter: IrValueParameter? var dispatchReceiverParameter: IrValueParameter?
var extensionReceiverParameter: IrValueParameter? var extensionReceiverParameter: IrValueParameter?
@@ -17,14 +17,14 @@
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.ir.types.IrType
import org.jetbrains.kotlin.name.Name 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 name: Name
val type: KotlinType val type: IrType
val isVar: Boolean val isVar: Boolean
var delegate: IrVariable var delegate: IrVariable
@@ -19,14 +19,14 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.Modality 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.descriptors.Visibility
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.name.Name 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 name: Name val name: Name
val type: KotlinType val type: IrType
val modality: Modality val modality: Modality
val visibility: Visibility val visibility: Visibility
val isVar: Boolean val isVar: Boolean
@@ -19,9 +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.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol> { interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol> {
@@ -30,7 +30,7 @@ interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol> {
val name: Name val name: Name
val variance: Variance val variance: Variance
val index: Int val index: Int
val upperBounds: List<KotlinType> val upperBounds: List<IrType>
val superClassifiers: MutableList<IrClassifierSymbol> val superClassifiers: MutableList<IrClassifierSymbol>
@@ -19,14 +19,14 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ParameterDescriptor 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.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.types.KotlinType
interface IrValueParameter : IrValueDeclaration, IrSymbolDeclaration<IrValueParameterSymbol> { interface IrValueParameter : IrValueDeclaration, IrSymbolDeclaration<IrValueParameterSymbol> {
override val descriptor: ParameterDescriptor override val descriptor: ParameterDescriptor
val index: Int val index: Int
val varargElementType: KotlinType? val varargElementType: IrType?
val isCrossinline: Boolean val isCrossinline: Boolean
val isNoinline: Boolean val isNoinline: Boolean
@@ -23,10 +23,10 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
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.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.types.KotlinType
class IrConstructorImpl( class IrConstructorImpl(
startOffset: Int, startOffset: Int,
@@ -35,7 +35,7 @@ class IrConstructorImpl(
override val symbol: IrConstructorSymbol, override val symbol: IrConstructorSymbol,
name: Name, name: Name,
visibility: Visibility, visibility: Visibility,
returnType: KotlinType, returnType: IrType,
isInline: Boolean, isInline: Boolean,
isExternal: Boolean, isExternal: Boolean,
override val isPrimary: Boolean override val isPrimary: Boolean
@@ -51,12 +51,13 @@ class IrConstructorImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrConstructorSymbol, symbol: IrConstructorSymbol,
returnType: IrType,
body: IrBody? = null body: IrBody? = null
) : this( ) : this(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
symbol.descriptor.name, symbol.descriptor.name,
symbol.descriptor.visibility, symbol.descriptor.visibility,
symbol.descriptor.returnType, returnType,
symbol.descriptor.isInline, symbol.descriptor.isInline,
symbol.descriptor.isEffectivelyExternal(), symbol.descriptor.isEffectivelyExternal(),
symbol.descriptor.isPrimary symbol.descriptor.isPrimary
@@ -68,8 +69,9 @@ class IrConstructorImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: ClassConstructorDescriptor descriptor: ClassConstructorDescriptor,
) : this(startOffset, endOffset, origin, IrConstructorSymbolImpl(descriptor)) returnType: IrType
) : this(startOffset, endOffset, origin, IrConstructorSymbolImpl(descriptor), returnType)
@Deprecated("Let use constructor which takes symbol instead of descriptor") @Deprecated("Let use constructor which takes symbol instead of descriptor")
constructor( constructor(
@@ -77,8 +79,9 @@ class IrConstructorImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: ClassConstructorDescriptor, descriptor: ClassConstructorDescriptor,
returnType: IrType,
body: IrBody? body: IrBody?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, returnType) {
this.body = body this.body = body
} }
@@ -23,11 +23,11 @@ import org.jetbrains.kotlin.ir.declarations.IrField
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.types.IrType
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.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.types.KotlinType
class IrFieldImpl( class IrFieldImpl(
@@ -36,34 +36,44 @@ class IrFieldImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrFieldSymbol, override val symbol: IrFieldSymbol,
override val name: Name, override val name: Name,
override val type: KotlinType, override val type: IrType,
override val visibility: Visibility, override val visibility: Visibility,
override val isFinal: Boolean, override val isFinal: Boolean,
override val isExternal: Boolean override val isExternal: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin), IrField { ) : IrDeclarationBase(startOffset, endOffset, origin),
IrField {
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrFieldSymbol, symbol: IrFieldSymbol,
initializer: IrExpressionBody? = null type: IrType
) : this( ) :
startOffset, endOffset, origin, symbol, this(
symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.visibility, startOffset, endOffset, origin, symbol,
!symbol.descriptor.isVar, symbol.descriptor.name, type, symbol.descriptor.visibility,
symbol.descriptor.isEffectivelyExternal() !symbol.descriptor.isVar,
) { symbol.descriptor.isEffectivelyExternal()
this.initializer = initializer )
}
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor) :
this(startOffset, endOffset, origin, IrFieldSymbolImpl(descriptor))
constructor( constructor(
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor,
type: IrType
) :
this(startOffset, endOffset, origin, IrFieldSymbolImpl(descriptor), type)
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor,
type: IrType,
initializer: IrExpressionBody? initializer: IrExpressionBody?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, type) {
this.initializer = initializer this.initializer = initializer
} }
@@ -34,7 +34,9 @@ class IrFileImpl(
override val fileEntry: SourceManager.FileEntry, override val fileEntry: SourceManager.FileEntry,
override val symbol: IrFileSymbol, override val symbol: IrFileSymbol,
override val fqName: FqName override val fqName: FqName
) : IrElementBase(0, fileEntry.maxOffset), IrFile { ) :
IrElementBase(0, fileEntry.maxOffset),
IrFile {
constructor(fileEntry: SourceManager.FileEntry, symbol: IrFileSymbol) : constructor(fileEntry: SourceManager.FileEntry, symbol: IrFileSymbol) :
this(fileEntry, symbol, symbol.descriptor.fqName) this(fileEntry, symbol, symbol.descriptor.fqName)
@@ -22,11 +22,11 @@ import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.declarations.IrValueParameter 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.types.IrType
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.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
abstract class IrFunctionBase( abstract class IrFunctionBase(
@@ -37,8 +37,10 @@ abstract class IrFunctionBase(
override val visibility: Visibility, override val visibility: Visibility,
override val isInline: Boolean, override val isInline: Boolean,
override val isExternal: Boolean, override val isExternal: Boolean,
override val returnType: KotlinType override val returnType: IrType
) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction { ) : IrDeclarationBase(startOffset, endOffset, origin),
IrFunction {
override val typeParameters: MutableList<IrTypeParameter> = SmartList() override val typeParameters: MutableList<IrTypeParameter> = SmartList()
override var dispatchReceiverParameter: IrValueParameter? = null override var dispatchReceiverParameter: IrValueParameter? = null
@@ -25,9 +25,9 @@ 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.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name 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 IrFunctionImpl( class IrFunctionImpl(
@@ -35,18 +35,36 @@ class IrFunctionImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrSimpleFunctionSymbol, override val symbol: IrSimpleFunctionSymbol,
name: Name = symbol.descriptor.name, name: Name,
visibility: Visibility = symbol.descriptor.visibility, visibility: Visibility,
override val modality: Modality = symbol.descriptor.modality, override val modality: Modality,
returnType: KotlinType = symbol.descriptor.returnType!!, returnType: IrType,
isInline: Boolean = symbol.descriptor.isInline, isInline: Boolean,
isExternal: Boolean = symbol.descriptor.isExternal, isExternal: Boolean,
override val isTailrec: Boolean = symbol.descriptor.isTailrec, override val isTailrec: Boolean,
override val isSuspend: Boolean = symbol.descriptor.isSuspend override val isSuspend: Boolean
) : ) :
IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, returnType), IrFunctionBase(startOffset, endOffset, origin, name, visibility, isInline, isExternal, returnType),
IrSimpleFunction { IrSimpleFunction {
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrSimpleFunctionSymbol,
returnType: IrType
) : this(
startOffset, endOffset, origin, symbol,
symbol.descriptor.name,
symbol.descriptor.visibility,
symbol.descriptor.modality,
returnType,
symbol.descriptor.isInline,
symbol.descriptor.isExternal,
symbol.descriptor.isTailrec,
symbol.descriptor.isSuspend
)
override val descriptor: FunctionDescriptor = symbol.descriptor override val descriptor: FunctionDescriptor = symbol.descriptor
override val overriddenSymbols: MutableList<IrSimpleFunctionSymbol> = SmartList() override val overriddenSymbols: MutableList<IrSimpleFunctionSymbol> = SmartList()
@@ -57,10 +75,12 @@ class IrFunctionImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: FunctionDescriptor descriptor: FunctionDescriptor,
returnType: IrType
) : this( ) : this(
startOffset, endOffset, origin, startOffset, endOffset, origin,
IrSimpleFunctionSymbolImpl(descriptor) IrSimpleFunctionSymbolImpl(descriptor),
returnType
) )
constructor( constructor(
@@ -68,8 +88,9 @@ class IrFunctionImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: FunctionDescriptor, descriptor: FunctionDescriptor,
returnType: IrType,
body: IrBody? body: IrBody?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, returnType) {
this.body = body this.body = body
} }
@@ -21,10 +21,10 @@ 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.IrLocalDelegatedProperty 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.types.IrType
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.name.Name
import org.jetbrains.kotlin.types.KotlinType
class IrLocalDelegatedPropertyImpl( class IrLocalDelegatedPropertyImpl(
startOffset: Int, startOffset: Int,
@@ -32,19 +32,21 @@ class IrLocalDelegatedPropertyImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val descriptor: VariableDescriptorWithAccessors, override val descriptor: VariableDescriptorWithAccessors,
override val name: Name, override val name: Name,
override val type: KotlinType, override val type: IrType,
override val isVar: Boolean override val isVar: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin), ) :
IrDeclarationBase(startOffset, endOffset, origin),
IrLocalDelegatedProperty { IrLocalDelegatedProperty {
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: VariableDescriptorWithAccessors descriptor: VariableDescriptorWithAccessors,
type: IrType
) : this( ) : this(
startOffset, endOffset, origin, descriptor, startOffset, endOffset, origin, descriptor,
descriptor.name, descriptor.type, descriptor.isVar descriptor.name, type, descriptor.isVar
) )
constructor( constructor(
@@ -52,8 +54,9 @@ class IrLocalDelegatedPropertyImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: VariableDescriptorWithAccessors, descriptor: VariableDescriptorWithAccessors,
type: IrType,
delegate: IrVariable delegate: IrVariable
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, type) {
this.delegate = delegate this.delegate = delegate
} }
@@ -62,10 +65,11 @@ class IrLocalDelegatedPropertyImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: VariableDescriptorWithAccessors, descriptor: VariableDescriptorWithAccessors,
type: IrType,
delegate: IrVariable, delegate: IrVariable,
getter: IrFunction, getter: IrFunction,
setter: IrFunction? setter: IrFunction?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, type) {
this.delegate = delegate this.delegate = delegate
this.getter = getter this.getter = getter
this.setter = setter this.setter = setter
@@ -20,12 +20,12 @@ 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.descriptors.Visibility
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.types.IrType
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.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
class IrPropertyImpl( class IrPropertyImpl(
@@ -34,7 +34,7 @@ class IrPropertyImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val descriptor: PropertyDescriptor, override val descriptor: PropertyDescriptor,
override val name: Name, override val name: Name,
override val type: KotlinType, override val type: IrType,
override val visibility: Visibility, override val visibility: Visibility,
override val modality: Modality, override val modality: Modality,
override val isVar: Boolean, override val isVar: Boolean,
@@ -50,10 +50,11 @@ class IrPropertyImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
isDelegated: Boolean, isDelegated: Boolean,
descriptor: PropertyDescriptor descriptor: PropertyDescriptor,
type: IrType
) : this( ) : this(
startOffset, endOffset, origin, descriptor, startOffset, endOffset, origin, descriptor,
descriptor.name, descriptor.type, descriptor.visibility, descriptor.modality, descriptor.name, type, descriptor.visibility, descriptor.modality,
isVar = descriptor.isVar, isVar = descriptor.isVar,
isConst = descriptor.isConst, isConst = descriptor.isConst,
isLateinit = descriptor.isLateInit, isLateinit = descriptor.isLateInit,
@@ -65,8 +66,9 @@ class IrPropertyImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: PropertyDescriptor descriptor: PropertyDescriptor,
) : this(startOffset, endOffset, origin, descriptor.isDelegated, descriptor) type: IrType
) : this(startOffset, endOffset, origin, descriptor.isDelegated, descriptor, type)
constructor( constructor(
startOffset: Int, startOffset: Int,
@@ -74,8 +76,9 @@ class IrPropertyImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
isDelegated: Boolean, isDelegated: Boolean,
descriptor: PropertyDescriptor, descriptor: PropertyDescriptor,
type: IrType,
backingField: IrField? backingField: IrField?
) : this(startOffset, endOffset, origin, isDelegated, descriptor) { ) : this(startOffset, endOffset, origin, isDelegated, descriptor, type) {
this.backingField = backingField this.backingField = backingField
} }
@@ -85,10 +88,11 @@ class IrPropertyImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
isDelegated: Boolean, isDelegated: Boolean,
descriptor: PropertyDescriptor, descriptor: PropertyDescriptor,
type: IrType,
backingField: IrField?, backingField: IrField?,
getter: IrSimpleFunction?, getter: IrSimpleFunction?,
setter: IrSimpleFunction? setter: IrSimpleFunction?
) : this(startOffset, endOffset, origin, isDelegated, descriptor, backingField) { ) : this(startOffset, endOffset, origin, isDelegated, descriptor, type, backingField) {
this.getter = getter this.getter = getter
this.setter = setter this.setter = setter
} }
@@ -27,7 +27,10 @@ class IrTypeAliasImpl(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val descriptor: TypeAliasDescriptor override val descriptor: TypeAliasDescriptor
) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeAlias { ) :
IrDeclarationBase(startOffset, endOffset, origin),
IrTypeAlias {
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.visitTypeAlias(this, data) return visitor.visitTypeAlias(this, data)
} }
@@ -22,10 +22,10 @@ import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol 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.types.IrType
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.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
@@ -37,20 +37,34 @@ class IrTypeParameterImpl(
override val name: Name, override val name: Name,
override val index: Int, override val index: Int,
override val variance: Variance, override val variance: Variance,
override val upperBounds: List<KotlinType> override val upperBounds: List<IrType>
) : IrDeclarationBase(startOffset, endOffset, origin), IrTypeParameter { ) :
IrDeclarationBase(startOffset, endOffset, origin),
IrTypeParameter {
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrTypeParameterSymbol) : constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrTypeParameterSymbol,
upperBounds: List<IrType>
) :
this( this(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
symbol.descriptor.name, symbol.descriptor.name,
symbol.descriptor.index, symbol.descriptor.index,
symbol.descriptor.variance, symbol.descriptor.variance,
symbol.descriptor.upperBounds.toMutableList() upperBounds
) )
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: TypeParameterDescriptor) : constructor(
this(startOffset, endOffset, origin, IrTypeParameterSymbolImpl(descriptor)) startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: TypeParameterDescriptor,
upperBounds: List<IrType>
) :
this(startOffset, endOffset, origin, IrTypeParameterSymbolImpl(descriptor), upperBounds)
init { init {
symbol.bind(this) symbol.bind(this)
@@ -58,7 +72,7 @@ class IrTypeParameterImpl(
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
override val superClassifiers: MutableList<IrClassifierSymbol> = SmartList<IrClassifierSymbol>() override val superClassifiers: MutableList<IrClassifierSymbol> = SmartList()
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)
@@ -23,10 +23,10 @@ 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.IrValueParameterSymbol 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.types.IrType
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.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class IrValueParameterImpl( class IrValueParameterImpl(
@@ -36,34 +36,52 @@ class IrValueParameterImpl(
override val symbol: IrValueParameterSymbol, override val symbol: IrValueParameterSymbol,
override val name: Name, override val name: Name,
override val index: Int, override val index: Int,
override val type: KotlinType, override val type: IrType,
override val varargElementType: KotlinType?, override val varargElementType: IrType?,
override val isCrossinline: Boolean, override val isCrossinline: Boolean,
override val isNoinline: Boolean override val isNoinline: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin), IrValueParameter { ) :
IrDeclarationBase(startOffset, endOffset, origin),
IrValueParameter {
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrValueParameterSymbol) : constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
type: IrType,
varargElementType: IrType?
) :
this( this(
startOffset, endOffset, origin, startOffset, endOffset, origin,
symbol, symbol,
symbol.descriptor.name, symbol.descriptor.name,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.index ?: -1, symbol.descriptor.safeAs<ValueParameterDescriptor>()?.index ?: -1,
symbol.descriptor.type, type,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.varargElementType, varargElementType,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isCrossinline ?: false, symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isCrossinline ?: false,
symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isNoinline ?: false symbol.descriptor.safeAs<ValueParameterDescriptor>()?.isNoinline ?: false
) )
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ParameterDescriptor) :
this(startOffset, endOffset, origin, IrValueParameterSymbolImpl(descriptor))
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: ParameterDescriptor, descriptor: ParameterDescriptor,
type: IrType,
varargElementType: IrType?
) :
this(startOffset, endOffset, origin, IrValueParameterSymbolImpl(descriptor), type, varargElementType)
constructor(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
descriptor: ParameterDescriptor,
type: IrType,
varargElementType: IrType?,
defaultValue: IrExpressionBody? defaultValue: IrExpressionBody?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, type, varargElementType) {
this.defaultValue = defaultValue this.defaultValue = defaultValue
} }
@@ -22,10 +22,10 @@ import org.jetbrains.kotlin.ir.declarations.IrVariable
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.ir.symbols.impl.IrVariableSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
import org.jetbrains.kotlin.ir.types.IrType
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.name.Name
import org.jetbrains.kotlin.types.KotlinType
class IrVariableImpl( class IrVariableImpl(
startOffset: Int, startOffset: Int,
@@ -33,21 +33,23 @@ class IrVariableImpl(
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrVariableSymbol, override val symbol: IrVariableSymbol,
override val name: Name, override val name: Name,
override val type: KotlinType, override val type: IrType,
override val isVar: Boolean, override val isVar: Boolean,
override val isConst: Boolean, override val isConst: Boolean,
override val isLateinit: Boolean override val isLateinit: Boolean
) : IrDeclarationBase(startOffset, endOffset, origin), ) :
IrDeclarationBase(startOffset, endOffset, origin),
IrVariable { IrVariable {
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
symbol: IrVariableSymbol symbol: IrVariableSymbol,
type: IrType
) : this( ) : this(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.name, type,
isVar = symbol.descriptor.isVar, isVar = symbol.descriptor.isVar,
isConst = symbol.descriptor.isConst, isConst = symbol.descriptor.isConst,
isLateinit = symbol.descriptor.isLateInit isLateinit = symbol.descriptor.isLateInit
@@ -57,16 +59,18 @@ class IrVariableImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: VariableDescriptor descriptor: VariableDescriptor,
) : this(startOffset, endOffset, origin, IrVariableSymbolImpl(descriptor)) type: IrType
) : this(startOffset, endOffset, origin, IrVariableSymbolImpl(descriptor), type)
constructor( constructor(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
descriptor: VariableDescriptor, descriptor: VariableDescriptor,
type: IrType,
initializer: IrExpression? initializer: IrExpression?
) : this(startOffset, endOffset, origin, descriptor) { ) : this(startOffset, endOffset, origin, descriptor, type) {
this.initializer = initializer this.initializer = initializer
} }