FIR IDE: implement assignment statement references

This commit is contained in:
Ilya Kirillov
2021-01-07 17:34:36 +01:00
parent 14d2b1be49
commit e060778528
8 changed files with 88 additions and 4 deletions
@@ -256,7 +256,6 @@ object UnusedChecker : FirControlFlowChecker() {
vararg qualifiedAccesses: FirQualifiedAccess,
): PathAwareVariableStatusInfo {
fun retrieveSymbol(qualifiedAccess: FirQualifiedAccess): FirPropertySymbol? {
if (qualifiedAccess.source?.kind is FirFakeSourceElementKind) return null
val reference = qualifiedAccess.calleeReference as? FirResolvedNamedReference ?: return null
val symbol = reference.resolvedSymbol as? FirPropertySymbol ?: return null
return if (symbol !in localProperties) null else symbol
@@ -873,8 +873,9 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
return buildAssignmentOperatorStatement {
source = baseSource
this.operation = operation
// TODO: take good psi
leftArgument = this@generateAssignment?.convert() ?: buildErrorExpression {
leftArgument = withDefaultSourceElementKind(FirFakeSourceElementKind.DesugaredCompoundAssignment) {
this@generateAssignment?.convert()
} ?: buildErrorExpression {
source = null
diagnostic = ConeSimpleDiagnostic(
"Unsupported left value of assignment: ${baseSource?.psi?.text}", DiagnosticKind.ExpressionRequired
@@ -353,7 +353,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
explicitReceiver = leftArgument
argumentList = buildUnaryArgumentList(rightArgument)
calleeReference = buildSimpleNamedReference {
source = assignmentOperatorStatement.source
source = assignmentOperatorStatement.source?.fakeElement(FirFakeSourceElementKind.DesugaredCompoundAssignment)
this.name = name
candidateSymbol = null
}