[FIR] Don't convert non-local functions without name as FirAnonymousFunction
This commit is contained in:
+4
-2
@@ -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
|
||||
|
||||
@@ -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<FirTypeRef>()
|
||||
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user