[IR] Make isExternal mutable and accessible via common interface
JS IR: Mark all effectively external declarations as external to access it directly instead of computing it every time
This commit is contained in:
@@ -53,8 +53,9 @@ abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
|
||||
override val isInline: Boolean
|
||||
get() = fir.isInline
|
||||
|
||||
override val isExternal: Boolean
|
||||
get() = fir.isExternal
|
||||
override var isExternal: Boolean by lazyVar {
|
||||
fir.isExternal
|
||||
}
|
||||
|
||||
override val isExpect: Boolean
|
||||
get() = fir.isExpect
|
||||
|
||||
@@ -84,8 +84,11 @@ class Fir2IrLazyClass(
|
||||
override val isData: Boolean
|
||||
get() = fir.isData
|
||||
|
||||
override val isExternal: Boolean
|
||||
override var isExternal: Boolean
|
||||
get() = fir.isExternal
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
|
||||
override val isInline: Boolean
|
||||
get() = fir.isInline
|
||||
|
||||
@@ -50,8 +50,11 @@ class Fir2IrLazyConstructor(
|
||||
override val isInline: Boolean
|
||||
get() = fir.isInline
|
||||
|
||||
override val isExternal: Boolean
|
||||
override var isExternal: Boolean
|
||||
get() = fir.isExternal
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
|
||||
override val isExpect: Boolean
|
||||
get() = fir.isExpect
|
||||
|
||||
@@ -63,8 +63,11 @@ class Fir2IrLazyProperty(
|
||||
override val isDelegated: Boolean
|
||||
get() = fir.delegate != null
|
||||
|
||||
override val isExternal: Boolean
|
||||
override var isExternal: Boolean
|
||||
get() = fir.isExternal
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
|
||||
override val isExpect: Boolean
|
||||
get() = fir.isExpect
|
||||
|
||||
+29
@@ -48,6 +48,7 @@ private fun isBuiltInClass(declaration: IrDeclaration): Boolean =
|
||||
fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, moduleFragment: IrModuleFragment) {
|
||||
MoveBodilessDeclarationsToSeparatePlaceLowering(context).let { moveBodiless ->
|
||||
moduleFragment.files.forEach {
|
||||
markExternalDeclarations(it)
|
||||
moveBodiless.lower(it)
|
||||
}
|
||||
}
|
||||
@@ -112,3 +113,31 @@ class MoveBodilessDeclarationsToSeparatePlaceLowering(private val context: JsIrB
|
||||
}, null)
|
||||
}
|
||||
}
|
||||
|
||||
fun markExternalDeclarations(packageFragment: IrPackageFragment) {
|
||||
for (declaration in packageFragment.declarations) {
|
||||
if (declaration is IrPossiblyExternalDeclaration) {
|
||||
if (declaration.isExternal) {
|
||||
markNestedExternalDeclarations(declaration)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun markNestedExternalDeclarations(declaration: IrDeclaration) {
|
||||
if (declaration is IrPossiblyExternalDeclaration) {
|
||||
declaration.isExternal = true
|
||||
}
|
||||
if (declaration is IrProperty) {
|
||||
declaration.getter?.isExternal = true
|
||||
declaration.setter?.isExternal = true
|
||||
declaration.backingField?.isExternal = true
|
||||
}
|
||||
if (declaration is IrClass) {
|
||||
declaration.declarations.forEach {
|
||||
markNestedExternalDeclarations(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ class IrClassImpl(
|
||||
override val isCompanion: Boolean = false,
|
||||
override val isInner: Boolean = false,
|
||||
override val isData: Boolean = false,
|
||||
override val isExternal: Boolean = false,
|
||||
override var isExternal: Boolean = false,
|
||||
override val isInline: Boolean = false,
|
||||
override val isExpect: Boolean = false,
|
||||
override val isFun: Boolean = false,
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ class IrConstructorImpl(
|
||||
override var visibility: DescriptorVisibility,
|
||||
returnType: IrType,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isPrimary: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val containerSource: DeserializedContainerSource? = null,
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ class IrFieldImpl(
|
||||
override var type: IrType,
|
||||
override var visibility: DescriptorVisibility,
|
||||
override val isFinal: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isStatic: Boolean,
|
||||
) : IrField() {
|
||||
init {
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ abstract class IrFunctionCommonImpl(
|
||||
override var visibility: DescriptorVisibility,
|
||||
returnType: IrType,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean,
|
||||
override val isOperator: Boolean,
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ abstract class IrPropertyCommonImpl(
|
||||
override val isConst: Boolean,
|
||||
override val isLateinit: Boolean,
|
||||
override val isDelegated: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val containerSource: DeserializedContainerSource?,
|
||||
) : IrProperty() {
|
||||
|
||||
+11
-1
@@ -39,7 +39,7 @@ internal class PersistentIrClass(
|
||||
override val isCompanion: Boolean = false,
|
||||
override val isInner: Boolean = false,
|
||||
override val isData: Boolean = false,
|
||||
override val isExternal: Boolean = false,
|
||||
isExternal: Boolean = false,
|
||||
override val isInline: Boolean = false,
|
||||
override val isExpect: Boolean = false,
|
||||
override val isFun: Boolean = false,
|
||||
@@ -142,6 +142,16 @@ internal class PersistentIrClass(
|
||||
}
|
||||
}
|
||||
|
||||
override var isExternalField: Boolean = isExternal
|
||||
|
||||
override var isExternal: Boolean
|
||||
get() = getCarrier().isExternalField
|
||||
set(v) {
|
||||
if (isExternal != v) {
|
||||
setCarrier().isExternalField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var attributeOwnerIdField: IrAttributeContainer = this
|
||||
|
||||
override var attributeOwnerId: IrAttributeContainer
|
||||
|
||||
+11
-1
@@ -40,7 +40,7 @@ internal class PersistentIrConstructor(
|
||||
visibility: DescriptorVisibility,
|
||||
returnType: IrType,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isPrimary: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
@@ -153,6 +153,16 @@ internal class PersistentIrConstructor(
|
||||
}
|
||||
}
|
||||
|
||||
override var isExternalField: Boolean = isExternal
|
||||
|
||||
override var isExternal: Boolean
|
||||
get() = getCarrier().isExternalField
|
||||
set(v) {
|
||||
if (isExternal != v) {
|
||||
setCarrier().isExternalField = v
|
||||
}
|
||||
}
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
override val descriptor: ClassConstructorDescriptor
|
||||
get() = symbol.descriptor
|
||||
|
||||
+11
-1
@@ -38,7 +38,7 @@ internal class PersistentIrField(
|
||||
type: IrType,
|
||||
override var visibility: DescriptorVisibility,
|
||||
override val isFinal: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isStatic: Boolean
|
||||
) : IrField(),
|
||||
PersistentIrDeclarationBase<FieldCarrier>,
|
||||
@@ -104,4 +104,14 @@ internal class PersistentIrField(
|
||||
setCarrier().typeField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var isExternalField: Boolean = isExternal
|
||||
|
||||
override var isExternal: Boolean
|
||||
get() = getCarrier().isExternalField
|
||||
set(v) {
|
||||
if (isExternal != v) {
|
||||
setCarrier().isExternalField = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-1
@@ -31,7 +31,7 @@ internal abstract class PersistentIrFunctionCommon(
|
||||
visibility: DescriptorVisibility,
|
||||
returnType: IrType,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean,
|
||||
override val isOperator: Boolean,
|
||||
@@ -173,6 +173,16 @@ internal abstract class PersistentIrFunctionCommon(
|
||||
setCarrier().correspondingPropertySymbolField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var isExternalField: Boolean = isExternal
|
||||
|
||||
override var isExternal: Boolean
|
||||
get() = getCarrier().isExternalField
|
||||
set(v) {
|
||||
if (isExternal != v) {
|
||||
setCarrier().isExternalField = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class PersistentIrFunction(
|
||||
|
||||
+11
-1
@@ -39,7 +39,7 @@ internal abstract class PersistentIrPropertyCommon(
|
||||
override val isConst: Boolean,
|
||||
override val isLateinit: Boolean,
|
||||
override val isDelegated: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
isExternal: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val containerSource: DeserializedContainerSource?,
|
||||
) : IrProperty(),
|
||||
@@ -106,6 +106,16 @@ internal abstract class PersistentIrPropertyCommon(
|
||||
setCarrier().attributeOwnerIdField = v
|
||||
}
|
||||
}
|
||||
|
||||
override var isExternalField: Boolean = isExternal
|
||||
|
||||
override var isExternal: Boolean
|
||||
get() = getCarrier().isExternalField
|
||||
set(v) {
|
||||
if (isExternal != v) {
|
||||
setCarrier().isExternalField = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class PersistentIrProperty(
|
||||
|
||||
+5
-2
@@ -16,6 +16,7 @@ internal interface ClassCarrier : DeclarationCarrier {
|
||||
var metadataField: MetadataSource?
|
||||
var visibilityField: DescriptorVisibility
|
||||
var modalityField: Modality
|
||||
var isExternalField: Boolean
|
||||
var attributeOwnerIdField: IrAttributeContainer
|
||||
var typeParametersField: List<IrTypeParameter>
|
||||
var superTypesField: List<IrType>
|
||||
@@ -32,7 +33,8 @@ internal interface ClassCarrier : DeclarationCarrier {
|
||||
modalityField,
|
||||
attributeOwnerIdField,
|
||||
typeParametersField,
|
||||
superTypesField
|
||||
superTypesField,
|
||||
isExternalField
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -48,5 +50,6 @@ internal class ClassCarrierImpl(
|
||||
override var modalityField: Modality,
|
||||
override var attributeOwnerIdField: IrAttributeContainer,
|
||||
override var typeParametersField: List<IrTypeParameter>,
|
||||
override var superTypesField: List<IrType>
|
||||
override var superTypesField: List<IrType>,
|
||||
override var isExternalField: Boolean
|
||||
) : ClassCarrier
|
||||
|
||||
+4
-2
@@ -25,7 +25,8 @@ internal interface ConstructorCarrier : FunctionBaseCarrier {
|
||||
metadataField,
|
||||
visibilityField,
|
||||
typeParametersField,
|
||||
valueParametersField
|
||||
valueParametersField,
|
||||
isExternalField,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -42,5 +43,6 @@ internal class ConstructorCarrierImpl(
|
||||
override var metadataField: MetadataSource?,
|
||||
override var visibilityField: DescriptorVisibility,
|
||||
override var typeParametersField: List<IrTypeParameter>,
|
||||
override var valueParametersField: List<IrValueParameter>
|
||||
override var valueParametersField: List<IrValueParameter>,
|
||||
override var isExternalField: Boolean,
|
||||
) : ConstructorCarrier
|
||||
|
||||
+5
-2
@@ -18,6 +18,7 @@ internal interface FieldCarrier : DeclarationCarrier {
|
||||
var initializerField: IrExpressionBody?
|
||||
var correspondingPropertySymbolField: IrPropertySymbol?
|
||||
var metadataField: MetadataSource?
|
||||
var isExternalField: Boolean
|
||||
|
||||
override fun clone(): FieldCarrier {
|
||||
return FieldCarrierImpl(
|
||||
@@ -28,7 +29,8 @@ internal interface FieldCarrier : DeclarationCarrier {
|
||||
typeField,
|
||||
initializerField,
|
||||
correspondingPropertySymbolField,
|
||||
metadataField
|
||||
metadataField,
|
||||
isExternalField,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -41,5 +43,6 @@ internal class FieldCarrierImpl(
|
||||
override var typeField: IrType,
|
||||
override var initializerField: IrExpressionBody?,
|
||||
override var correspondingPropertySymbolField: IrPropertySymbol?,
|
||||
override var metadataField: MetadataSource?
|
||||
override var metadataField: MetadataSource?,
|
||||
override var isExternalField: Boolean
|
||||
) : FieldCarrier
|
||||
|
||||
+1
@@ -21,4 +21,5 @@ internal interface FunctionBaseCarrier : DeclarationCarrier {
|
||||
var visibilityField: DescriptorVisibility
|
||||
var typeParametersField: List<IrTypeParameter>
|
||||
var valueParametersField: List<IrValueParameter>
|
||||
var isExternalField: Boolean
|
||||
}
|
||||
|
||||
+4
-2
@@ -34,7 +34,8 @@ internal interface FunctionCarrier : FunctionBaseCarrier {
|
||||
valueParametersField,
|
||||
correspondingPropertySymbolField,
|
||||
overriddenSymbolsField,
|
||||
attributeOwnerIdField
|
||||
attributeOwnerIdField,
|
||||
isExternalField,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -54,5 +55,6 @@ internal class FunctionCarrierImpl(
|
||||
override var valueParametersField: List<IrValueParameter>,
|
||||
override var correspondingPropertySymbolField: IrPropertySymbol?,
|
||||
override var overriddenSymbolsField: List<IrSimpleFunctionSymbol>,
|
||||
override var attributeOwnerIdField: IrAttributeContainer
|
||||
override var attributeOwnerIdField: IrAttributeContainer,
|
||||
override var isExternalField: Boolean,
|
||||
) : FunctionCarrier
|
||||
|
||||
+4
-1
@@ -14,6 +14,7 @@ internal interface PropertyCarrier : DeclarationCarrier {
|
||||
var setterField: IrSimpleFunction?
|
||||
var metadataField: MetadataSource?
|
||||
var attributeOwnerIdField: IrAttributeContainer
|
||||
var isExternalField: Boolean
|
||||
|
||||
override fun clone(): PropertyCarrier {
|
||||
return PropertyCarrierImpl(
|
||||
@@ -26,6 +27,7 @@ internal interface PropertyCarrier : DeclarationCarrier {
|
||||
setterField,
|
||||
metadataField,
|
||||
attributeOwnerIdField,
|
||||
isExternalField,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -39,5 +41,6 @@ internal class PropertyCarrierImpl(
|
||||
override var getterField: IrSimpleFunction?,
|
||||
override var setterField: IrSimpleFunction?,
|
||||
override var metadataField: MetadataSource?,
|
||||
override var attributeOwnerIdField: IrAttributeContainer
|
||||
override var attributeOwnerIdField: IrAttributeContainer,
|
||||
override var isExternalField: Boolean
|
||||
) : PropertyCarrier
|
||||
|
||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrClass :
|
||||
IrDeclarationBase(), IrDeclarationWithName, IrDeclarationWithVisibility,
|
||||
IrDeclarationBase(), IrPossiblyExternalDeclaration, IrDeclarationWithVisibility,
|
||||
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner {
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
@@ -41,7 +41,6 @@ abstract class IrClass :
|
||||
abstract val isCompanion: Boolean
|
||||
abstract val isInner: Boolean
|
||||
abstract val isData: Boolean
|
||||
abstract val isExternal: Boolean
|
||||
abstract val isInline: Boolean
|
||||
abstract val isExpect: Boolean
|
||||
abstract val isFun: Boolean
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
package org.jetbrains.kotlin.ir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrElementBase
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
@@ -60,6 +60,10 @@ interface IrDeclarationWithName : IrDeclaration {
|
||||
val name: Name
|
||||
}
|
||||
|
||||
interface IrPossiblyExternalDeclaration : IrDeclarationWithName {
|
||||
var isExternal: Boolean
|
||||
}
|
||||
|
||||
interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner {
|
||||
val modality: Modality
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrField :
|
||||
IrDeclarationBase(),
|
||||
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner {
|
||||
IrPossiblyExternalDeclaration, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner {
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: PropertyDescriptor
|
||||
@@ -24,7 +24,6 @@ abstract class IrField :
|
||||
|
||||
abstract var type: IrType
|
||||
abstract val isFinal: Boolean
|
||||
abstract val isExternal: Boolean
|
||||
abstract val isStatic: Boolean
|
||||
|
||||
abstract var initializer: IrExpressionBody?
|
||||
|
||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
abstract class IrFunction :
|
||||
IrDeclarationBase(),
|
||||
IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
|
||||
IrPossiblyExternalDeclaration, IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget,
|
||||
IrMemberWithContainerSource,
|
||||
IrMetadataSourceOwner {
|
||||
|
||||
@@ -38,7 +38,6 @@ abstract class IrFunction :
|
||||
abstract override val symbol: IrFunctionSymbol
|
||||
|
||||
abstract val isInline: Boolean // NB: there's an inline constructor for Array and each primitive array class
|
||||
abstract val isExternal: Boolean
|
||||
abstract val isExpect: Boolean
|
||||
|
||||
abstract var returnType: IrType
|
||||
|
||||
@@ -21,10 +21,9 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
abstract class IrProperty :
|
||||
IrDeclarationBase(), IrOverridableMember, IrMetadataSourceOwner, IrAttributeContainer, IrMemberWithContainerSource {
|
||||
IrDeclarationBase(), IrPossiblyExternalDeclaration, IrOverridableMember, IrMetadataSourceOwner, IrAttributeContainer, IrMemberWithContainerSource {
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
abstract override val descriptor: PropertyDescriptor
|
||||
abstract override val symbol: IrPropertySymbol
|
||||
@@ -33,7 +32,6 @@ abstract class IrProperty :
|
||||
abstract val isConst: Boolean
|
||||
abstract val isLateinit: Boolean
|
||||
abstract val isDelegated: Boolean
|
||||
abstract val isExternal: Boolean
|
||||
abstract val isExpect: Boolean
|
||||
abstract val isFakeOverride: Boolean
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ class IrLazyClass(
|
||||
override val isCompanion: Boolean,
|
||||
override val isInner: Boolean,
|
||||
override val isData: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isInline: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val isFun: Boolean,
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ class IrLazyConstructor(
|
||||
override val name: Name,
|
||||
override var visibility: DescriptorVisibility,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isPrimary: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val stubGenerator: DeclarationStubGenerator,
|
||||
|
||||
@@ -32,7 +32,7 @@ class IrLazyField(
|
||||
override val name: Name,
|
||||
override var visibility: DescriptorVisibility,
|
||||
override val isFinal: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isStatic: Boolean,
|
||||
override val stubGenerator: DeclarationStubGenerator,
|
||||
override val typeTranslator: TypeTranslator,
|
||||
|
||||
@@ -34,7 +34,7 @@ class IrLazyFunction(
|
||||
override var visibility: DescriptorVisibility,
|
||||
override val modality: Modality,
|
||||
override val isInline: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
|
||||
@@ -34,7 +34,7 @@ class IrLazyProperty(
|
||||
override val isConst: Boolean,
|
||||
override val isLateinit: Boolean,
|
||||
override val isDelegated: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override var isExternal: Boolean,
|
||||
override val isExpect: Boolean,
|
||||
override val isFakeOverride: Boolean,
|
||||
override val stubGenerator: DeclarationStubGenerator,
|
||||
|
||||
@@ -313,23 +313,12 @@ fun IrCall.isSuperToAny() = superQualifierSymbol?.let { this.symbol.owner.isFake
|
||||
fun IrDeclaration.hasInterfaceParent() =
|
||||
parent.safeAs<IrClass>()?.isInterface == true
|
||||
|
||||
fun IrDeclaration.isEffectivelyExternal(): Boolean {
|
||||
|
||||
fun IrFunction.effectiveParentDeclaration(): IrDeclaration? =
|
||||
when (this) {
|
||||
is IrSimpleFunction -> correspondingPropertySymbol?.owner ?: parent as? IrDeclaration
|
||||
else -> parent as? IrDeclaration
|
||||
}
|
||||
fun IrPossiblyExternalDeclaration.isEffectivelyExternal(): Boolean =
|
||||
this.isExternal
|
||||
|
||||
val parent = parent
|
||||
return when (this) {
|
||||
is IrFunction -> isExternal || (effectiveParentDeclaration()?.isEffectivelyExternal() ?: false)
|
||||
is IrField -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
|
||||
is IrProperty -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
|
||||
is IrClass -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
fun IrDeclaration.isEffectivelyExternal(): Boolean =
|
||||
this is IrPossiblyExternalDeclaration && this.isExternal
|
||||
|
||||
fun IrFunction.isExternalOrInheritedFromExternal(): Boolean {
|
||||
fun isExternalOrInheritedFromExternalImpl(f: IrSimpleFunction): Boolean =
|
||||
|
||||
Reference in New Issue
Block a user