diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java
index 6cae58f89a74..9af352809c3b 100644
--- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java
+++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java
@@ -226,6 +226,14 @@ class ControlFlowAnalyzer extends JavaElementVisitor {
finishElement(statement);
}
+ @Override
+ public void visitField(PsiField field) {
+ PsiExpression initializer = field.getInitializer();
+ if (initializer != null) {
+ initializeVariable(field, initializer);
+ }
+ }
+
private void initializeVariable(PsiVariable variable, PsiExpression initializer) {
DfaVariableValue dfaVariable = myFactory.getVarFactory().createVariableValue(variable, false);
addInstruction(new PushInstruction(dfaVariable, initializer));
diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspection.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspection.java
index abffef643418..4cc604c555b5 100644
--- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspection.java
+++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspection.java
@@ -75,9 +75,7 @@ public class DataFlowInspection extends BaseLocalInspectionTool {
return new JavaElementVisitor() {
@Override
public void visitField(PsiField field) {
- if (isNullLiteralExpression(field.getInitializer()) && NullableNotNullManager.isNotNull(field)) {
- holder.registerProblem(field.getInitializer(), InspectionsBundle.message("dataflow.message.initializing.field.with.null"));
- }
+ analyzeCodeBlock(field, holder);
}
@Override
@@ -92,19 +90,19 @@ public class DataFlowInspection extends BaseLocalInspectionTool {
};
}
- private void analyzeCodeBlock(final PsiCodeBlock body, ProblemsHolder holder) {
- if (body == null) return;
+ private void analyzeCodeBlock(@Nullable final PsiElement scope, ProblemsHolder holder) {
+ if (scope == null) return;
final StandardDataFlowRunner dfaRunner = new StandardDataFlowRunner(SUGGEST_NULLABLE_ANNOTATIONS);
final StandardInstructionVisitor visitor = new DataFlowInstructionVisitor();
- final RunnerResult rc = dfaRunner.analyzeMethod(body, visitor);
+ final RunnerResult rc = dfaRunner.analyzeMethod(scope, visitor);
if (rc == RunnerResult.OK) {
if (dfaRunner.problemsDetected(visitor)) {
createDescription(dfaRunner, holder, visitor);
}
}
else if (rc == RunnerResult.TOO_COMPLEX) {
- if (body.getParent() instanceof PsiMethod) {
- PsiMethod method = (PsiMethod)body.getParent();
+ if (scope.getParent() instanceof PsiMethod) {
+ PsiMethod method = (PsiMethod)scope.getParent();
final PsiIdentifier name = method.getNameIdentifier();
if (name != null) { // Might be null for synthetic methods like JSP page.
holder.registerProblem(name, InspectionsBundle.message("dataflow.too.complex"), ProblemHighlightType.WEAK_WARNING);
diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/CheckFieldInitializers.java b/java/java-tests/testData/inspection/dataFlow/fixture/CheckFieldInitializers.java
new file mode 100644
index 000000000000..e6a87ac88f76
--- /dev/null
+++ b/java/java-tests/testData/inspection/dataFlow/fixture/CheckFieldInitializers.java
@@ -0,0 +1,13 @@
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+
+class Foo {
+ @Nullable static Object foo() { return null; }
+ static String bar(@NotNull Object arg) { return ""; }
+}
+class Bar {
+ public static final String s = Foo.bar(Foo.foo());
+ @NotNull public static Object o = Foo.foo();
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java
index 6d963c22e705..26b48acbcc94 100644
--- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java
@@ -126,4 +126,8 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas
myFixture.testHighlighting(true, false, true, getTestName(false) + ".java");
}
+ public void testCheckFieldInitializers() {
+ doTest();
+ }
+
}