diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt index 73160619328..14239d24030 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt @@ -32,7 +32,7 @@ internal class FirErrorLoopImpl( override val diagnostic: ConeDiagnostic, ) : FirErrorLoop() { override var block: FirBlock = FirEmptyExpressionBlock() - override var condition: FirExpression = FirErrorExpressionImpl(source, MutableOrEmptyList(), ConeStubDiagnostic(diagnostic), null, null) + override var condition: FirExpression = FirErrorExpressionImpl(source, MutableOrEmptyList.empty(), ConeStubDiagnostic(diagnostic), null, null) override fun acceptChildren(visitor: FirVisitor, data: D) { annotations.forEach { it.accept(visitor, data) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt index 04cc7d6e7c1..ac3c53e4a31 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt @@ -14,10 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.references.FirReference -import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.renderer.FirRenderer -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.types.impl.* @@ -146,7 +143,10 @@ inline fun withFileAnalysisExceptionWrapping(file: FirFile, block: () -> R): } @JvmInline -value class MutableOrEmptyList(val list: MutableList? = null) : List { +value class MutableOrEmptyList(val list: MutableList?) : List { + + private constructor(list: Nothing?) : this(list as MutableList?) + override val size: Int get() = list?.size ?: 0 @@ -189,4 +189,11 @@ value class MutableOrEmptyList(val list: MutableList? = null) : List { override fun contains(element: T): Boolean { return list?.contains(element) ?: false } + + companion object { + private val EMPTY = MutableOrEmptyList(null) + + @Suppress("UNCHECKED_CAST") + fun empty(): MutableOrEmptyList = EMPTY as MutableOrEmptyList + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/builder/FirBuilderDsl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/builder/FirBuilderDsl.kt index cad78d3029f..786c94c5179 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/builder/FirBuilderDsl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/builder/FirBuilderDsl.kt @@ -11,8 +11,8 @@ import org.jetbrains.kotlin.fir.MutableOrEmptyList annotation class FirBuilderDsl fun MutableList.toMutableOrEmpty(): MutableOrEmptyList = - if (isEmpty()) MutableOrEmptyList() else MutableOrEmptyList(this) + if (isEmpty()) MutableOrEmptyList.empty() else MutableOrEmptyList(this) @JvmName("toMutableOrEmptyForImmutable") fun List.toMutableOrEmpty(): MutableOrEmptyList = - if (isEmpty()) MutableOrEmptyList() else MutableOrEmptyList(this.toMutableList()) + if (isEmpty()) MutableOrEmptyList.empty() else MutableOrEmptyList(this.toMutableList()) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index d49ac6b8e04..248f4321916 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -61,7 +61,7 @@ abstract class FirDefaultPropertyAccessor( symbol, propertySymbol, isGetter, - annotations = MutableOrEmptyList(), + annotations = MutableOrEmptyList.empty(), typeParameters = mutableListOf(), ) { override val dispatchReceiverType: ConeSimpleKotlinType? diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt index 912405c5a51..161e0d0c57b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt @@ -25,7 +25,7 @@ class FirSingleExpressionBlock( ) : FirBlock() { override val source: KtSourceElement? get() = statement.source?.fakeElement(KtFakeSourceElementKind.SingleExpressionBlock) - override var annotations: MutableOrEmptyList = MutableOrEmptyList() + override var annotations: MutableOrEmptyList = MutableOrEmptyList.empty() override val statements: List get() = listOf(statement) override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt index b3d76d2c485..3599ccc34a5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt @@ -32,7 +32,7 @@ internal class FirErrorTypeRefImpl( isFromStubType ) - override val annotations: MutableOrEmptyList = MutableOrEmptyList() + override val annotations: MutableOrEmptyList = MutableOrEmptyList.empty() override fun acceptChildren(visitor: FirVisitor, data: D) { annotations.forEach { it.accept(visitor, data) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index b497aa2c8a9..4ad27f4f463 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -195,7 +195,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(errorLoop) { default("block", "FirEmptyExpressionBlock()") - default("condition", "FirErrorExpressionImpl(source, MutableOrEmptyList(), ConeStubDiagnostic(diagnostic), null, null)") + default("condition", "FirErrorExpressionImpl(source, MutableOrEmptyList.empty(), ConeStubDiagnostic(diagnostic), null, null)") useTypes(emptyExpressionBlock, coneStubDiagnosticType) }