IR: {IrClass, IrFunction, IrProperty, IrField}.isExternal
This commit is contained in:
@@ -35,6 +35,7 @@ interface IrClass : IrSymbolDeclaration<IrClassSymbol>, IrDeclarationContainer,
|
||||
val modality: Modality
|
||||
val isCompanion: Boolean
|
||||
val isData: Boolean
|
||||
val isExternal: Boolean
|
||||
|
||||
// NB type parameters can't be top-level classifiers in supetypes of a class
|
||||
val superClasses: MutableList<IrClassSymbol>
|
||||
|
||||
@@ -22,5 +22,7 @@ interface IrField : IrSymbolDeclaration<IrFieldSymbol> {
|
||||
val type: KotlinType
|
||||
val visibility: Visibility
|
||||
val isFinal: Boolean
|
||||
val isExternal: Boolean
|
||||
|
||||
var initializer: IrExpressionBody?
|
||||
}
|
||||
@@ -30,6 +30,7 @@ interface IrFunction : IrDeclaration, IrTypeParametersContainer, IrSymbolOwner,
|
||||
|
||||
val visibility: Visibility
|
||||
val isInline: Boolean // NB: there's an inline constructor for Array and each primitive array class
|
||||
val isExternal: Boolean
|
||||
val returnType: KotlinType
|
||||
|
||||
var dispatchReceiverParameter: IrValueParameter?
|
||||
|
||||
@@ -33,6 +33,7 @@ interface IrProperty : IrDeclaration {
|
||||
val isConst: Boolean
|
||||
val isLateinit: Boolean
|
||||
val isDelegated: Boolean
|
||||
val isExternal: Boolean
|
||||
|
||||
val typeParameters: MutableList<IrTypeParameter>
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ 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.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
|
||||
class IrClassImpl(
|
||||
@@ -39,7 +40,8 @@ class IrClassImpl(
|
||||
override val visibility: Visibility,
|
||||
override val modality: Modality,
|
||||
override val isCompanion: Boolean,
|
||||
override val isData: Boolean
|
||||
override val isData: Boolean,
|
||||
override val isExternal: Boolean
|
||||
) : IrDeclarationBase(startOffset, endOffset, origin),
|
||||
IrClass {
|
||||
|
||||
@@ -48,7 +50,8 @@ class IrClassImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name, symbol.descriptor.kind,
|
||||
symbol.descriptor.visibility, symbol.descriptor.modality,
|
||||
symbol.descriptor.isCompanionObject, symbol.descriptor.isData
|
||||
symbol.descriptor.isCompanionObject, symbol.descriptor.isData,
|
||||
symbol.descriptor.isEffectivelyExternal()
|
||||
)
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor) :
|
||||
|
||||
+6
-3
@@ -24,6 +24,7 @@ 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.IrElementVisitor
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class IrConstructorImpl(
|
||||
@@ -33,9 +34,10 @@ class IrConstructorImpl(
|
||||
override val symbol: IrConstructorSymbol,
|
||||
visibility: Visibility,
|
||||
returnType: KotlinType,
|
||||
isInline: Boolean
|
||||
isInline: Boolean,
|
||||
isExternal: Boolean
|
||||
) :
|
||||
IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, returnType),
|
||||
IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, isExternal, returnType),
|
||||
IrConstructor {
|
||||
|
||||
constructor(
|
||||
@@ -48,7 +50,8 @@ class IrConstructorImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.visibility,
|
||||
symbol.descriptor.returnType,
|
||||
symbol.descriptor.isInline
|
||||
symbol.descriptor.isInline,
|
||||
symbol.descriptor.isEffectivelyExternal()
|
||||
) {
|
||||
this.body = body
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ 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.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
|
||||
@@ -38,20 +39,16 @@ class IrFieldImpl(
|
||||
override val name: Name,
|
||||
override val type: KotlinType,
|
||||
override val visibility: Visibility,
|
||||
override val isFinal: Boolean
|
||||
override val isFinal: Boolean,
|
||||
override val isExternal: Boolean
|
||||
) : IrDeclarationBase(startOffset, endOffset, origin), IrField {
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrFieldSymbol, isFinal: Boolean) :
|
||||
this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.visibility,
|
||||
isFinal
|
||||
)
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrFieldSymbol) :
|
||||
this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.modality == Modality.FINAL
|
||||
symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.visibility,
|
||||
symbol.descriptor.modality == Modality.FINAL,
|
||||
symbol.descriptor.isEffectivelyExternal()
|
||||
)
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor) :
|
||||
|
||||
@@ -34,6 +34,7 @@ abstract class IrFunctionBase(
|
||||
origin: IrDeclarationOrigin,
|
||||
override val visibility: Visibility,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val returnType: KotlinType
|
||||
) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction {
|
||||
override val typeParameters: MutableList<IrTypeParameter> = SmartList()
|
||||
|
||||
@@ -39,10 +39,11 @@ class IrFunctionImpl(
|
||||
override val modality: Modality,
|
||||
returnType: KotlinType,
|
||||
isInline: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean
|
||||
) :
|
||||
IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, returnType),
|
||||
IrFunctionBase(startOffset, endOffset, origin, visibility, isInline, isExternal, returnType),
|
||||
IrSimpleFunction {
|
||||
|
||||
constructor(
|
||||
@@ -57,6 +58,7 @@ class IrFunctionImpl(
|
||||
symbol.descriptor.modality,
|
||||
symbol.descriptor.returnType!!,
|
||||
symbol.descriptor.isInline,
|
||||
symbol.descriptor.isExternal,
|
||||
symbol.descriptor.isTailrec,
|
||||
symbol.descriptor.isSuspend
|
||||
)
|
||||
|
||||
+24
-7
@@ -24,6 +24,7 @@ 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.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
|
||||
@@ -39,7 +40,8 @@ class IrPropertyImpl(
|
||||
override val isVar: Boolean,
|
||||
override val isConst: Boolean,
|
||||
override val isLateinit: Boolean,
|
||||
override val isDelegated: Boolean
|
||||
override val isDelegated: Boolean,
|
||||
override val isExternal: Boolean
|
||||
) : IrDeclarationBase(startOffset, endOffset, origin),
|
||||
IrProperty {
|
||||
|
||||
@@ -52,25 +54,40 @@ class IrPropertyImpl(
|
||||
) : this(
|
||||
startOffset, endOffset, origin, descriptor,
|
||||
descriptor.name, descriptor.type, descriptor.visibility, descriptor.modality,
|
||||
descriptor.isVar, descriptor.isConst, descriptor.isLateInit,
|
||||
isDelegated
|
||||
isVar = descriptor.isVar,
|
||||
isConst = descriptor.isConst,
|
||||
isLateinit = descriptor.isLateInit,
|
||||
isDelegated = isDelegated,
|
||||
isExternal = descriptor.isEffectivelyExternal()
|
||||
)
|
||||
|
||||
constructor(
|
||||
startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin,
|
||||
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,
|
||||
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
|
||||
|
||||
@@ -60,12 +60,16 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
"flags:${renderSimpleFunctionFlags()}"
|
||||
}
|
||||
|
||||
private fun renderFlagsList(vararg flags: String?) =
|
||||
flags.filterNotNull().joinToString(separator = ",")
|
||||
|
||||
private fun IrSimpleFunction.renderSimpleFunctionFlags(): String =
|
||||
listOfNotNull(
|
||||
renderFlagsList(
|
||||
"tailrec".takeIf { isTailrec },
|
||||
"inline".takeIf { isInline },
|
||||
"external".takeIf { isExternal },
|
||||
"suspend".takeIf { isSuspend }
|
||||
).joinToString(separator = ",")
|
||||
)
|
||||
|
||||
private fun IrFunction.renderTypeParameters(): String =
|
||||
typeParameters.joinToString(separator = ", ", prefix = "<", postfix = ">") { it.name.toString() }
|
||||
@@ -84,9 +88,15 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
renderTypeParameters() + " " +
|
||||
renderValueParameterTypes() + " " +
|
||||
"returnType:${returnType.render()} " +
|
||||
"flags:${if (isInline) "inline" else ""}"
|
||||
"flags:${renderConstructorFlags()}"
|
||||
}
|
||||
|
||||
private fun IrConstructor.renderConstructorFlags() =
|
||||
renderFlagsList(
|
||||
"inline".takeIf { isInline },
|
||||
"external".takeIf { isExternal }
|
||||
)
|
||||
|
||||
override fun visitProperty(declaration: IrProperty, data: Nothing?): String =
|
||||
declaration.run {
|
||||
"PROPERTY ${renderOriginIfNonTrivial()}" +
|
||||
@@ -95,12 +105,13 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
}
|
||||
|
||||
private fun IrProperty.renderPropertyFlags() =
|
||||
listOfNotNull(
|
||||
renderFlagsList(
|
||||
"external".takeIf { isExternal },
|
||||
"const".takeIf { isConst },
|
||||
"lateinit".takeIf { isLateinit },
|
||||
"delegated".takeIf { isDelegated },
|
||||
if (isVar) "var" else "val"
|
||||
).joinToString(separator = "m")
|
||||
)
|
||||
|
||||
override fun visitField(declaration: IrField, data: Nothing?): String =
|
||||
"FIELD ${declaration.renderOriginIfNonTrivial()}" +
|
||||
@@ -108,7 +119,10 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
"flags:${declaration.renderFieldFlags()}"
|
||||
|
||||
private fun IrField.renderFieldFlags() =
|
||||
if (isFinal) "final" else ""
|
||||
renderFlagsList(
|
||||
"final".takeIf { isFinal },
|
||||
"external".takeIf { isExternal }
|
||||
)
|
||||
|
||||
override fun visitClass(declaration: IrClass, data: Nothing?): String =
|
||||
declaration.run {
|
||||
@@ -118,7 +132,11 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
}
|
||||
|
||||
private fun IrClass.renderClassFlags() =
|
||||
listOfNotNull("companion".takeIf { isCompanion }, "data".takeIf { isData }).joinToString(separator = ",")
|
||||
renderFlagsList(
|
||||
"companion".takeIf { isCompanion },
|
||||
"data".takeIf { isData },
|
||||
"external".takeIf { isExternal }
|
||||
)
|
||||
|
||||
override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?): String =
|
||||
"TYPEALIAS ${declaration.renderOriginIfNonTrivial()}${declaration.descriptor.ref()} type=${declaration.descriptor.underlyingType.render()}"
|
||||
@@ -128,11 +146,11 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
"name:${declaration.name} type:${declaration.type.render()} flags:${declaration.renderVariableFlags()}"
|
||||
|
||||
private fun IrVariable.renderVariableFlags(): String =
|
||||
listOfNotNull(
|
||||
renderFlagsList(
|
||||
"const".takeIf { isConst },
|
||||
"lateinit".takeIf { isLateinit },
|
||||
if (isVar) "var" else "val"
|
||||
).joinToString(separator = " ")
|
||||
)
|
||||
|
||||
override fun visitEnumEntry(declaration: IrEnumEntry, data: Nothing?): String =
|
||||
"ENUM_ENTRY ${declaration.renderOriginIfNonTrivial()}name:${declaration.name}"
|
||||
@@ -158,11 +176,11 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
}
|
||||
|
||||
private fun IrValueParameter.renderValueParameterFlags(): String =
|
||||
listOfNotNull(
|
||||
renderFlagsList(
|
||||
"vararg".takeIf { varargElementType != null },
|
||||
"crossinline".takeIf { isCrossinline },
|
||||
"noinline".takeIf { isNoinline }
|
||||
).joinToString(separator = ",")
|
||||
)
|
||||
|
||||
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: Nothing?): String =
|
||||
declaration.run {
|
||||
|
||||
Reference in New Issue
Block a user