Annotation Dependencies and Requires Static Transitive
Remi Forax
forax at univ-mlv.fr
Thu Jun 3 20:37:54 UTC 2021
----- Mail original -----
> De: "Anand Beh" <anandebeh at gmail.com>
> À: "jigsaw-dev" <jigsaw-dev at openjdk.java.net>
> Envoyé: Jeudi 3 Juin 2021 22:10:11
> Objet: Annotation Dependencies and Requires Static Transitive
> Hello,
>
> The cache library Caffeine recently added a full module descriptor. It
> has no runtime dependencies, but it depends on metadata annotations
> from checker-qual and errorprone, for example @NotNull and
> @CanIgnoreReturnValue. The module looks like this:
> module com.github.benmanes.caffeine {
> exports com.github.benmanes.caffeine.cache;
> exports com.github.benmanes.caffeine.cache.stats;
>
> requires static transitive com.google.errorprone.annotations;
> requires static transitive org.checkerframework.checker.qual;
> }
>
> The annotations are not required at runtime, hence static. They're
> visibly placed on public methods and return types, so that API clients
> can benefit from them for the purposes of annotation-based null
> analysis, kotlin interop, etc. As the annotations are part of the API,
> they're marked transitive.
>
> However, the "transitive" aspect imposes some requirements on users. I
> am wondering if there is a more correct way to declare these
> annotation dependencies than static transitive.
>
> One user would like to avoid the presence of these annotations at
> compile-time. For reference, here's the relevant discussion:
> https://github.com/ben-manes/caffeine/issues/535
>
> I'm not a maintainer of caffeine, though I was involved in its modularization.
Hi,
i've used just "requires static" without "transitive" for non null/nullable annotations in the past.
Thos annotations are consumed by tools, i don't think transitive is necessary.
>
> Regards,
> Anand
regards,
Rémi
More information about the jigsaw-dev
mailing list