A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://docs.pmd-code.org/pmd-doc-7.3.0/pmd_projectdocs_decisions_adr_3.html below:

ADR 3 - API evolution principles

Table of Contents Context

The API of PMD has been growing over the years and needed some cleanup. The goal is, to have a clear separation between a well-defined API and the implementation, which is internal. This should help us in future development.

Until PMD 7.0.0, all released public members and types were implicitly considered part of public PMD API, including inheritance-specific members (protected members, abstract methods). We have maintained those APIs with the goal to preserve full binary compatibility between minor releases, only breaking those APIs infrequently, for major releases.

PMD is used and integrated in many different tools such as IDE plugins or build plugins. These plugins use our public API and rely on it being stable, hence we tried to break it only infrequently.

In order to allow PMD to move forward at a faster pace, this implicit contract will be invalidated with PMD 7.0.0 and onwards. We now introduce more fine-grained distinctions between the type of compatibility support we guarantee for our libraries, and ways to make them explicit to clients of PMD.

The actual API development and marking some part of the API as internal or add new API is an ongoing task, that will need to be done everytime. We won’t just define an API and then are done with it. The API will change as new features want to be implemented.

This decision document aims to document principles and guidelines that are used for PMD development.

Decision Semantic Versioning

PMD and all its modules are versioned together. PMD uses Semantic Versioning 2.0.0. This means, that each PMD version consists of MAJOR.MINOR.PATCH components:

Additional labels for release candidates might be used.

Incompatible API changes shouldn’t be introduced lightly. See FAQ: If even the tiniest backward incompatible changes to the public API require a major version bump, won’t I end up at version 42.0.0 very rapidly?.

Project structure and Java base packages names

PMD is mainly developed in the Java programming language. The build tool is Maven and the PMD build consists of several maven modules.

Criteria for public API

Public API is

Not public API is

Separation between public API, internal and implementation

All packages are considered to be public API by default, with two exceptions:

Deprecation and removing of old APIs Experimental APIs Guidelines for AST classes

AST classes of the individual language modules are used by custom rule implementations and are considered Public API in general. Rules only read the AST and do not need to modify it.

In order to minimize the public API surface of AST classes, the following guidelines apply:

Non-concrete AST classes (like base classes or common interfaces) should follow similar guidelines:

Summary of the annotations Status

Accepted (Last updated: February 2024)

Consequences Change History

2024-02-01: Changed status to “Accepted”. (#4756)

2023-12-01: Proposed initial version.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4