diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index e9850d52d56c..633e56abe24f 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -1249,12 +1249,6 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh PsiElement resolved = result.getElement(); if (resolved instanceof PsiVariable && resolved.getContainingFile() == expression.getContainingFile()) { - if (!myHolder.hasErrorResults()) { - try { - myHolder.add(HighlightControlFlowUtil.checkVariableInitializedBeforeUsage(expression, (PsiVariable)resolved, myUninitializedVarProblems,myFile)); - } - catch (IndexNotReadyException ignored) { } - } PsiVariable variable = (PsiVariable)resolved; boolean isFinal = variable.hasModifierProperty(PsiModifier.FINAL); if (isFinal && !variable.hasInitializer()) { @@ -1263,6 +1257,12 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh } if (!myHolder.hasErrorResults()) myHolder.add(HighlightControlFlowUtil.checkFinalVariableInitializedInLoop(expression, resolved)); } + if (!myHolder.hasErrorResults()) { + try { + myHolder.add(HighlightControlFlowUtil.checkVariableInitializedBeforeUsage(expression, (PsiVariable)resolved, myUninitializedVarProblems,myFile)); + } + catch (IndexNotReadyException ignored) { } + } } PsiElement parent = expression.getParent(); diff --git a/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowUtil.java b/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowUtil.java index d49f779aa9d5..38c152a4304a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowUtil.java @@ -1949,11 +1949,13 @@ public class ControlFlowUtil { @Nullable private static PsiElement getExpression(@NotNull PsiElement element) { - if (element instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)element).getLExpression() instanceof PsiReferenceExpression) { - return ((PsiAssignmentExpression)element).getLExpression(); + if (element instanceof PsiAssignmentExpression) { + PsiExpression target = PsiUtil.skipParenthesizedExprDown(((PsiAssignmentExpression)element).getLExpression()); + return ObjectUtils.tryCast(target, PsiReferenceExpression.class); } else if (element instanceof PsiUnaryExpression) { - return ((PsiUnaryExpression)element).getOperand(); + PsiExpression target = PsiUtil.skipParenthesizedExprDown(((PsiUnaryExpression)element).getOperand()); + return ObjectUtils.tryCast(target, PsiReferenceExpression.class); } else if (element instanceof PsiDeclarationStatement) { //should not happen diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java index a9d6d0f91d65..00326b165ad0 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java @@ -130,4 +130,16 @@ class T29a { if (j > 0) break; } while (b == 1); } -} \ No newline at end of file +} +class TX { + private final int i; + private final int j; + private final int k; + TX() { + (i) = 1; + (i) = 1; + (j) = 1; + (j)++; + (k)++; + } +}