mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
FinalUtils: check that field is not accessed with invalid qualifier
Fixes IDEA-193896 "Can be final" is not true
This commit is contained in:
+2
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.controlFlow.ControlFlowUtil;
|
||||
import com.intellij.psi.controlFlow.LocalsOrMyInstanceFieldsControlFlowPolicy;
|
||||
import com.intellij.psi.search.PsiElementProcessor;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -54,6 +55,7 @@ public class FinalUtils {
|
||||
.checkVariableInitializedBeforeUsage(ref, variable, uninitializedVarProblems, variable.getContainingFile(), true);
|
||||
if (highlightInfo != null) return false;
|
||||
if (!PsiUtil.isAccessedForWriting(ref)) return true;
|
||||
if (!LocalsOrMyInstanceFieldsControlFlowPolicy.isLocalOrMyInstanceReference(ref)) return false;
|
||||
if (ControlFlowUtil.isVariableAssignedInLoop(ref, variable)) return false;
|
||||
if (variable instanceof PsiField) {
|
||||
if (PsiUtil.findEnclosingConstructorOrInitializer(ref) == null) return false;
|
||||
|
||||
+9
-1
@@ -1083,4 +1083,12 @@ class T75 {
|
||||
|
||||
private Inner() {innerField = 0;}
|
||||
}
|
||||
}
|
||||
}
|
||||
// IDEA-193896
|
||||
class T76 {
|
||||
private T76 a;
|
||||
T76(T76 other) {
|
||||
a = other;
|
||||
other.a = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user