[FIR] Fix some source elements in light tree fir builder

This commit is contained in:
Dmitriy Novozhilov
2020-03-23 20:21:43 +03:00
parent 84ed3f5cf2
commit badd156def
@@ -236,6 +236,7 @@ class ExpressionsConverter(
buildFunctionCall { buildFunctionCall {
source = binaryExpression.toFirSourceElement() source = binaryExpression.toFirSourceElement()
calleeReference = buildSimpleNamedReference { calleeReference = buildSimpleNamedReference {
source = this@buildFunctionCall.source
name = conventionCallName ?: operationTokenName.nameAsSafeName() name = conventionCallName ?: operationTokenName.nameAsSafeName()
} }
explicitReceiver = leftArgAsFir explicitReceiver = leftArgAsFir
@@ -342,7 +343,10 @@ class ExpressionsConverter(
} }
buildFunctionCall { buildFunctionCall {
source = unaryExpression.toFirSourceElement() source = unaryExpression.toFirSourceElement()
calleeReference = buildSimpleNamedReference { name = conventionCallName } calleeReference = buildSimpleNamedReference {
source = this@buildFunctionCall.source
name = conventionCallName
}
explicitReceiver = getAsFirExpression(argument, "No operand") explicitReceiver = getAsFirExpression(argument, "No operand")
} }
} }
@@ -495,26 +499,38 @@ class ExpressionsConverter(
process(child) process(child)
} }
val source = callSuffix.toFirSourceElement()
val (calleeReference, explicitReceiver) = when { val (calleeReference, explicitReceiver) = when {
name != null -> buildSimpleNamedReference { this.name = name.nameAsSafeName() } to null name != null -> buildSimpleNamedReference {
this.source = source
this.name = name.nameAsSafeName()
} to null
additionalArgument != null -> { additionalArgument != null -> {
buildSimpleNamedReference { this.name = OperatorNameConventions.INVOKE } to additionalArgument!! buildSimpleNamedReference {
this.source = source
this.name = OperatorNameConventions.INVOKE
} to additionalArgument!!
} }
superNode != null -> { superNode != null -> {
buildErrorNamedReference { buildErrorNamedReference {
val node = superNode!! val node = superNode!!
source = node.toFirSourceElement() this.source = node.toFirSourceElement()
diagnostic = ConeSimpleDiagnostic("Super cannot be a callee", DiagnosticKind.SuperNotAllowed) diagnostic = ConeSimpleDiagnostic("Super cannot be a callee", DiagnosticKind.SuperNotAllowed)
} to null } to null
} }
else -> buildErrorNamedReference { else -> buildErrorNamedReference {
this.source = source
diagnostic = ConeSimpleDiagnostic("Call has no callee", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Call has no callee", DiagnosticKind.Syntax)
} to null } to null
} }
val builder: FirQualifiedAccessBuilder = if (hasArguments) { val builder: FirQualifiedAccessBuilder = if (hasArguments) {
FirFunctionCallBuilder().apply { FirFunctionCallBuilder().apply {
source = callSuffix.toFirSourceElement() this.source = source
this.calleeReference = calleeReference this.calleeReference = calleeReference
context.firFunctionCalls += this context.firFunctionCalls += this
@@ -523,7 +539,7 @@ class ExpressionsConverter(
} }
} else { } else {
FirQualifiedAccessExpressionBuilder().apply { FirQualifiedAccessExpressionBuilder().apply {
source = callSuffix.toFirSourceElement() this.source = source
this.calleeReference = calleeReference this.calleeReference = calleeReference
} }
} }
@@ -745,6 +761,7 @@ class ExpressionsConverter(
return buildFunctionCall { return buildFunctionCall {
source = arrayAccess.toFirSourceElement() source = arrayAccess.toFirSourceElement()
calleeReference = buildSimpleNamedReference { calleeReference = buildSimpleNamedReference {
source = this@buildFunctionCall.source
name = if (getArgument == null) OperatorNameConventions.GET else OperatorNameConventions.SET name = if (getArgument == null) OperatorNameConventions.GET else OperatorNameConventions.SET
} }
explicitReceiver = firExpression explicitReceiver = firExpression
@@ -791,7 +808,10 @@ class ExpressionsConverter(
private fun convertSimpleNameExpression(referenceExpression: LighterASTNode): FirQualifiedAccessExpression { private fun convertSimpleNameExpression(referenceExpression: LighterASTNode): FirQualifiedAccessExpression {
return buildQualifiedAccessExpression { return buildQualifiedAccessExpression {
source = referenceExpression.toFirSourceElement() source = referenceExpression.toFirSourceElement()
calleeReference = buildSimpleNamedReference { name = referenceExpression.asText.nameAsSafeName() } calleeReference = buildSimpleNamedReference {
source = this@buildQualifiedAccessExpression.source
name = referenceExpression.asText.nameAsSafeName()
}
} }
} }