FIR, Assign plugin: Update for KT-54648
This commit is contained in:
committed by
Space Team
parent
1eb18f13bd
commit
63a908cff8
+5
-6
@@ -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.FirFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.upperBoundIfFlexible
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
|
|
||||||
class FirAssignmentPluginAssignAltererExtension(
|
class FirAssignmentPluginAssignAltererExtension(
|
||||||
@@ -34,7 +33,7 @@ class FirAssignmentPluginAssignAltererExtension(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirVariableAssignment.supportsTransformVariableAssignment(): Boolean {
|
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 FirPropertySymbol -> lSymbol.isVal && !lSymbol.isLocal && lSymbol.hasSpecialAnnotation()
|
||||||
is FirBackingFieldSymbol -> lSymbol.isVal && lSymbol.hasSpecialAnnotation()
|
is FirBackingFieldSymbol -> lSymbol.isVal && lSymbol.hasSpecialAnnotation()
|
||||||
is FirFieldSymbol -> lSymbol.isVal && lSymbol.hasSpecialAnnotation()
|
is FirFieldSymbol -> lSymbol.isVal && lSymbol.hasSpecialAnnotation()
|
||||||
@@ -46,7 +45,7 @@ class FirAssignmentPluginAssignAltererExtension(
|
|||||||
session.annotationMatchingService.isAnnotated(resolvedReturnType.upperBoundIfFlexible().toRegularClassSymbol(session))
|
session.annotationMatchingService.isAnnotated(resolvedReturnType.upperBoundIfFlexible().toRegularClassSymbol(session))
|
||||||
|
|
||||||
private fun buildFunctionCall(variableAssignment: FirVariableAssignment): FirFunctionCall {
|
private fun buildFunctionCall(variableAssignment: FirVariableAssignment): FirFunctionCall {
|
||||||
val leftArgument = variableAssignment.lValue
|
val leftArgument = variableAssignment.calleeReference!!
|
||||||
val leftSymbol = leftArgument.toResolvedVariableSymbol()!!
|
val leftSymbol = leftArgument.toResolvedVariableSymbol()!!
|
||||||
val leftResolvedType = leftSymbol.resolvedReturnTypeRef
|
val leftResolvedType = leftSymbol.resolvedReturnTypeRef
|
||||||
val rightArgument = variableAssignment.rValue
|
val rightArgument = variableAssignment.rValue
|
||||||
@@ -55,8 +54,8 @@ class FirAssignmentPluginAssignAltererExtension(
|
|||||||
explicitReceiver = buildPropertyAccessExpression {
|
explicitReceiver = buildPropertyAccessExpression {
|
||||||
source = leftArgument.source
|
source = leftArgument.source
|
||||||
typeRef = leftResolvedType
|
typeRef = leftResolvedType
|
||||||
calleeReference = variableAssignment.calleeReference
|
calleeReference = leftArgument
|
||||||
typeArguments += variableAssignment.typeArguments
|
(variableAssignment.lValue as? FirQualifiedAccessExpression)?.typeArguments?.let(typeArguments::addAll)
|
||||||
annotations += variableAssignment.annotations
|
annotations += variableAssignment.annotations
|
||||||
explicitReceiver = variableAssignment.explicitReceiver
|
explicitReceiver = variableAssignment.explicitReceiver
|
||||||
dispatchReceiver = variableAssignment.dispatchReceiver
|
dispatchReceiver = variableAssignment.dispatchReceiver
|
||||||
|
|||||||
@@ -50,6 +50,6 @@ fun `should not effect error reporting for other operators`() {
|
|||||||
task<!NO_SET_METHOD!>[0]<!> = StringProperty("Fail")
|
task<!NO_SET_METHOD!>[0]<!> = StringProperty("Fail")
|
||||||
|
|
||||||
// a.get(i) = b should not be translated to a.get(i).assign(b)
|
// a.get(i) = b should not be translated to a.get(i).assign(b)
|
||||||
task.<!FUNCTION_CALL_EXPECTED!>get<!>(0) = StringProperty("Fail")
|
task.<!VARIABLE_EXPECTED!>get(0)<!> = StringProperty("Fail")
|
||||||
nullTask?.<!FUNCTION_CALL_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.valInput <!UNRESOLVED_REFERENCE!>+=<!> "K"
|
||||||
task.varInput <!UNRESOLVED_REFERENCE!>+=<!> "K"
|
task.varInput <!UNRESOLVED_REFERENCE!>+=<!> "K"
|
||||||
|
|
||||||
task.<!VAL_REASSIGNMENT!>valInputWithPlus<!> += "K"
|
task.valInputWithPlus += "K"
|
||||||
|
|
||||||
task.varInputWithPlusAndPlusAssign <!ASSIGN_OPERATOR_AMBIGUITY!>+=<!> "K"
|
task.varInputWithPlusAndPlusAssign <!ASSIGN_OPERATOR_AMBIGUITY!>+=<!> "K"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user