-
-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Use @API Guardian to mark public API #1536
Labels
📖 documentation
Improvements or additions to documentation
⚡ enhancement
Request for new functionality
Milestone
Comments
mpkorstanje
added
Core
📖 documentation
Improvements or additions to documentation
⚡ enhancement
Request for new functionality
labels
Jan 11, 2019
mpkorstanje
changed the title
Consider using @API Guardian to mark public API
Use @API Guardian to mark public API
Jun 16, 2019
mpkorstanje
added a commit
that referenced
this issue
Jun 16, 2019
mpkorstanje
added a commit
that referenced
this issue
Jun 16, 2019
mpkorstanje
added a commit
that referenced
this issue
Jun 30, 2019
Cucumber-JVMs public API consists of either: * Any public class in in the `cucumber.api` package or subpackage thereof. * Any public class marked with `@org.apiguardian.api.API(status = API.Status.STABLE)`. This dual system will allow us to gradually migrate the package structure to `io.cucumber`. While the `api` package makes it clear what is part of the API, it also forces us to expose more of the API then strictly necessary. It also creates split packages which will prevent Cucumber from being used with the Java module system. See #1536
mpkorstanje
added a commit
that referenced
this issue
Jun 30, 2019
Cucumber-JVMs public API consists of either: * Any public class in in the `cucumber.api` package or subpackage thereof. * Any public class marked with `@org.apiguardian.api.API(status = API.Status.STABLE)`. This dual system will allow us to gradually migrate the package structure to `io.cucumber`. While the `api` package makes it clear what is part of the API, it also forces us to expose more of the API then strictly necessary. It also creates split packages which will prevent Cucumber from being used with the Java module system. See #1536
This was referenced Aug 2, 2019
Merged
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
📖 documentation
Improvements or additions to documentation
⚡ enhancement
Request for new functionality
Summary
Use @API Guardian to mark the public API.
Semantic versioning requires that the public API is clearly marked. However the public API of Cucumber JVM does not overlap with the publicly accessible methods and classes. So the project is using
*.api.*
packages to mark the public api.This is less then ideal:
Interface
andInterfaceImpl
constructs or to make implementation details of specific classes public. There are various examples of this in the codebase.api
. As a result automated tooling and dependency graph analysis become hard to use.Using an annotation instead of a package would solve this. It would also allow us to provide a bit more information about the API.
The downside is that we can't simply tell users to look in the
cucumber.api
package. However with the upcoming package restructuring for v5 this package will be split intocucumber.<module>.api
and so lose quite a bit of it's value already.Related:
Details
To do:
cucumber-parent
.cucumber-expressions
.datatable
.While migrating these modules to the new package structure:
junit
. [JUnit] Deprecate cucumber.junit.api.Cucumber #1666testng
.cd2
.guice
indevelop-v5
.needle
.openejb
.picocontainer
.spring
.weld
.java
.java8
.core
partially in develop-v5.The text was updated successfully, but these errors were encountered: