Fir2Ir: extract error about unsupported mutation

This commit is contained in:
Alexander Udalov
2023-02-22 00:04:27 +01:00
committed by Space Team
parent 22b4b29292
commit 1cb77a47ec
7 changed files with 42 additions and 120 deletions
@@ -40,4 +40,7 @@ interface AbstractFir2IrLazyDeclaration<F> :
get() = shouldNotBeCalled() get() = shouldNotBeCalled()
override val typeTranslator: TypeTranslator override val typeTranslator: TypeTranslator
get() = shouldNotBeCalled() get() = shouldNotBeCalled()
fun mutationNotSupported(): Nothing =
error("Mutation of Fir2Ir lazy elements is not possible")
} }
@@ -46,27 +46,19 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override var isTailrec: Boolean override var isTailrec: Boolean
get() = fir.isTailRec get() = fir.isTailRec
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isSuspend: Boolean override var isSuspend: Boolean
get() = fir.isSuspend get() = fir.isSuspend
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isOperator: Boolean override var isOperator: Boolean
get() = fir.isOperator get() = fir.isOperator
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isInfix: Boolean override var isInfix: Boolean
get() = fir.isInfix get() = fir.isInfix
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: FunctionDescriptor override val descriptor: FunctionDescriptor
@@ -74,21 +66,15 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override var isInline: Boolean override var isInline: Boolean
get() = fir.isInline get() = fir.isInline
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExternal: Boolean override var isExternal: Boolean
get() = fir.isExternal get() = fir.isExternal
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExpect: Boolean override var isExpect: Boolean
get() = fir.isExpect get() = fir.isExpect
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var body: IrBody? by lazyVar(lock) { override var body: IrBody? by lazyVar(lock) {
if (tryLoadIr()) body else null if (tryLoadIr()) body else null
@@ -100,9 +86,7 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override var modality: Modality override var modality: Modality
get() = fir.modality!! get() = fir.modality!!
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var correspondingPropertySymbol: IrPropertySymbol? = null override var correspondingPropertySymbol: IrPropertySymbol? = null
@@ -60,75 +60,50 @@ class Fir2IrLazyClass(
override var name: Name override var name: Name
get() = fir.name get() = fir.name
set(_) { set(_) = mutationNotSupported()
throw UnsupportedOperationException()
}
@Suppress("SetterBackingFieldAssignment")
override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility) override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var modality: Modality override var modality: Modality
get() = fir.modality!! get() = fir.modality!!
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var attributeOwnerId: IrAttributeContainer override var attributeOwnerId: IrAttributeContainer
get() = this get() = this
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var kind: ClassKind override var kind: ClassKind
get() = fir.classKind get() = fir.classKind
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isCompanion: Boolean override var isCompanion: Boolean
get() = fir.isCompanion get() = fir.isCompanion
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isInner: Boolean override var isInner: Boolean
get() = fir.isInner get() = fir.isInner
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isData: Boolean override var isData: Boolean
get() = fir.isData get() = fir.isData
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExternal: Boolean override var isExternal: Boolean
get() = fir.isExternal get() = fir.isExternal
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isValue: Boolean override var isValue: Boolean
get() = fir.isInline get() = fir.isInline
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExpect: Boolean override var isExpect: Boolean
get() = fir.isExpect get() = fir.isExpect
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isFun: Boolean override var isFun: Boolean
get() = fir.isFun get() = fir.isFun
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var superTypes: List<IrType> by lazyVar(lock) { override var superTypes: List<IrType> by lazyVar(lock) {
fir.superTypeRefs.map { it.toIrType(typeConverter) } fir.superTypeRefs.map { it.toIrType(typeConverter) }
@@ -160,9 +135,7 @@ class Fir2IrLazyClass(
override var valueClassRepresentation: ValueClassRepresentation<IrSimpleType>? override var valueClassRepresentation: ValueClassRepresentation<IrSimpleType>?
get() = computeValueClassRepresentation(fir) get() = computeValueClassRepresentation(fir)
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
private val fakeOverridesByName = mutableMapOf<Name, Collection<IrDeclaration>>() private val fakeOverridesByName = mutableMapOf<Name, Collection<IrDeclaration>>()
@@ -48,9 +48,7 @@ class Fir2IrLazyConstructor(
override var isPrimary: Boolean override var isPrimary: Boolean
get() = fir.isPrimary get() = fir.isPrimary
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
@ObsoleteDescriptorBasedAPI @ObsoleteDescriptorBasedAPI
override val descriptor: ClassConstructorDescriptor override val descriptor: ClassConstructorDescriptor
@@ -58,35 +56,24 @@ class Fir2IrLazyConstructor(
override var isInline: Boolean override var isInline: Boolean
get() = fir.isInline get() = fir.isInline
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExternal: Boolean override var isExternal: Boolean
get() = fir.isExternal get() = fir.isExternal
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExpect: Boolean override var isExpect: Boolean
get() = fir.isExpect get() = fir.isExpect
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var body: IrBody? = null override var body: IrBody? = null
override var name: Name override var name: Name
get() = SpecialNames.INIT get() = SpecialNames.INIT
set(_) { set(_) = mutationNotSupported()
throw UnsupportedOperationException()
}
@Suppress("SetterBackingFieldAssignment")
override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility) override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var returnType: IrType by lazyVar(lock) { override var returnType: IrType by lazyVar(lock) {
fir.returnTypeRef.toIrType(typeConverter) fir.returnTypeRef.toIrType(typeConverter)
@@ -55,57 +55,38 @@ class Fir2IrLazyProperty(
override var isVar: Boolean override var isVar: Boolean
get() = fir.isVar get() = fir.isVar
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isConst: Boolean override var isConst: Boolean
get() = fir.isConst get() = fir.isConst
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isLateinit: Boolean override var isLateinit: Boolean
get() = fir.isLateInit get() = fir.isLateInit
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isDelegated: Boolean override var isDelegated: Boolean
get() = fir.delegate != null get() = fir.delegate != null
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExternal: Boolean override var isExternal: Boolean
get() = fir.isExternal get() = fir.isExternal
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var isExpect: Boolean override var isExpect: Boolean
get() = fir.isExpect get() = fir.isExpect
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var name: Name override var name: Name
get() = fir.name get() = fir.name
set(_) { set(_) = mutationNotSupported()
throw UnsupportedOperationException()
}
@Suppress("SetterBackingFieldAssignment")
override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility) override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var modality: Modality override var modality: Modality
get() = fir.modality!! get() = fir.modality!!
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
private val type: IrType by lazy { private val type: IrType by lazy {
with(typeConverter) { fir.returnTypeRef.toIrType() } with(typeConverter) { fir.returnTypeRef.toIrType() }
@@ -46,17 +46,13 @@ class Fir2IrLazyPropertyAccessor(
// TODO: investigate why some deserialized properties are inline // TODO: investigate why some deserialized properties are inline
override var isInline: Boolean override var isInline: Boolean
get() = firAccessor?.isInline == true get() = firAccessor?.isInline == true
set(_) { set(_) = mutationNotSupported()
error("Mutating Fir2Ir lazy elements is not possible")
}
override var annotations: List<IrConstructorCall> by createLazyAnnotations() override var annotations: List<IrConstructorCall> by createLazyAnnotations()
override var name: Name override var name: Name
get() = Name.special("<${if (isSetter) "set" else "get"}-${firParentProperty.name}>") get() = Name.special("<${if (isSetter) "set" else "get"}-${firParentProperty.name}>")
set(_) { set(_) = mutationNotSupported()
throw UnsupportedOperationException()
}
override var returnType: IrType by lazyVar(lock) { override var returnType: IrType by lazyVar(lock) {
if (isSetter) irBuiltIns.unitType else firParentProperty.returnTypeRef.toIrType(typeConverter, conversionTypeContext) if (isSetter) irBuiltIns.unitType else firParentProperty.returnTypeRef.toIrType(typeConverter, conversionTypeContext)
@@ -43,9 +43,7 @@ class Fir2IrLazySimpleFunction(
override var name: Name override var name: Name
get() = fir.name get() = fir.name
set(_) { set(_) = mutationNotSupported()
throw UnsupportedOperationException()
}
override var returnType: IrType by lazyVar(lock) { override var returnType: IrType by lazyVar(lock) {
fir.returnTypeRef.toIrType(typeConverter) fir.returnTypeRef.toIrType(typeConverter)