diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java index 76d0be269059..65b5e61b28a7 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java @@ -30,6 +30,7 @@ import com.intellij.codeInspection.dataFlow.DfaPsiUtil; import com.intellij.codeInspection.dataFlow.Nullness; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Trinity; +import com.intellij.patterns.ElementPattern; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; @@ -40,8 +41,13 @@ import org.jetbrains.annotations.Nullable; import java.util.List; +import static com.intellij.patterns.PsiJavaPatterns.*; + public class DfaVariableValue extends DfaValue { + private static final ElementPattern MEMBER_OR_METHOD_PARAMETER = + or(psiMember(), psiParameter().withSuperParent(2, psiMember())); + public static class Factory { private final MultiMap,DfaVariableValue> myExistingVars = new MultiMap, DfaVariableValue>(); private final DfaValueFactory myFactory; @@ -165,7 +171,7 @@ public class DfaVariableValue extends DfaValue { return nullability; } - Nullness defaultNullability = var instanceof PsiMember && myFactory.isUnknownMembersAreNullable() ? Nullness.NULLABLE : Nullness.UNKNOWN; + Nullness defaultNullability = myFactory.isUnknownMembersAreNullable() && MEMBER_OR_METHOD_PARAMETER.accepts(var) ? Nullness.NULLABLE : Nullness.UNKNOWN; if (var instanceof PsiParameter && var.getParent() instanceof PsiForeachStatement) { PsiExpression iteratedValue = ((PsiForeachStatement)var.getParent()).getIteratedValue(); 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 e383b6a4e89a..d7ec7920d09b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspection.java @@ -117,7 +117,7 @@ public class DataFlowInspection extends DataFlowInspectionBase { } }); - myTreatUnknownMembersAsNullable = new JCheckBox("Treat non-annotated methods and fields as @Nullable"); + myTreatUnknownMembersAsNullable = new JCheckBox("Treat non-annotated members and parameters as @Nullable"); myTreatUnknownMembersAsNullable.setSelected(TREAT_UNKNOWN_MEMBERS_AS_NULLABLE); myTreatUnknownMembersAsNullable.getModel().addChangeListener(new ChangeListener() { @Override diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java b/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java index 96448a4d0d95..792d7a1de5b7 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java @@ -7,6 +7,10 @@ class Test { o.hashCode(); } + void parameter(Object o) { + o.hashCode(); + } + void callUnknownMethod() { unknownObject().hashCode(); }