diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/CheckReturnValue.java b/core/src/main/java/com/google/errorprone/bugpatterns/CheckReturnValue.java index e99d1f227b3..2784946983b 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/CheckReturnValue.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/CheckReturnValue.java @@ -29,6 +29,7 @@ import static com.google.errorprone.bugpatterns.checkreturnvalue.ProtoRules.protoBuilders; import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUsePolicy.EXPECTED; import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUsePolicy.OPTIONAL; +import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUsePolicy.UNSPECIFIED; import static com.google.errorprone.bugpatterns.checkreturnvalue.Rules.globalDefault; import static com.google.errorprone.bugpatterns.checkreturnvalue.Rules.mapAnnotationSimpleName; import static com.google.errorprone.fixes.SuggestedFix.emptyFix; @@ -149,11 +150,7 @@ private static Optional defaultPolicy(ErrorProneFlags flags, St */ @Override public Matcher specializedMatcher() { - return (tree, state) -> - methodToInspect(tree) - .map(method -> evaluator.evaluate(method, state)) - .orElse(OPTIONAL) - .equals(EXPECTED); + return (tree, state) -> getMethodPolicy(tree, state).equals(EXPECTED); } private static Optional methodToInspect(ExpressionTree tree) { @@ -190,6 +187,13 @@ private static Optional methodSymbol(ExpressionTree tree) { return sym instanceof MethodSymbol ? Optional.of((MethodSymbol) sym) : Optional.empty(); } + /** Returns the {@link ResultUsePolicy} for the method used in the given {@code expression}. */ + public ResultUsePolicy getMethodPolicy(ExpressionTree expression, VisitorState state) { + return methodToInspect(expression) + .map(method -> evaluator.evaluate(method, state)) + .orElse(UNSPECIFIED); + } + @Override public boolean isCovered(ExpressionTree tree, VisitorState state) { return methodToInspect(tree).stream() diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ExternalCanIgnoreReturnValue.java b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ExternalCanIgnoreReturnValue.java index 6e7de560ed7..8b1e06a9d79 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ExternalCanIgnoreReturnValue.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ExternalCanIgnoreReturnValue.java @@ -80,7 +80,7 @@ public String id() { @Override public Optional evaluateMethod(MethodSymbol method, VisitorState state) { return EXTERNAL_RULE_EVALUATOR.get(state).methodMatches(method, state) - ? Optional.of(ResultUsePolicy.OPTIONAL) + ? Optional.of(ResultUsePolicy.UNSPECIFIED) : Optional.empty(); } diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicy.java b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicy.java index 145844b618b..d9af0c45892 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicy.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicy.java @@ -27,4 +27,6 @@ public enum ResultUsePolicy { EXPECTED, /** Use of the result is optional. */ OPTIONAL, + /** It is unspecified whether the result should be used or not. */ + UNSPECIFIED, } diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicyEvaluator.java b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicyEvaluator.java index bf79646afa7..0c210bd8506 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicyEvaluator.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ResultUsePolicyEvaluator.java @@ -17,7 +17,7 @@ package com.google.errorprone.bugpatterns.checkreturnvalue; import static com.google.common.collect.ImmutableListMultimap.toImmutableListMultimap; -import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUsePolicy.OPTIONAL; +import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUsePolicy.UNSPECIFIED; import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUseRule.RuleScope.ENCLOSING_ELEMENTS; import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUseRule.RuleScope.GLOBAL; import static com.google.errorprone.bugpatterns.checkreturnvalue.ResultUseRule.RuleScope.METHOD; @@ -82,7 +82,7 @@ private ResultUsePolicyEvaluator(Builder builder) { * apply to it. */ public ResultUsePolicy evaluate(MethodSymbol method, VisitorState state) { - return policies(method, state).findFirst().orElse(OPTIONAL); + return policies(method, state).findFirst().orElse(UNSPECIFIED); } private Stream policies(MethodSymbol method, VisitorState state) {