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)++;
+ }
+}