From 1cb77a47ec77a5a2ec72f4efeb3d3ca37e15dd52 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 22 Feb 2023 00:04:27 +0100 Subject: [PATCH] Fir2Ir: extract error about unsupported mutation --- .../fir/lazy/AbstractFir2IrLazyDeclaration.kt | 3 ++ .../fir/lazy/AbstractFir2IrLazyFunction.kt | 32 +++-------- .../kotlin/fir/lazy/Fir2IrLazyClass.kt | 53 +++++-------------- .../kotlin/fir/lazy/Fir2IrLazyConstructor.kt | 25 +++------ .../kotlin/fir/lazy/Fir2IrLazyProperty.kt | 37 ++++--------- .../fir/lazy/Fir2IrLazyPropertyAccessor.kt | 8 +-- .../fir/lazy/Fir2IrLazySimpleFunction.kt | 4 +- 7 files changed, 42 insertions(+), 120 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt index e4076115393..0b48c2bde87 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt @@ -40,4 +40,7 @@ interface AbstractFir2IrLazyDeclaration : get() = shouldNotBeCalled() override val typeTranslator: TypeTranslator get() = shouldNotBeCalled() + + fun mutationNotSupported(): Nothing = + error("Mutation of Fir2Ir lazy elements is not possible") } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt index 522a482c69c..c70c4f64688 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt @@ -46,27 +46,19 @@ abstract class AbstractFir2IrLazyFunction( override var isTailrec: Boolean get() = fir.isTailRec - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isSuspend: Boolean get() = fir.isSuspend - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isOperator: Boolean get() = fir.isOperator - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isInfix: Boolean get() = fir.isInfix - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() @ObsoleteDescriptorBasedAPI override val descriptor: FunctionDescriptor @@ -74,21 +66,15 @@ abstract class AbstractFir2IrLazyFunction( override var isInline: Boolean get() = fir.isInline - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExternal: Boolean get() = fir.isExternal - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExpect: Boolean get() = fir.isExpect - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var body: IrBody? by lazyVar(lock) { if (tryLoadIr()) body else null @@ -100,9 +86,7 @@ abstract class AbstractFir2IrLazyFunction( override var modality: Modality get() = fir.modality!! - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var correspondingPropertySymbol: IrPropertySymbol? = null diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt index 11bec33a658..99d1e72b272 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt @@ -60,75 +60,50 @@ class Fir2IrLazyClass( override var name: Name get() = fir.name - set(_) { - throw UnsupportedOperationException() - } + set(_) = mutationNotSupported() - @Suppress("SetterBackingFieldAssignment") override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility) - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var modality: Modality get() = fir.modality!! - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var attributeOwnerId: IrAttributeContainer get() = this - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var kind: ClassKind get() = fir.classKind - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isCompanion: Boolean get() = fir.isCompanion - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isInner: Boolean get() = fir.isInner - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isData: Boolean get() = fir.isData - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExternal: Boolean get() = fir.isExternal - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isValue: Boolean get() = fir.isInline - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExpect: Boolean get() = fir.isExpect - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isFun: Boolean get() = fir.isFun - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var superTypes: List by lazyVar(lock) { fir.superTypeRefs.map { it.toIrType(typeConverter) } @@ -160,9 +135,7 @@ class Fir2IrLazyClass( override var valueClassRepresentation: ValueClassRepresentation? get() = computeValueClassRepresentation(fir) - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() private val fakeOverridesByName = mutableMapOf>() diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt index d3a1d9d07db..4c1bb4ffb97 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyConstructor.kt @@ -48,9 +48,7 @@ class Fir2IrLazyConstructor( override var isPrimary: Boolean get() = fir.isPrimary - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() @ObsoleteDescriptorBasedAPI override val descriptor: ClassConstructorDescriptor @@ -58,35 +56,24 @@ class Fir2IrLazyConstructor( override var isInline: Boolean get() = fir.isInline - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExternal: Boolean get() = fir.isExternal - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExpect: Boolean get() = fir.isExpect - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var body: IrBody? = null override var name: Name get() = SpecialNames.INIT - set(_) { - throw UnsupportedOperationException() - } + set(_) = mutationNotSupported() - @Suppress("SetterBackingFieldAssignment") override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility) - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var returnType: IrType by lazyVar(lock) { fir.returnTypeRef.toIrType(typeConverter) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt index 9533b8d01df..290aca5c2c4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyProperty.kt @@ -55,57 +55,38 @@ class Fir2IrLazyProperty( override var isVar: Boolean get() = fir.isVar - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isConst: Boolean get() = fir.isConst - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isLateinit: Boolean get() = fir.isLateInit - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isDelegated: Boolean get() = fir.delegate != null - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExternal: Boolean get() = fir.isExternal - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var isExpect: Boolean get() = fir.isExpect - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var name: Name get() = fir.name - set(_) { - throw UnsupportedOperationException() - } + set(_) = mutationNotSupported() - @Suppress("SetterBackingFieldAssignment") override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility) - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var modality: Modality get() = fir.modality!! - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() private val type: IrType by lazy { with(typeConverter) { fir.returnTypeRef.toIrType() } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt index db02be50b8b..1be1a089d69 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt @@ -46,17 +46,13 @@ class Fir2IrLazyPropertyAccessor( // TODO: investigate why some deserialized properties are inline override var isInline: Boolean get() = firAccessor?.isInline == true - set(_) { - error("Mutating Fir2Ir lazy elements is not possible") - } + set(_) = mutationNotSupported() override var annotations: List by createLazyAnnotations() override var name: Name get() = Name.special("<${if (isSetter) "set" else "get"}-${firParentProperty.name}>") - set(_) { - throw UnsupportedOperationException() - } + set(_) = mutationNotSupported() override var returnType: IrType by lazyVar(lock) { if (isSetter) irBuiltIns.unitType else firParentProperty.returnTypeRef.toIrType(typeConverter, conversionTypeContext) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt index 5c1983a5ce3..5f6bfe0f3f9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazySimpleFunction.kt @@ -43,9 +43,7 @@ class Fir2IrLazySimpleFunction( override var name: Name get() = fir.name - set(_) { - throw UnsupportedOperationException() - } + set(_) = mutationNotSupported() override var returnType: IrType by lazyVar(lock) { fir.returnTypeRef.toIrType(typeConverter)