mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
HighlightControlFlowUtil: disable assignment to pattern variables
GitOrigin-RevId: 09c4aa42068ce0258543a17546404fcdec952404
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3fc9bf9589
commit
2380906af8
+13
-9
@@ -624,19 +624,23 @@ public class HighlightControlFlowUtil {
|
||||
}
|
||||
PsiReferenceExpression reference = ObjectUtils.tryCast(PsiUtil.skipParenthesizedExprDown(operand), PsiReferenceExpression.class);
|
||||
PsiVariable variable = reference == null ? null : ObjectUtils.tryCast(reference.resolve(), PsiVariable.class);
|
||||
if (variable == null || !variable.hasModifierProperty(PsiModifier.FINAL)) return null;
|
||||
final boolean canWrite = canWriteToFinal(variable, expression, reference, containingFile) && checkWriteToFinalInsideLambda(variable, reference) == null;
|
||||
if (canWrite) return null;
|
||||
if (!(variable instanceof PsiPatternVariable)) {
|
||||
if (variable == null || !variable.hasModifierProperty(PsiModifier.FINAL)) return null;
|
||||
final boolean canWrite = canWriteToFinal(variable, expression, reference, containingFile) && checkWriteToFinalInsideLambda(variable, reference) == null;
|
||||
if (canWrite) return null;
|
||||
}
|
||||
final String name = variable.getName();
|
||||
String description = JavaErrorMessages.message("assignment.to.final.variable", name);
|
||||
final HighlightInfo highlightInfo =
|
||||
HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(reference).descriptionAndTooltip(description).create();
|
||||
final PsiElement innerClass = getInnerClassVariableReferencedFrom(variable, expression);
|
||||
if (innerClass == null || variable instanceof PsiField) {
|
||||
HighlightFixUtil.registerMakeNotFinalAction(variable, highlightInfo);
|
||||
}
|
||||
else {
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createVariableAccessFromInnerClassFix(variable, innerClass));
|
||||
if (!(variable instanceof PsiPatternVariable)) {
|
||||
final PsiElement innerClass = getInnerClassVariableReferencedFrom(variable, expression);
|
||||
if (innerClass == null || variable instanceof PsiField) {
|
||||
HighlightFixUtil.registerMakeNotFinalAction(variable, highlightInfo);
|
||||
}
|
||||
else {
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createVariableAccessFromInnerClassFix(variable, innerClass));
|
||||
}
|
||||
}
|
||||
return highlightInfo;
|
||||
}
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class X {
|
||||
void expressions(Object obj) {
|
||||
if (obj instanceof String s) {
|
||||
<error descr="Cannot assign a value to final variable 's'">s</error> = "foo";
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -27,6 +27,9 @@ public class LightPatternsHighlightingTest extends LightJavaCodeInsightFixtureTe
|
||||
public void testInstanceOfControlFlow() {
|
||||
doTest();
|
||||
}
|
||||
public void testReassignPatternVariable() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java");
|
||||
|
||||
Reference in New Issue
Block a user