diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java index 7e0b701d20db..9036f1a56aed 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValue.java @@ -16,6 +16,7 @@ package com.intellij.codeInspection.unusedReturnValue; import com.intellij.analysis.AnalysisScope; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.daemon.GroupNames; import com.intellij.codeInspection.*; import com.intellij.codeInspection.reference.*; @@ -30,6 +31,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.Collections; /** * @author max @@ -60,6 +62,7 @@ public class UnusedReturnValue extends GlobalJavaBatchInspectionTool{ final boolean isNative = psiMethod.hasModifierProperty(PsiModifier.NATIVE); if (refMethod.isExternalOverride() && !isNative) return null; if (RefUtil.isImplicitRead(psiMethod)) return null; + if (canIgnoreReturnValue(psiMethod)) return null; return new ProblemDescriptor[]{createProblemDescriptor(psiMethod, manager, processor, isNative)}; } } @@ -67,6 +70,12 @@ public class UnusedReturnValue extends GlobalJavaBatchInspectionTool{ return null; } + static boolean canIgnoreReturnValue(PsiMethod psiMethod) { + return AnnotationUtil.isAnnotated(psiMethod, + Collections.singleton("com.google.errorprone.annotations.CanIgnoreReturnValue"), + AnnotationUtil.CHECK_HIERARCHY); + } + @Override public void writeSettings(@NotNull Element node) throws WriteExternalException { if (IGNORE_BUILDER_PATTERN) { diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java index 1778f05f5001..5d828942ec14 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedReturnValue/UnusedReturnValueLocalInspection.java @@ -52,6 +52,7 @@ public class UnusedReturnValueLocalInspection extends AbstractBaseJavaLocalInspe method.hasModifierProperty(PsiModifier.NATIVE) || MethodUtils.hasSuper(method) || RefUtil.isImplicitRead(method) || + UnusedReturnValue.canIgnoreReturnValue(method) || UnusedDeclarationInspectionBase.isDeclaredAsEntryPoint(method)) return null; final boolean[] atLeastOneUsageExists = new boolean[]{false};