FIR, Assign plugin: Update for KT-54648

This commit is contained in:
Kirill Rakhman
2023-01-16 09:56:55 +01:00
committed by Space Team
parent 1eb18f13bd
commit 63a908cff8
3 changed files with 8 additions and 9 deletions
@@ -19,8 +19,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
import org.jetbrains.kotlin.fir.types.upperBoundIfFlexible
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.utils.addToStdlib.runIf
class FirAssignmentPluginAssignAltererExtension(
@@ -34,7 +33,7 @@ class FirAssignmentPluginAssignAltererExtension(
}
private fun FirVariableAssignment.supportsTransformVariableAssignment(): Boolean {
return when (val lSymbol = lValue.toResolvedVariableSymbol()) {
return when (val lSymbol = calleeReference?.toResolvedVariableSymbol()) {
is FirPropertySymbol -> lSymbol.isVal && !lSymbol.isLocal && lSymbol.hasSpecialAnnotation()
is FirBackingFieldSymbol -> lSymbol.isVal && lSymbol.hasSpecialAnnotation()
is FirFieldSymbol -> lSymbol.isVal && lSymbol.hasSpecialAnnotation()
@@ -46,7 +45,7 @@ class FirAssignmentPluginAssignAltererExtension(
session.annotationMatchingService.isAnnotated(resolvedReturnType.upperBoundIfFlexible().toRegularClassSymbol(session))
private fun buildFunctionCall(variableAssignment: FirVariableAssignment): FirFunctionCall {
val leftArgument = variableAssignment.lValue
val leftArgument = variableAssignment.calleeReference!!
val leftSymbol = leftArgument.toResolvedVariableSymbol()!!
val leftResolvedType = leftSymbol.resolvedReturnTypeRef
val rightArgument = variableAssignment.rValue
@@ -55,8 +54,8 @@ class FirAssignmentPluginAssignAltererExtension(
explicitReceiver = buildPropertyAccessExpression {
source = leftArgument.source
typeRef = leftResolvedType
calleeReference = variableAssignment.calleeReference
typeArguments += variableAssignment.typeArguments
calleeReference = leftArgument
(variableAssignment.lValue as? FirQualifiedAccessExpression)?.typeArguments?.let(typeArguments::addAll)
annotations += variableAssignment.annotations
explicitReceiver = variableAssignment.explicitReceiver
dispatchReceiver = variableAssignment.dispatchReceiver
@@ -50,6 +50,6 @@ fun `should not effect error reporting for other operators`() {
task<!NO_SET_METHOD!>[0]<!> = StringProperty("Fail")
// a.get(i) = b should not be translated to a.get(i).assign(b)
task.<!FUNCTION_CALL_EXPECTED!>get<!>(0) = StringProperty("Fail")
nullTask?.<!FUNCTION_CALL_EXPECTED!>get<!>(0) = StringProperty("Fail")
task.<!VARIABLE_EXPECTED!>get(0)<!> = StringProperty("Fail")
nullTask?.<!VARIABLE_EXPECTED!>get(0)<!> = StringProperty("Fail")
}
@@ -96,7 +96,7 @@ fun box(): String {
task.valInput <!UNRESOLVED_REFERENCE!>+=<!> "K"
task.varInput <!UNRESOLVED_REFERENCE!>+=<!> "K"
task.<!VAL_REASSIGNMENT!>valInputWithPlus<!> += "K"
task.valInputWithPlus += "K"
task.varInputWithPlusAndPlusAssign <!ASSIGN_OPERATOR_AMBIGUITY!>+=<!> "K"