summaryrefslogtreecommitdiff
path: root/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java')
-rw-r--r--java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java17
1 files changed, 10 insertions, 7 deletions
diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
index 602e3fea2cc2..a4ea7087af5a 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
@@ -696,14 +696,17 @@ public class HighlightControlFlowUtil {
return true;
}
- if (ControlFlowUtil.isVariableDefinitelyAssigned(variable, controlFlow)) {
- final Collection<ControlFlowUtil.VariableInfo> initializedTwice = ControlFlowUtil.getInitializedTwice(controlFlow);
- effectivelyFinal = !initializedTwice.contains(new ControlFlowUtil.VariableInfo(variable, null));
- if (effectivelyFinal) {
- effectivelyFinal = notAccessedForWriting(variable, new LocalSearchScope(scope));
+ final List<PsiReferenceExpression> readBeforeWriteLocals = ControlFlowUtil.getReadBeforeWriteLocals(controlFlow);
+ for (PsiReferenceExpression expression : readBeforeWriteLocals) {
+ if (expression.resolve() == variable) {
+ return PsiUtil.isAccessedForReading(expression);
}
- } else {
- effectivelyFinal = false;
+ }
+
+ final Collection<ControlFlowUtil.VariableInfo> initializedTwice = ControlFlowUtil.getInitializedTwice(controlFlow);
+ effectivelyFinal = !initializedTwice.contains(new ControlFlowUtil.VariableInfo(variable, null));
+ if (effectivelyFinal) {
+ effectivelyFinal = notAccessedForWriting(variable, new LocalSearchScope(scope));
}
}
return effectivelyFinal;