IR: make isExternal immutable

This commit is contained in:
Anton Bannykh
2021-02-26 13:31:59 +03:00
committed by TeamCityServer
parent b0e0e62c0b
commit 87f3ca3f36
32 changed files with 45 additions and 141 deletions
@@ -58,9 +58,8 @@ abstract class AbstractFir2IrLazyFunction<F : FirMemberDeclaration>(
override val isInline: Boolean
get() = fir.isInline
override var isExternal: Boolean by lazyVar {
fir.isExternal
}
override val isExternal: Boolean
get() = fir.isExternal
override val isExpect: Boolean
get() = fir.isExpect
@@ -84,11 +84,8 @@ class Fir2IrLazyClass(
override val isData: Boolean
get() = fir.isData
override var isExternal: Boolean
override val isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isInline: Boolean
get() = fir.isInline
@@ -50,11 +50,8 @@ class Fir2IrLazyConstructor(
override val isInline: Boolean
get() = fir.isInline
override var isExternal: Boolean
override val isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExpect: Boolean
get() = fir.isExpect
@@ -63,11 +63,8 @@ class Fir2IrLazyProperty(
override val isDelegated: Boolean
get() = fir.delegate != null
override var isExternal: Boolean
override val isExternal: Boolean
get() = fir.isExternal
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
}
override val isExpect: Boolean
get() = fir.isExpect
@@ -36,7 +36,7 @@ class IrClassImpl(
override val isCompanion: Boolean = false,
override val isInner: Boolean = false,
override val isData: Boolean = false,
override var isExternal: Boolean = false,
override val isExternal: Boolean = false,
override val isInline: Boolean = false,
override val isExpect: Boolean = false,
override val isFun: Boolean = false,
@@ -38,7 +38,7 @@ class IrConstructorImpl(
override var visibility: DescriptorVisibility,
returnType: IrType,
override val isInline: Boolean,
override var isExternal: Boolean,
override val isExternal: Boolean,
override val isPrimary: Boolean,
override val isExpect: Boolean,
override val containerSource: DeserializedContainerSource? = null,
@@ -36,7 +36,7 @@ class IrFieldImpl(
override var type: IrType,
override var visibility: DescriptorVisibility,
override val isFinal: Boolean,
override var isExternal: Boolean,
override val isExternal: Boolean,
override val isStatic: Boolean,
) : IrField() {
init {
@@ -29,7 +29,7 @@ abstract class IrFunctionCommonImpl(
override var visibility: DescriptorVisibility,
returnType: IrType,
override val isInline: Boolean,
override var isExternal: Boolean,
override val isExternal: Boolean,
override val isTailrec: Boolean,
override val isSuspend: Boolean,
override val isOperator: Boolean,
@@ -37,7 +37,7 @@ abstract class IrPropertyCommonImpl(
override val isConst: Boolean,
override val isLateinit: Boolean,
override val isDelegated: Boolean,
override var isExternal: Boolean,
override val isExternal: Boolean,
override val isExpect: Boolean,
override val containerSource: DeserializedContainerSource?,
) : IrProperty() {
@@ -42,7 +42,7 @@ internal class PersistentIrClass(
override val isCompanion: Boolean = false,
override val isInner: Boolean = false,
override val isData: Boolean = false,
isExternal: Boolean = false,
override val isExternal: Boolean = false,
override val isInline: Boolean = false,
override val isExpect: Boolean = false,
override val isFun: Boolean = false,
@@ -152,17 +152,6 @@ 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
@@ -36,7 +36,7 @@ internal class PersistentIrConstructor(
visibility: DescriptorVisibility,
returnType: IrType,
override val isInline: Boolean,
isExternal: Boolean,
override val isExternal: Boolean,
override val isPrimary: Boolean,
override val isExpect: Boolean,
override val containerSource: DeserializedContainerSource?,
@@ -158,17 +158,6 @@ 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
@@ -32,7 +32,7 @@ internal class PersistentIrField(
type: IrType,
override var visibility: DescriptorVisibility,
override val isFinal: Boolean,
isExternal: Boolean,
override val isExternal: Boolean,
override val isStatic: Boolean,
override val factory: PersistentIrFactory
) : IrField(),
@@ -103,15 +103,4 @@ internal class PersistentIrField(
typeField = v
}
}
override var isExternalField: Boolean = isExternal
override var isExternal: Boolean
get() = getCarrier().isExternalField
set(v) {
if (isExternal != v) {
setCarrier()
isExternalField = v
}
}
}
@@ -35,7 +35,7 @@ internal abstract class PersistentIrFunctionCommon(
visibility: DescriptorVisibility,
returnType: IrType,
override val isInline: Boolean,
isExternal: Boolean,
override val isExternal: Boolean,
override val isTailrec: Boolean,
override val isSuspend: Boolean,
override val isOperator: Boolean,
@@ -189,15 +189,4 @@ internal abstract class PersistentIrFunctionCommon(
correspondingPropertySymbolField = 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 PersistentIrPropertyCommon(
override val isConst: Boolean,
override val isLateinit: Boolean,
override val isDelegated: Boolean,
isExternal: Boolean,
override val isExternal: Boolean,
override val isExpect: Boolean,
override val containerSource: DeserializedContainerSource?,
override val factory: PersistentIrFactory
@@ -104,15 +104,4 @@ internal abstract class PersistentIrPropertyCommon(
attributeOwnerIdField = v
}
}
override var isExternalField: Boolean = isExternal
override var isExternal: Boolean
get() = getCarrier().isExternalField
set(v) {
if (isExternal != v) {
setCarrier()
isExternalField = v
}
}
}
@@ -26,7 +26,6 @@ internal interface ClassCarrier : DeclarationCarrier{
val attributeOwnerIdField: IrAttributeContainer
val typeParametersField: List<IrTypeParameter>
val superTypesField: List<IrType>
val isExternalField: Boolean
override fun clone(): ClassCarrier {
return ClassCarrierImpl(
@@ -40,8 +39,7 @@ internal interface ClassCarrier : DeclarationCarrier{
modalityField,
attributeOwnerIdField,
typeParametersField,
superTypesField,
isExternalField
superTypesField
)
}
}
@@ -57,6 +55,5 @@ internal class ClassCarrierImpl(
override val modalityField: Modality,
override val attributeOwnerIdField: IrAttributeContainer,
override val typeParametersField: List<IrTypeParameter>,
override val superTypesField: List<IrType>,
override val isExternalField: Boolean
override val superTypesField: List<IrType>
) : ClassCarrier
@@ -26,7 +26,6 @@ internal interface ConstructorCarrier : DeclarationCarrier{
val visibilityField: DescriptorVisibility
val typeParametersField: List<IrTypeParameter>
val valueParametersField: List<IrValueParameter>
val isExternalField: Boolean
override fun clone(): ConstructorCarrier {
return ConstructorCarrierImpl(
@@ -41,8 +40,7 @@ internal interface ConstructorCarrier : DeclarationCarrier{
metadataField,
visibilityField,
typeParametersField,
valueParametersField,
isExternalField
valueParametersField
)
}
}
@@ -59,6 +57,5 @@ internal class ConstructorCarrierImpl(
override val metadataField: MetadataSource?,
override val visibilityField: DescriptorVisibility,
override val typeParametersField: List<IrTypeParameter>,
override val valueParametersField: List<IrValueParameter>,
override val isExternalField: Boolean
override val valueParametersField: List<IrValueParameter>
) : ConstructorCarrier
@@ -20,7 +20,6 @@ internal interface FieldCarrier : DeclarationCarrier{
val initializerField: IrExpressionBody?
val correspondingPropertySymbolField: IrPropertySymbol?
val metadataField: MetadataSource?
val isExternalField: Boolean
override fun clone(): FieldCarrier {
return FieldCarrierImpl(
@@ -31,8 +30,7 @@ internal interface FieldCarrier : DeclarationCarrier{
typeField,
initializerField,
correspondingPropertySymbolField,
metadataField,
isExternalField
metadataField
)
}
}
@@ -45,6 +43,5 @@ internal class FieldCarrierImpl(
override val typeField: IrType,
override val initializerField: IrExpressionBody?,
override val correspondingPropertySymbolField: IrPropertySymbol?,
override val metadataField: MetadataSource?,
override val isExternalField: Boolean
override val metadataField: MetadataSource?
) : FieldCarrier
@@ -32,7 +32,6 @@ internal interface FunctionCarrier : DeclarationCarrier{
val correspondingPropertySymbolField: IrPropertySymbol?
val overriddenSymbolsField: List<IrSimpleFunctionSymbol>
val attributeOwnerIdField: IrAttributeContainer
val isExternalField: Boolean
override fun clone(): FunctionCarrier {
return FunctionCarrierImpl(
@@ -50,8 +49,7 @@ internal interface FunctionCarrier : DeclarationCarrier{
valueParametersField,
correspondingPropertySymbolField,
overriddenSymbolsField,
attributeOwnerIdField,
isExternalField
attributeOwnerIdField
)
}
}
@@ -71,6 +69,5 @@ internal class FunctionCarrierImpl(
override val valueParametersField: List<IrValueParameter>,
override val correspondingPropertySymbolField: IrPropertySymbol?,
override val overriddenSymbolsField: List<IrSimpleFunctionSymbol>,
override val attributeOwnerIdField: IrAttributeContainer,
override val isExternalField: Boolean
override val attributeOwnerIdField: IrAttributeContainer
) : FunctionCarrier
@@ -21,7 +21,6 @@ internal interface PropertyCarrier : DeclarationCarrier{
val setterField: IrSimpleFunction?
val metadataField: MetadataSource?
val attributeOwnerIdField: IrAttributeContainer
val isExternalField: Boolean
override fun clone(): PropertyCarrier {
return PropertyCarrierImpl(
@@ -33,8 +32,7 @@ internal interface PropertyCarrier : DeclarationCarrier{
getterField,
setterField,
metadataField,
attributeOwnerIdField,
isExternalField
attributeOwnerIdField
)
}
}
@@ -48,6 +46,5 @@ internal class PropertyCarrierImpl(
override val getterField: IrSimpleFunction?,
override val setterField: IrSimpleFunction?,
override val metadataField: MetadataSource?,
override val attributeOwnerIdField: IrAttributeContainer,
override val isExternalField: Boolean
override val attributeOwnerIdField: IrAttributeContainer
) : PropertyCarrier
@@ -13,7 +13,6 @@ internal fun PersistentIrGenerator.generateClass() {
val metadataField = Field("metadata", irDeclaration("MetadataSource") + "?")
val modalityField = Field("modality", descriptorType("Modality"))
val attributeOwnerIdField = Field("attributeOwnerId", IrAttributeContainer)
val isExternalField = Field("isExternal", +"Boolean", notEq = "!=")
writeFile("PersistentIrClass.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
lines(
@@ -69,7 +68,6 @@ internal fun PersistentIrGenerator.generateClass() {
superTypesField.toPersistentField(+"emptyList()"),
metadataField.toPersistentField(+"null"),
modalityField.toPersistentField(+"modality"),
isExternalField.toPersistentField(+"isExternal"),
attributeOwnerIdField.toPersistentField(+"this"),
),
id,
@@ -86,7 +84,6 @@ internal fun PersistentIrGenerator.generateClass() {
attributeOwnerIdField,
typeParametersField,
superTypesField,
isExternalField,
)()
})
}
@@ -14,7 +14,6 @@ internal fun PersistentIrGenerator.generateConstructor() {
val bodyField = Field("body", IrBody + "?")
val metadataField = Field("metadata", MetadataSource + "?")
val visibilityField = Field("visibility", DescriptorVisibility)
val isExternalField = Field("isExternal", +"Boolean", notEq = "!=")
writeFile("PersistentIrConstructor.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
lines(
@@ -57,7 +56,6 @@ internal fun PersistentIrGenerator.generateConstructor() {
bodyField.toBody(),
metadataField.toPersistentField(+"null"),
visibilityField.toPersistentField(+"visibility"),
isExternalField.toPersistentField(+"isExternal"),
descriptor(ClassConstructorDescriptor)
),
id,
@@ -75,7 +73,6 @@ internal fun PersistentIrGenerator.generateConstructor() {
visibilityField,
typeParametersField,
valueParametersField,
isExternalField,
)()
})
}
@@ -10,7 +10,6 @@ internal fun PersistentIrGenerator.generateField() {
val correspondingPropertySymbolField = Field("correspondingPropertySymbol", IrPropertySymbol + "?")
val metadataField = Field("metadata", MetadataSource + "?")
val typeField = Field("type", IrType)
val isExternalField = Field("isExternal", +"Boolean", notEq = "!=")
writeFile("PersistentIrField.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
lines(
@@ -37,7 +36,6 @@ internal fun PersistentIrGenerator.generateField() {
correspondingPropertySymbolField.toPersistentField(+"null"),
metadataField.toPersistentField(+"null"),
typeField.toPersistentField(+"type"),
isExternalField.toPersistentField(+"isExternal"),
),
id,
)()
@@ -50,7 +48,6 @@ internal fun PersistentIrGenerator.generateField() {
initializerField,
correspondingPropertySymbolField,
metadataField,
isExternalField,
)()
})
}
@@ -18,7 +18,6 @@ internal fun PersistentIrGenerator.generateFunction() {
val overriddenSymbolsField = Field("overriddenSymbols", +"List<" + irSymbol("IrSimpleFunctionSymbol") + ">")
val attributeOwnerIdField = Field("attributeOwnerId", IrAttributeContainer)
val correspondingPropertySymbolField = Field("correspondingPropertySymbol", IrPropertySymbol + "?")
val isExternalField = Field("isExternal", +"Boolean", notEq = "!=")
writeFile("PersistentIrFunctionCommon.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
lines(
@@ -74,7 +73,6 @@ internal fun PersistentIrGenerator.generateFunction() {
attributeOwnerIdField.toPersistentField(+"this"),
),
correspondingPropertySymbolField.toPersistentField(+"null"),
isExternalField.toPersistentField(+"isExternal")
),
id,
)()
@@ -94,7 +92,6 @@ internal fun PersistentIrGenerator.generateFunction() {
correspondingPropertySymbolField,
overriddenSymbolsField,
attributeOwnerIdField,
isExternalField,
)()
})
}
@@ -70,7 +70,7 @@ internal object PersistentIrGenerator {
val isCompanion = +"override val isCompanion: Boolean = false"
val isInner = +"override val isInner: Boolean = false"
val isData = +"override val isData: Boolean = false"
val isExternal = +"isExternal: Boolean"
val isExternal = +"override val isExternal: Boolean"
val isFinal = +"override val isFinal: Boolean"
val isInline = +"override val isInline: Boolean"
val isExpect = +"override val isExpect: Boolean"
@@ -11,7 +11,6 @@ internal fun PersistentIrGenerator.generateProperty() {
val setterField = Field("setter", irDeclaration("IrSimpleFunction") + "?")
val metadataField = Field("metadata", MetadataSource + "?")
val attributeOwnerIdField = Field("attributeOwnerId", IrAttributeContainer)
val isExternalField = Field("isExternal", +"Boolean", notEq = "!=")
writeFile("PersistentIrPropertyCommon.kt", renderFile("org.jetbrains.kotlin.ir.declarations.persistent") {
lines(
@@ -42,7 +41,6 @@ internal fun PersistentIrGenerator.generateProperty() {
+"@Suppress(\"LeakingThis\")",
attributeOwnerIdField.toPersistentField(+"this"),
),
isExternalField.toPersistentField(+"isExternal"),
),
id,
)()
@@ -56,7 +54,6 @@ internal fun PersistentIrGenerator.generateProperty() {
setterField,
metadataField,
attributeOwnerIdField,
isExternalField,
)()
})
}
@@ -61,7 +61,7 @@ interface IrDeclarationWithName : IrDeclaration {
}
interface IrPossiblyExternalDeclaration : IrDeclarationWithName {
var isExternal: Boolean
val isExternal: Boolean
}
interface IrOverridableMember : IrDeclarationWithVisibility, IrDeclarationWithName, IrSymbolOwner {
@@ -32,7 +32,7 @@ class IrLazyClass(
override val isCompanion: Boolean,
override val isInner: Boolean,
override val isData: Boolean,
override var isExternal: Boolean,
override val isExternal: Boolean,
override val isInline: Boolean,
override val isExpect: Boolean,
override val isFun: Boolean,
@@ -30,7 +30,7 @@ class IrLazyConstructor(
override val name: Name,
override var visibility: DescriptorVisibility,
override val isInline: Boolean,
override var isExternal: Boolean,
override val 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 var isExternal: Boolean,
override val 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 var isExternal: Boolean,
override val isExternal: Boolean,
override val isTailrec: Boolean,
override val isSuspend: Boolean,
override val isExpect: Boolean,
@@ -32,7 +32,7 @@ class IrLazyProperty(
override val isConst: Boolean,
override val isLateinit: Boolean,
override val isDelegated: Boolean,
override var isExternal: Boolean,
override val isExternal: Boolean,
override val isExpect: Boolean,
override val isFakeOverride: Boolean,
override val stubGenerator: DeclarationStubGenerator,
@@ -634,22 +634,21 @@ class IrDeclarationDeserializer(
flags.isFakeOverride
)
}.apply {
if (proto.hasGetter()) {
getter = deserializeIrFunction(proto.getter).also {
it.correspondingPropertySymbol = symbol
it.isExternal = this.isExternal
withExternalValue(isExternal) {
if (proto.hasGetter()) {
getter = deserializeIrFunction(proto.getter).also {
it.correspondingPropertySymbol = symbol
}
}
}
if (proto.hasSetter()) {
setter = deserializeIrFunction(proto.setter).also {
it.correspondingPropertySymbol = symbol
it.isExternal = this.isExternal
if (proto.hasSetter()) {
setter = deserializeIrFunction(proto.setter).also {
it.correspondingPropertySymbol = symbol
}
}
}
if (proto.hasBackingField()) {
backingField = deserializeIrField(proto.backingField).also {
it.correspondingPropertySymbol = symbol
it.isExternal = this.isExternal
if (proto.hasBackingField()) {
backingField = deserializeIrField(proto.backingField).also {
it.correspondingPropertySymbol = symbol
}
}
}
}