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