Skip to content

Commit 7340bdf

Browse files
graememorganError Prone Team
authored andcommitted
Audit EP checks for argumentless mock().
DoNotMock is the only one that uses the arg, so I added a test and handled it. DirectInvocationOnMockTest was sorta implicitly using it, in that it only wanted the one-arg version to exclude stubs with arguments. PiperOrigin-RevId: 497253841
1 parent b92c9b1 commit 7340bdf

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

core/src/main/java/com/google/errorprone/bugpatterns/AbstractMockChecker.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,13 @@ public static <T extends Tree> TypeExtractor<T> extractType(Matcher<T> m) {
168168
public static TypeExtractor<MethodInvocationTree> extractFirstArg(
169169
Matcher<MethodInvocationTree> m) {
170170
return (tree, state) -> {
171-
if (m.matches(tree, state)) {
171+
if (!m.matches(tree, state)) {
172+
return Optional.empty();
173+
}
174+
if (tree.getArguments().size() >= 1) {
172175
return Optional.ofNullable(ASTHelpers.getType(tree.getArguments().get(0)));
173176
}
174-
return Optional.empty();
177+
return Optional.ofNullable(ASTHelpers.targetType(state)).map(t -> t.type());
175178
};
176179
}
177180

core/src/main/java/com/google/errorprone/bugpatterns/DirectInvocationOnMock.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,18 @@
2222
import static com.google.errorprone.matchers.Description.NO_MATCH;
2323
import static com.google.errorprone.matchers.Matchers.allOf;
2424
import static com.google.errorprone.matchers.Matchers.anyMethod;
25+
import static com.google.errorprone.matchers.Matchers.anyOf;
2526
import static com.google.errorprone.matchers.Matchers.instanceMethod;
2627
import static com.google.errorprone.matchers.Matchers.receiverOfInvocation;
2728
import static com.google.errorprone.matchers.Matchers.staticMethod;
29+
import static com.google.errorprone.suppliers.Suppliers.OBJECT_TYPE;
30+
import static com.google.errorprone.suppliers.Suppliers.arrayOf;
2831
import static com.google.errorprone.util.ASTHelpers.getReceiver;
2932
import static com.google.errorprone.util.ASTHelpers.getSymbol;
3033
import static com.google.errorprone.util.MoreAnnotations.getAnnotationValue;
3134
import static java.lang.String.format;
3235

36+
import com.google.common.collect.ImmutableList;
3337
import com.google.common.collect.ImmutableSet;
3438
import com.google.errorprone.BugPattern;
3539
import com.google.errorprone.VisitorState;
@@ -167,7 +171,15 @@ public Void visitAssignment(AssignmentTree tree, Void unused) {
167171
}
168172

169173
private static final Matcher<ExpressionTree> MOCK =
170-
staticMethod().onClass("org.mockito.Mockito").named("mock").withParameters("java.lang.Class");
174+
anyOf(
175+
staticMethod()
176+
.onClass("org.mockito.Mockito")
177+
.named("mock")
178+
.withParameters("java.lang.Class"),
179+
staticMethod()
180+
.onClass("org.mockito.Mockito")
181+
.named("mock")
182+
.withParametersOfType(ImmutableList.of(arrayOf(OBJECT_TYPE))));
171183

172184
private static final Matcher<MethodInvocationTree> DO_CALL_REAL_METHOD =
173185
allOf(

core/src/main/java/com/google/errorprone/bugpatterns/MockNotUsedInProduction.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,7 @@ private boolean annotatedAtMostMock(Symbol symbol) {
180180
}
181181

182182
private static final Matcher<ExpressionTree> MOCK =
183-
anyOf(
184-
staticMethod()
185-
.onClass("org.mockito.Mockito")
186-
.namedAnyOf("mock")
187-
.withParameters("java.lang.Class"),
188-
staticMethod().onClass("org.mockito.Mockito").namedAnyOf("spy"));
183+
staticMethod().onClass("org.mockito.Mockito").namedAnyOf("mock", "spy");
189184

190185
private static final Matcher<VariableTree> MOCK_OR_SPY_ANNOTATED =
191186
anyOf(hasAnnotation("org.mockito.Mock"), hasAnnotation("org.mockito.Spy"));

0 commit comments

Comments
 (0)