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