Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jpms: add 'require static' entries for annotation processing #7732

Conversation

jjohannes
Copy link
Contributor

@jjohannes jjohannes commented Mar 20, 2025

Follow up to: #2970

The annotation libraries that provide annotations used on public API should be declared as require static. Otherwise, compiling with -Xlint:all and -Werror fails because all annotations that are visited need to be accessible from the context of the module they are used in.

Example error:

guava-33.4.5-jre.jar(/com/google/common/util/concurrent/ListenableFuture.class): warning: Cannot find annotation method 'value()' in type 'DoNotMock': class file for com.google.errorprone.annotations.DoNotMock not found
guava-33.4.5-jre.jar(/com/google/common/util/concurrent/ListenableFuture.class): warning: Cannot find annotation method 'value()' in type 'DoNotMock': class file for com.google.errorprone.annotations.DoNotMock not found
error: warnings found and -Werror specified
1 error
2 warnings

https://scans.gradle.com/s/ose6lkdbtogww/console-log/task/:hedera-protobuf-java-api:compileJava?anchor=5&page=1

For more details see also this similar issue in Log4j2: apache/logging-log4j2#3437

I believe Guava's own build would fail without this at compilation time if annotation processing would be done on the module path (--process-module-path).
Unfortunately, that's a bit complex to configure currently: https://issues.apache.org/jira/browse/MCOMPILER-412

Signed-off-by: Jendrik Johannes <jendrik.johannes@gmail.com>
@jjohannes jjohannes mentioned this pull request Mar 20, 2025
@jjohannes jjohannes changed the title jpms: add 'require static transitive' entries for annotation processing jpms: add 'require static' entries for annotation processing Mar 20, 2025
@eamonnmcmanus eamonnmcmanus requested a review from cpovirk March 20, 2025 19:40
@cpovirk
Copy link
Member

cpovirk commented Mar 21, 2025

Hi, again, and thanks.

I agree that the lack of a requires line is wrong. I am going to try to spend a little more time to actually understand modules (based in part on a dev.java tutorial, which seems very helpful to my untrained eye) enough to decide whether to first try something other than requires static. But I don't want to drag that on too long, given that requires static should be strictly better than what we have now.

I left some notes in jspecify/jspecify#495 (comment).

@cpovirk cpovirk added this to the 33.4.6 milestone Mar 25, 2025
copybara-service bot pushed a commit that referenced this pull request Mar 25, 2025
This fixes warnings that arise when javac goes looking for, e.g., `DoNotMock.value()`, which it can't find if the Guava module is not permitted to access `error_prone_annotations`.

The warnings don't come up with JSpecify annotations (or perhaps J2ObjC annotations?), but it seems reasonable to declare those dependencies, too: If we were building Guava as a "normal" module (instead of [building its `module-info` separately](https://github.com/google/guava/blob/6dcc4ef29811962cfbcdbc888a0dc9c4a1efc1a3/guava/pom.xml#L101-L141)), javac would _force_ us to declare them.

Signed-off-by: Jendrik Johannes <jendrik.johannes@gmail.com>

Fixes #7732

RELNOTES=Fixed annotation-related warnings when using Guava in modular builds. The most common such warning is `Cannot find annotation method 'value()' in type 'DoNotMock': ...`.
PiperOrigin-RevId: 740339488
copybara-service bot pushed a commit that referenced this pull request Mar 25, 2025
This fixes warnings that arise when javac goes looking for, e.g., `DoNotMock.value()`, which it can't find if the Guava module is not permitted to access `error_prone_annotations`.

The warnings don't come up with JSpecify annotations (or perhaps J2ObjC annotations?), but it seems reasonable to declare those dependencies, too: If we were building Guava as a "normal" module (instead of [building its `module-info` separately](https://github.com/google/guava/blob/6dcc4ef29811962cfbcdbc888a0dc9c4a1efc1a3/guava/pom.xml#L101-L141)), javac would _force_ us to declare them.

Signed-off-by: Jendrik Johannes <jendrik.johannes@gmail.com>

Fixes #7732

RELNOTES=Fixed annotation-related warnings when using Guava in modular builds. The most common such warning is `Cannot find annotation method 'value()' in type 'DoNotMock': ...`.
PiperOrigin-RevId: 740339488
cpovirk pushed a commit that referenced this pull request Mar 25, 2025
This fixes warnings that arise when javac goes looking for, e.g., `DoNotMock.value()`, which it can't find if the Guava module is not permitted to access `error_prone_annotations`.

The warnings don't come up with JSpecify annotations (or perhaps J2ObjC annotations?), but it seems reasonable to declare those dependencies, too: If we were building Guava as a "normal" module (instead of [building its `module-info` separately](https://github.com/google/guava/blob/6dcc4ef29811962cfbcdbc888a0dc9c4a1efc1a3/guava/pom.xml#L101-L141)), javac would _force_ us to declare them.

Signed-off-by: Jendrik Johannes <jendrik.johannes@gmail.com>

Fixes #7732

RELNOTES=Fixed annotation-related warnings when using Guava in modular builds. The most common such warning is `Cannot find annotation method 'value()' in type 'DoNotMock': ...`.
PiperOrigin-RevId: 740355816
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants