FinalUtils: check that field is not accessed with invalid qualifier

Fixes IDEA-193896 "Can be final" is not true
This commit is contained in:
Tagir Valeev
2018-06-19 15:57:57 +07:00
parent ce6f595891
commit 6e709e4711
2 changed files with 11 additions and 1 deletions
@@ -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;
@@ -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;
}
}