diff --git a/java/java-impl/src/com/intellij/codeInspection/inferNullity/NullityInferrer.java b/java/java-impl/src/com/intellij/codeInspection/inferNullity/NullityInferrer.java index 46b0c784876b..16a5b37803f9 100644 --- a/java/java-impl/src/com/intellij/codeInspection/inferNullity/NullityInferrer.java +++ b/java/java-impl/src/com/intellij/codeInspection/inferNullity/NullityInferrer.java @@ -197,6 +197,10 @@ public class NullityInferrer { neverNull = expressionIsNeverNull(expression.getRExpression()); } + @Override + public void visitAssertStatement(PsiAssertStatement statement) { + } + @Override public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) { final PsiExpression condition = expression.getCondition(); @@ -299,6 +303,10 @@ public class NullityInferrer { sometimesNull = expressionIsSometimesNull(expression.getRExpression()); } + @Override + public void visitAssertStatement(PsiAssertStatement statement) { + } + @Override public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) { final PsiExpression condition = expression.getCondition(); @@ -534,6 +542,12 @@ public class NullityInferrer { opposite = lOperand; } if (opposite != null && opposite.getType() == PsiType.NULL) { + if (parent.getParent() instanceof PsiAssertStatement) { + if (((PsiBinaryExpression)parent).getOperationTokenType() == JavaTokenType.NE) { + registerNotNullAnnotation(parameter); + return true; + } + } registerNullableAnnotation(parameter); return true; } diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterAssertParamNotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterAssertParamNotNull.java new file mode 100644 index 000000000000..b46a0beb43d9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterAssertParamNotNull.java @@ -0,0 +1,14 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + @NotNull + public String noNull(@NotNull String text) { + assert text != null; + return ""; + } + + private void foo() { + @NotNull String str = ""; + assert str != null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeAssertParamNotNull.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeAssertParamNotNull.java new file mode 100644 index 000000000000..ef4a89c56066 --- /dev/null +++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeAssertParamNotNull.java @@ -0,0 +1,11 @@ +class Test { + public String noNull(String text) { + assert text != null; + return ""; + } + + private void foo() { + String str = ""; + assert str != null; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/NullityInferrerTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/NullityInferrerTest.java index 322ace251ae1..ccb879aea866 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/NullityInferrerTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/NullityInferrerTest.java @@ -62,6 +62,10 @@ public class NullityInferrerTest extends CodeInsightTestCase { doTest(false); } + public void testAssertParamNotNull() throws Exception { + doTest(true); + } + //-----------------------fields--------------------------------------------------- public void testFieldsAssignment() throws Exception { doTest(false);