diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/JavaMethodContractUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/JavaMethodContractUtil.java index f87c77044adc..6d9495aba667 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/JavaMethodContractUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/JavaMethodContractUtil.java @@ -8,6 +8,7 @@ import com.intellij.psi.*; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiModificationTracker; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.ObjectUtils; import com.siyeh.ig.psiutils.ExpressionUtils; import com.siyeh.ig.psiutils.MethodCallUtils; @@ -106,6 +107,7 @@ public class JavaMethodContractUtil { static class ContractInfo { static final ContractInfo EMPTY = new ContractInfo(Collections.emptyList(), false, false, MutationSignature.UNKNOWN); + static final ContractInfo PURE = new ContractInfo(Collections.emptyList(), true, false, MutationSignature.PURE); private final @NotNull List myContracts; private final boolean myPure; @@ -139,6 +141,9 @@ public class JavaMethodContractUtil { } static @NotNull ContractInfo getContractInfo(@NotNull PsiMethod method) { + if (PsiUtil.isAnnotationMethod(method)) { + return ContractInfo.PURE; + } return CachedValuesManager.getCachedValue(method, () -> { final PsiAnnotation contractAnno = findContractAnnotation(method); ContractInfo info = ContractInfo.EMPTY; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unwrapIfStatement/afterAnnotationMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unwrapIfStatement/afterAnnotationMethod.java new file mode 100644 index 000000000000..95dbc6ef7025 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unwrapIfStatement/afterAnnotationMethod.java @@ -0,0 +1,8 @@ +// "Simplify 'my.value() == null' to false" "true" +class Test { + void some(SuppressWarnings my) { + if (my == null) { + System.out.println("null"); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unwrapIfStatement/beforeAnnotationMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unwrapIfStatement/beforeAnnotationMethod.java new file mode 100644 index 000000000000..a362f427ec7b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unwrapIfStatement/beforeAnnotationMethod.java @@ -0,0 +1,8 @@ +// "Simplify 'my.value() == null' to false" "true" +class Test { + void some(SuppressWarnings my) { + if (my == null || my.value() == null) { + System.out.println("null"); + } + } +} \ No newline at end of file