From b4f660521a401e97d2399f22d3e3ac7a1afc1c79 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 20 Jan 2011 16:59:53 +0100 Subject: [PATCH] infer nullity: skip () and type casts correctly (IDEA-64419) --- .../codeInspection/inferNullity/NullityInferrer.java | 12 +++++++++++- .../nullityinferrer/afterParameterDereferenced.java | 8 ++++++++ .../nullityinferrer/beforeParameterDereferenced.java | 8 ++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) 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 4454d16793f9..93415f77079f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/inferNullity/NullityInferrer.java +++ b/java/java-impl/src/com/intellij/codeInspection/inferNullity/NullityInferrer.java @@ -569,9 +569,19 @@ public class NullityInferrer { } } else if (parent instanceof PsiReferenceExpression) { - if (((PsiReferenceExpression)parent).getQualifierExpression() == expr) { + final PsiExpression qualifierExpression = ((PsiReferenceExpression)parent).getQualifierExpression(); + if (qualifierExpression == expr) { registerNotNullAnnotation(parameter); return true; + } else { + PsiElement exprParent = expr.getParent(); + while (exprParent instanceof PsiTypeCastExpression || exprParent instanceof PsiParenthesizedExpression) { + if (qualifierExpression == exprParent) { + registerNotNullAnnotation(parameter); + return true; + } + exprParent = exprParent.getParent(); + } } } else if (parent instanceof PsiAssignmentExpression) { diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java index facf5ede5ed3..701f0233750f 100644 --- a/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java +++ b/java/java-tests/testData/codeInsight/nullityinferrer/afterParameterDereferenced.java @@ -12,4 +12,12 @@ class Test { if (str.substring(0) == null) { } } + + /** + * @param str + */ + void bar(@NotNull String str) { + if ((str).substring(0) == null) { + } + } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java index dac5998473b6..a1ba7ca1e6a0 100644 --- a/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java +++ b/java/java-tests/testData/codeInsight/nullityinferrer/beforeParameterDereferenced.java @@ -12,4 +12,12 @@ class Test { if (str.substring(0) == null) { } } + + /** + * @param str + */ + void bar(String str) { + if ((str).substring(0) == null) { + } + } } \ No newline at end of file