[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
|
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
|
||||||
|
|||||||
+29
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+1
-1
@@ -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 {
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+1
-1
@@ -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() {
|
||||||
|
|||||||
+11
-1
@@ -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
|
||||||
|
|||||||
+11
-1
@@ -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
|
||||||
|
|||||||
+11
-1
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -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(
|
||||||
|
|||||||
+11
-1
@@ -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(
|
||||||
|
|||||||
+5
-2
@@ -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
|
||||||
|
|||||||
+4
-2
@@ -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
|
||||||
|
|||||||
+5
-2
@@ -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
|
||||||
|
|||||||
+1
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -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
|
||||||
|
|||||||
+4
-1
@@ -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,
|
||||||
|
|||||||
+1
-1
@@ -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 =
|
||||||
|
|||||||
Reference in New Issue
Block a user