From 819b68ec8140a7bf83eaca1e31c3817d3735c688 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 Jun 2012 21:59:21 +0200 Subject: [PATCH] fix false NPE alarms on fields --- .../codeInspection/dataFlow/DfaVariableState.java | 4 ++-- .../FinalFieldsInitializedByAnnotatedParameters.java | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaVariableState.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaVariableState.java index ae8c86692207..71c2da6cf150 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaVariableState.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaVariableState.java @@ -59,7 +59,7 @@ public class DfaVariableState implements Cloneable { } List initializers = NullableStuffInspection.findAllConstructorInitializers((PsiField)var); - if (!nullable && initializers.isEmpty()) { + if (initializers.isEmpty()) { return false; } @@ -78,7 +78,7 @@ public class DfaVariableState implements Cloneable { return false; } } - return true; + return !nullable; } protected DfaVariableState(final DfaVariableState toClone) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java b/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java index d06035d16656..db7d0b479d1f 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/FinalFieldsInitializedByAnnotatedParameters.java @@ -1,15 +1,24 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.lang.Object; + public class Doo { private final Object myA; private final Object myB; + private final Object myC; - public Doo(@Nullable Object myA, @NotNull Object myB) { + public Doo(@Nullable Object myA, @NotNull Object myB, Object c) { this.myA = myA; this.myB = myB; + myC = c; } + int bar() { + return myC.hashCode(); + } + + int foo() { if (myB != null && myA.equals(myB)) {