False positives for ProvidesMethodOutsideOfModule bug pattern
- Dominant language
- Java
- Stars
- 7.2k
- Forks
- 820
- Avg merge
- 5h 9m
- Merged PRs (30d)
- 50
Description
In Gerrit build we are seeing many false positives for ProvidesMethodOutsideOfModule bug pattern.
For example, we have changed from single injection to multiple injections in this CL: [1]
```diff
diff --git a/java/com/google/gerrit/server/update/SuperprojectUpdateSubmissionListener.java b/java/com/google/gerrit/server/update/SuperprojectUpdateSubmissionListener.java
index dffdff0e7f..4c65c80ad8 100644
--- a/java/com/google/gerrit/server/update/SuperprojectUpdateSubmissionListener.java
+++ b/java/com/google/gerrit/server/update/SuperprojectUpdateSubmissionListener.java
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.server.submit.MergeOpRepoManager;
import com.google.gerrit.server.submit.SubmoduleOp;
import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -39,11 +40,11 @@ public class SuperprojectUpdateSubmissionListener implements SubmissionListener
private boolean dryrun;
public static class Module extends AbstractModule {
- @Override
- protected void configure() {
- bind(SubmissionListener.class)
- .annotatedWith(SuperprojectUpdateOnSubmission.class)
- .to(SuperprojectUpdateSubmissionListener.class);
+ @Provides
+ @SuperprojectUpdateOnSubmission
+ ImmutableList provideSubmissionListeners(
+ SuperprojectUpdateSubmissionListener listener) {
+ return ImmutableList.of(listener);
}
}
```
After the above change we are starting to see this error (that we demoted to warning severity):
```bash
java/com/google/gerrit/server/update/SuperprojectUpdateSubmissionListener.java:43: warning: [ProvidesMethodOutsideOfModule] @Provides methods need to be declared in a Module to have any effect.
@Provides
^
(see https://errorprone.info/bugpattern/ProvidesMethodOutsideOfModule)
Did you mean to remove this line?
Target //java/com/google/gerrit/server:server up-to-date:
bazel-bin/java/com/google/gerrit/server/libserver.jar
INFO: Elapsed time: 43.147s, Critical Path: 42.88s
INFO: 4 processes: 1 internal, 2 linux-sandbox, 1 worker.
INFO: Build completed successfully, 4 total actions
```
Another example of occurrence of this false positive:
```bash
java/com/google/gerrit/server/ssh/SshAddressesModule.java:40: warning: [ProvidesMethodOutsideOfModule] @Provides methods need to be declared in a Module to have any effect.
@Provides
^
(see https://errorprone.info/bugpattern/ProvidesMethodOutsideOfModule)
Did you mean to remove this line?
java/com/google/gerrit/server/ssh/SshAddressesModule.java:71: warning: [ProvidesMethodOutsideOfModule] @Provides methods need to be declared in a Module to have any effect.
@Provides
^
(see https://errorprone.info/bugpattern/ProvidesMethodOutsideOfModule)
Did you mean to remove this line?
```
The above error is reported for this code: [2] and the code works and looks just fine to me.
Gerrit Code Review is using Bazel 6.1.2 with latest java_tools v12.1 that is shipping ErrorProne 2.18.
To reproduce, clone [Gerrit](https://gerrit.googlesource.com/gerrit) recursively and run: `bazel build java/com/google/gerrit/server:server`.
[1] https://gerrit-review.googlesource.com/c/gerrit/+/284097
[2] https://gerrit.googlesource.com/gerrit/+/refs/heads/master/java/com/google/gerrit/server/ssh/SshAddressesModule.java#40
Contributor guide
Assessment
This issue has not been assessed yet.