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 1878c359774..d92424a7b17 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 @@ -49,6 +49,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.SpecialNames +import org.jetbrains.kotlin.utils.addToStdlib.runIf class DeclarationsConverter( session: FirSession, @@ -1187,7 +1188,7 @@ class DeclarationsConverter( val parentNode = functionDeclaration.getParent() val isLocal = !(parentNode?.tokenType == KT_FILE || parentNode?.tokenType == CLASS_BODY) val target: FirFunctionTarget - val functionBuilder = if (identifier == null) { + val functionBuilder = if (identifier == null && isLocal) { target = FirFunctionTarget(labelName = functionDeclaration.getLabelName(), isLambda = false) FirAnonymousFunctionBuilder().apply { source = functionDeclaration.toFirSourceElement() @@ -1197,7 +1198,8 @@ class DeclarationsConverter( } } else { val functionName = identifier.nameAsSafeName() - target = FirFunctionTarget(labelName = functionName.identifier, isLambda = false) + val labelName = runIf(!functionName.isSpecial) { functionName.identifier } + target = FirFunctionTarget(labelName, isLambda = false) FirSimpleFunctionBuilder().apply { source = functionDeclaration.toFirSourceElement() receiverTypeRef = receiverType 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 7ffecfd5635..08e74664f53 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 @@ -45,6 +45,7 @@ import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.utils.addToStdlib.runIf import kotlin.collections.contains class RawFirBuilder( @@ -824,8 +825,8 @@ class RawFirBuilder( val receiverType = function.receiverTypeReference.convertSafe() val labelName: String? - - val functionBuilder = if (function.name == null) { + val functionIsAnonymousFunction = function.name == null && !function.parent.let { it is KtFile || it is KtClassBody } + val functionBuilder = if (functionIsAnonymousFunction) { FirAnonymousFunctionBuilder().apply { receiverTypeRef = receiverType symbol = FirAnonymousFunctionSymbol() @@ -836,7 +837,7 @@ class RawFirBuilder( FirSimpleFunctionBuilder().apply { receiverTypeRef = receiverType name = function.nameAsSafeName - labelName = name.identifier + labelName = runIf(!name.isSpecial) { name.identifier } symbol = FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName, function.isLocal)) status = FirDeclarationStatusImpl( if (function.isLocal) Visibilities.LOCAL else function.visibility,