diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java index 2045cfd181ca..e28ff4a89c90 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java @@ -48,28 +48,6 @@ public class DfaPsiUtil { return var.hasModifierProperty(PsiModifier.FINAL) && !var.hasModifierProperty(PsiModifier.TRANSIENT) && var instanceof PsiField; } - static PsiElement getEnclosingCodeBlock(final PsiVariable variable, final PsiElement context) { - PsiElement codeBlock; - if (variable instanceof PsiParameter) { - codeBlock = ((PsiParameter)variable).getDeclarationScope(); - if (codeBlock instanceof PsiMethod) { - codeBlock = ((PsiMethod)codeBlock).getBody(); - } - } - else if (variable instanceof PsiLocalVariable) { - codeBlock = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class); - } - else { - codeBlock = getTopmostBlockInSameClass(context); - } - while (codeBlock != null) { - PsiAnonymousClass anon = PsiTreeUtil.getParentOfType(codeBlock, PsiAnonymousClass.class); - if (anon == null) break; - codeBlock = PsiTreeUtil.getParentOfType(anon, PsiCodeBlock.class); - } - return codeBlock; - } - @NotNull public static Nullability getElementNullability(@Nullable PsiType resultType, @Nullable PsiModifierListOwner owner) { return getElementNullability(resultType, owner, false); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java index 67387d5c2429..173d964863d1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java @@ -36,7 +36,7 @@ public class DfaUtil { public static @NotNull Collection getVariableValues(@Nullable PsiVariable variable, @Nullable PsiElement context) { if (variable == null || context == null) return Collections.emptyList(); - final PsiCodeBlock codeBlock = tryCast(DfaPsiUtil.getEnclosingCodeBlock(variable, context), PsiCodeBlock.class); + final PsiCodeBlock codeBlock = tryCast(getEnclosingCodeBlock(variable, context), PsiCodeBlock.class); if (codeBlock == null) return Collections.emptyList(); PsiElement[] defs = DefUseUtil.getDefs(codeBlock, variable, context); @@ -58,6 +58,28 @@ public class DfaUtil { return results; } + private static PsiElement getEnclosingCodeBlock(final PsiVariable variable, final PsiElement context) { + PsiElement codeBlock; + if (variable instanceof PsiParameter) { + codeBlock = ((PsiParameter)variable).getDeclarationScope(); + if (codeBlock instanceof PsiMethod) { + codeBlock = ((PsiMethod)codeBlock).getBody(); + } + } + else if (variable instanceof PsiLocalVariable) { + codeBlock = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class); + } + else { + codeBlock = DfaPsiUtil.getTopmostBlockInSameClass(context); + } + while (codeBlock != null) { + PsiAnonymousClass anon = PsiTreeUtil.getParentOfType(codeBlock, PsiAnonymousClass.class); + if (anon == null) break; + codeBlock = PsiTreeUtil.getParentOfType(anon, PsiCodeBlock.class); + } + return codeBlock; + } + private static PsiExpression unrollConcatenation(PsiAssignmentExpression assignment, PsiVariable variable, PsiCodeBlock block) { List operands = new ArrayList<>(); while (true) {