On 12.12.2022 16:26, Alan Bateman wrote:
The scenario seems a bit unusual in that API elements with package access aren't usually considered to be part of the API.

Yes, they shouldn't be. But our code is not perfect and we have many cases where package-private elements de-facto are a part of the API.

I realize Gradle may define "module" to mean something else but for the Java platform, a module is a set of packages.

Gradle currently does not support specifying which packages are a part of the API, although according to the docs [1] this should be possible in a future release. However, doing so would require a massive effort on our side since we need to figure out which packages should be a part of the API and our codebase is quite large. But if we were to do this (and we may, as an intermediate step in our transition to jigsaw), the functionality I propose would be very helpful in doing so.

I may note that we only consider as API those packages, which are actually used from another module -- not everything package-private is automatically in the API.

[1] https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_recognizing_dependencies

I haven't seen any opinions from others but my initial reaction is that it wouldn't be a good idea to change --api-only to consider API elements with package access to be part of the API. If jdeps were changed then it would need a new option.
Of course, that was my idea as well. FYI, I have already implemented this change, and I would like to make these changes directly in OpenJDK as well to avoid maintenance burden. For example, JDK-8294969 will break my changes, so I will have to rewrite them when we switch to newer JDK.

Reply via email to