From 6e709e4711fe4b82610d3389fa521c25c78b42ff Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 19 Jun 2018 15:55:24 +0700 Subject: [PATCH] FinalUtils: check that field is not accessed with invalid qualifier Fixes IDEA-193896 "Can be final" is not true --- .../src/com/siyeh/ig/psiutils/FinalUtils.java | 2 ++ .../igtest/style/field_final/FieldMayBeFinal.java | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FinalUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FinalUtils.java index 9047d2ff8258..e8d571ee0217 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FinalUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FinalUtils.java @@ -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; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/style/field_final/FieldMayBeFinal.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/style/field_final/FieldMayBeFinal.java index 684d32d4dac5..f0213c487407 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/style/field_final/FieldMayBeFinal.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/style/field_final/FieldMayBeFinal.java @@ -1083,4 +1083,12 @@ class T75 { private Inner() {innerField = 0;} } -} \ No newline at end of file +} +// IDEA-193896 +class T76 { + private T76 a; + T76(T76 other) { + a = other; + other.a = null; + } +}