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 4304f63d6c05..41172013718e 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 @@ -321,15 +321,16 @@ public class HighlightControlFlowUtil { return null; } final PsiField anotherField = PsiTreeUtil.getTopmostParentOfType(expression, PsiField.class); + int offset = startOffset; if (anotherField != null && anotherField.getContainingClass() == aClass && !field.hasModifierProperty(PsiModifier.STATIC)) { - startOffset = 0; + offset = 0; } block = null; // initializers will be checked later final PsiMethod[] constructors = aClass.getConstructors(); for (PsiMethod constructor : constructors) { // variable must be initialized before its usage - if (startOffset < constructor.getTextRange().getStartOffset()) continue; + if (offset < constructor.getTextRange().getStartOffset()) continue; PsiCodeBlock body = constructor.getBody(); if (body != null && variableDefinitelyAssignedIn(variable, body)) { return null; @@ -339,7 +340,7 @@ public class HighlightControlFlowUtil { for (int j = 0; redirectedConstructors != null && j < redirectedConstructors.size(); j++) { PsiMethod redirectedConstructor = redirectedConstructors.get(j); // variable must be initialized before its usage - if (startOffset < redirectedConstructor.getTextRange().getStartOffset()) continue; + if (offset < redirectedConstructor.getTextRange().getStartOffset()) continue; PsiCodeBlock redirBody = redirectedConstructor.getBody(); if (redirBody != null && variableDefinitelyAssignedIn(variable, redirBody)) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java index 16f89fd887cd..560e595affd5 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/FinalFieldInit.java @@ -259,4 +259,21 @@ class StaticInitializerUsedInAnotherStaticField { } private static final int ourEnumerationCacheConstant = ENUMERATION_CACHE_SIZE; +} + +class InitializedInClassInitializerUsedInTheFollowingFieldInitializer { + private final int i; + { + i = 0; + } + + private int j = i; + + private final int k; + + private int l = k; + + { + k = 1; + } } \ No newline at end of file