diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 306c0f4f0e3..495cc4cf087 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -449,9 +449,7 @@ class DeclarationsConverter( annotations += modifiers.annotations typeParameters += firTypeParameters - context.applyToActualCapturedTypeParameters(true) { - typeParameters += buildOuterClassTypeParameterRef { symbol = it } - } + context.appendOuterTypeParameters(ignoreLastLevel = true, typeParameters) val selfType = classNode.toDelegatedSelfType(this) registerSelfType(selfType) @@ -588,9 +586,7 @@ class DeclarationsConverter( scopeProvider = baseScopeProvider symbol = FirAnonymousObjectSymbol() status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL) - context.applyToActualCapturedTypeParameters(false) { - typeParameters += buildOuterClassTypeParameterRef { this.symbol = it } - } + context.appendOuterTypeParameters(ignoreLastLevel = false, typeParameters) val delegatedSelfType = objectLiteral.toDelegatedSelfType(this) registerSelfType(delegatedSelfType) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 7aa553ab10a..8e514926e3d 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1058,9 +1058,7 @@ open class RawFirBuilder( classOrObject.extractAnnotationsTo(this) classOrObject.extractTypeParametersTo(this, symbol) - context.applyToActualCapturedTypeParameters(true) { - typeParameters += buildOuterClassTypeParameterRef { symbol = it } - } + context.appendOuterTypeParameters(ignoreLastLevel = true, typeParameters) context.pushFirTypeParameters( status.isInner, typeParameters.subList(0, classOrObject.typeParameters.size) @@ -1158,9 +1156,7 @@ open class RawFirBuilder( scopeProvider = baseScopeProvider symbol = FirAnonymousObjectSymbol() status = FirDeclarationStatusImpl(Visibilities.Local, Modality.FINAL) - context.applyToActualCapturedTypeParameters(false) { - typeParameters += buildOuterClassTypeParameterRef { symbol = it } - } + context.appendOuterTypeParameters(ignoreLastLevel = false, typeParameters) val delegatedSelfType = objectDeclaration.toDelegatedSelfType(this) registerSelfType(delegatedSelfType) objectDeclaration.extractAnnotationsTo(this) diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/Context.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/Context.kt index 0af186c72e0..246d165f71f 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/Context.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/Context.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirLabel import org.jetbrains.kotlin.fir.FirLoopTarget import org.jetbrains.kotlin.fir.PrivateForInline import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef +import org.jetbrains.kotlin.fir.declarations.builder.buildOuterClassTypeParameterRef import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.ConeClassLikeType @@ -57,13 +58,13 @@ class Context { list.removeAt(list.lastIndex) } - inline fun applyToActualCapturedTypeParameters(ignoreLastLevel: Boolean, action: (FirTypeParameterSymbol) -> Unit) { + fun appendOuterTypeParameters(ignoreLastLevel: Boolean, typeParameters: MutableList) { for (index in capturedTypeParameters.lastIndex downTo 0) { val element = capturedTypeParameters[index] if (index < capturedTypeParameters.lastIndex || !ignoreLastLevel) { for (capturedTypeParameter in element.list) { - action(capturedTypeParameter) + typeParameters += buildOuterClassTypeParameterRef { symbol = capturedTypeParameter } } }