FIR/FIR IDE: Use entire FirVariableAssignment when reporting UNSAFE_CALL
(e.g., `nullable.a = b`), and use positioning strategies to locate the dot in the LHS expression. Without it, only the callee reference is reported on, which makes the highlighting of the error and application of quickfixes incorrect in the IDE. Also fixed issue with annotated and/or labeled expressions on LHS of assignment (e.g., `(@Ann label@ i) = 34`).
This commit is contained in:
committed by
Ilya Kirillov
parent
1d9247ae0f
commit
d2b8204fdc
@@ -265,4 +265,5 @@ public interface KtTokens {
|
||||
|
||||
TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
|
||||
TokenSet ALL_ASSIGNMENTS = TokenSet.create(EQ, PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
|
||||
TokenSet INCREMENT_AND_DECREMENT = TokenSet.create(PLUSPLUS, MINUSMINUS);
|
||||
}
|
||||
|
||||
@@ -498,4 +498,16 @@ fun KtExpression.isNull(): Boolean {
|
||||
returns(true) implies (this@isNull is KtConstantExpression)
|
||||
}
|
||||
return this is KtConstantExpression && this.node.elementType == KtNodeTypes.NULL
|
||||
}
|
||||
}
|
||||
|
||||
fun PsiElement?.unwrapParenthesesLabelsAndAnnotations(): PsiElement? {
|
||||
var unwrapped = this
|
||||
while (true) {
|
||||
unwrapped = when (unwrapped) {
|
||||
is KtParenthesizedExpression -> unwrapped.expression
|
||||
is KtLabeledExpression -> unwrapped.baseExpression
|
||||
is KtAnnotatedExpression -> unwrapped.baseExpression
|
||||
else -> return unwrapped
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user