Unless otherwise specified in a particular implementation, the collections returned by methods in this package should be expected to be unmodifiable by the caller and unsafe for concurrent access.
Unless otherwise specified, methods in this package will throw a NullPointerException if given a null argument.
The remainder of this note will show two examples of the API changes in the model and visitors that can be added to support a language feature. The examples will use additions to the elements portion of the language model, but the updates to visitors for types or annotation values would be analogous. Two distinct cases are:
ElementKind constant
package javax.lang.model.element;
/**
* Represents a preview feature 1.
*
* @since N
*/
public interface PreviewFeature1Element extends Element {
// Methods to retrieve information specific to the preview feature...
}
A new element kind would also be introduced to model such a feature: // Sample diff of ElementKind.java + /** + * A preview feature 1. + * @since N + */ + PREVIEW_FEATURE_1,A
default method is added to ElementVisitor to accommodate the new construct:
// Sample diff for ElementVisitor.java
+ /**
+ * Visits a preview feature 1.
+ *
+ * @implSpec The default implementation visits a {@code
+ * PreviewFeature1Element} by calling {@code visitUnknown(e, p)}.
+ *
+ * @param e the element to visit
+ * @param p a visitor-specified parameter
+ * @return a visitor-specified result
+ * @since N
+ */
+ default R visitPreviewFeature1(PreviewFeature1Element e, P p) {
+ return visitUnknown(e, p);
+ }
Given the default method on the visitor interface, the preview visitor classes need to override this method and take an action appropriate for the visitor's semantics:
// Sample diff for AbstractElementVisitorPreview.java
// Re-abstract visitPreviewFeature1.
+ /**
+ * {@inheritDoc ElementVisitor}
+ *
+ * @implSpec Visits a {@code PreviewFeature1Element} in a manner
+ * defined by a subclass.
+ *
+ * @param e {@inheritDoc ElementVisitor}
+ * @param p {@inheritDoc ElementVisitor}
+ * @return a visitor-specified result
+ * @since N
+ */
+ @Override
+ public abstract R visitPreviewFeature1(PreviewFeature1Element e, P p);
// Sample diff for ElementKindVisitorPreview.java
// Take the default action for a preview feature 1.
+
+ /**
+ * {@inheritDoc ElementVisitor}
+ *
+ * @implSpec This implementation calls {@code defaultAction}.
+ *
+ * @param e {@inheritDoc ElementVisitor}
+ * @param p {@inheritDoc ElementVisitor}
+ * @return the result of {@code defaultAction}
+ * @since N
+ */
+ @Override
+ public R visitPreviewFeature1(PreviewFeature1Element e, P p) {
+ return defaultAction(e, p);
+ }
// Sample diff for ElementScannerPreview.java
// Scan the enclosed elements of a preview feature 1.
+
+ /**
+ * {@inheritDoc ElementVisitor}
+ *
+ * @implSpec This implementation scans the enclosed elements.
+ *
+ * @param e {@inheritDoc ElementVisitor}
+ * @param p {@inheritDoc ElementVisitor}
+ * @return {@inheritDoc ElementScanner6}
+ * @since N
+ */
+ @Override
+ public R visitPreviewFeature1(PreviewFeature1Element e, P p) {
+ return scan(e.getEnclosedElements(), p);
+ }
// Sample diff for SimpleElementVisitorPreview.java
// Take the default action for a preview feature 1.
+ /**
+ * {@inheritDoc ElementVisitor}
+ *
+ * @implSpec Visits a {@code PreviewFeature1Element} by calling
+ * defaultAction.
+ *
+ * @param e {@inheritDoc ElementVisitor}
+ * @param p {@inheritDoc ElementVisitor}
+ * @return {@inheritDoc ElementVisitor}
+ * @since N
+ */
+ @Override
+ public R visitPreviewFeature1(PreviewFeature1Element e, P p) {
+ return defaultAction(e, p);
+ }
When preview feature 1 exits preview in JDK (N+k), a set of visitors for language level (N+k) would be added. The methods operating over the feature would be moved from the preview visitors to the new language level (N+k) visitors. Each preview visitor would then have its direct superclass changed to the new corresponding (N+k) visitor.
// Sample diff for ElementKind.java
+ /**
+ * A preview feature 2.
+ * @since N
+ */
+ PREVIEW_FEATURE_2,
...
// Update existing methods as needed
public boolean isVariable() {
return switch(this) {
case ENUM_CONSTANT, FIELD, PARAMETER,
LOCAL_VARIABLE, EXCEPTION_PARAMETER, RESOURCE_VARIABLE,
- BINDING_VARIABLE -> true;
+ BINDING_VARIABLE, PREVIEW_FEATURE_2 -> true;
default -> false;
};
}
The kind visitors need support for the new variety of element:
// Update visitVariable in ElementKindVisitor6:
...
* @implSpec This implementation dispatches to the visit method for
* the specific {@linkplain ElementKind kind} of variable, {@code
* ENUM_CONSTANT}, {@code EXCEPTION_PARAMETER}, {@code FIELD},
- * {@code LOCAL_VARIABLE}, {@code PARAMETER}, or {@code RESOURCE_VARIABLE}.
+ * {@code LOCAL_VARIABLE}, {@code PARAMETER}, {@code RESOURCE_VARIABLE},
+ * or {@code PREVIEW_FEATURE_2}.
*
* @param e {@inheritDoc ElementVisitor}
* @param p {@inheritDoc ElementVisitor}
* @return the result of the kind-specific visit method
*/
@Override
public R visitVariable(VariableElement e, P p) {
...
case BINDING_VARIABLE:
return visitVariableAsBindingVariable(e, p);
+ case PREVIEW_FEATURE_2:
+ return visitVariableAsPreviewFeature2(e, p);
+
default:
throw new AssertionError("Bad kind " + k + " for VariableElement" + e);
...
+ /**
+ * Visits a {@code PREVIEW_FEATURE_2} variable element.
+ *
+ * @implSpec This implementation calls {@code visitUnknown}.
+ *
+ * @param e the element to visit
+ * @param p a visitor-specified parameter
+ * @return the result of {@code visitUnknown}
+ *
+ * @since N
+ */
+ public R visitVariableAsPreviewFeature2(VariableElement e, P p) {
+ return visitUnknown(e, p);
+ }
The preview element kind visitor in turn overrides
visitVariableAsPreviewFeature2:
// Sample diff for ElementKindVisitorPreview:
+ /**
+ * {@inheritDoc ElementKindVisitor6}
+ *
+ * @implSpec This implementation calls {@code defaultAction}.
+ *
+ * @param e {@inheritDoc ElementKindVisitor6}
+ * @param p {@inheritDoc ElementKindVisitor6}
+ * @return the result of {@code defaultAction}
+ *
+ * @since N
+ */
+ @Override
+ public R visitVariableAsPreviewFeature2(VariableElement e, P p) {
+ return defaultAction(e, p);
+ }
As in the case where a new interface is introduced, when preview feature 2 exits preview in JDK (N+k), a set of visitors for language level (N+k) would be added. The methods operating over the new feature in the kind visitors would be moved from the preview visitors to new language level (N+k) visitors. Each preview visitor would then have its direct superclass changed to the new corresponding (N+k) visitor.| Class | Description |
|---|---|
|
AbstractAnnotationValueVisitor14<R, |
A skeletal visitor for annotation values with default behavior appropriate for source version RELEASE_14. |
|
AbstractAnnotationValueVisitor6<R, |
A skeletal visitor for annotation values with default behavior appropriate for the RELEASE_6 source version. |
|
AbstractAnnotationValueVisitor7<R, |
A skeletal visitor for annotation values with default behavior appropriate for the RELEASE_7 source version. |
|
AbstractAnnotationValueVisitor8<R, |
A skeletal visitor for annotation values with default behavior appropriate for the RELEASE_8 source version. |
|
AbstractAnnotationValueVisitor9<R, |
A skeletal visitor for annotation values with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
AbstractAnnotationValueVisitorPreviewPREVIEW<R, |
Preview. A skeletal visitor for annotation values with default behavior appropriate for a preview source version. |
|
AbstractElementVisitor14<R, |
A skeletal visitor of program elements with default behavior appropriate for the RELEASE_14 source version. |
|
AbstractElementVisitor6<R, |
A skeletal visitor of program elements with default behavior appropriate for the RELEASE_6 source version. |
|
AbstractElementVisitor7<R, |
A skeletal visitor of program elements with default behavior appropriate for the RELEASE_7 source version. |
|
AbstractElementVisitor8<R, |
A skeletal visitor of program elements with default behavior appropriate for the RELEASE_8 source version. |
|
AbstractElementVisitor9<R, |
A skeletal visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
AbstractElementVisitorPreviewPREVIEW<R, |
Preview. A skeletal visitor of program elements with default behavior appropriate for a preview source version. |
|
AbstractTypeVisitor14<R, |
A skeletal visitor of types with default behavior appropriate for the RELEASE_14 source version. |
|
AbstractTypeVisitor6<R, |
A skeletal visitor of types with default behavior appropriate for the RELEASE_6 source version. |
|
AbstractTypeVisitor7<R, |
A skeletal visitor of types with default behavior appropriate for the RELEASE_7 source version. |
|
AbstractTypeVisitor8<R, |
A skeletal visitor of types with default behavior appropriate for the RELEASE_8 source version. |
|
AbstractTypeVisitor9<R, |
A skeletal visitor of types with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
AbstractTypeVisitorPreviewPREVIEW<R, |
Preview. A skeletal visitor of types with default behavior appropriate for a preview source version. |
| ElementFilter | Filters for selecting just the elements of interest from a collection of elements. |
|
ElementKindVisitor14<R, |
A visitor of program elements based on their kind with default behavior appropriate for the RELEASE_14 source version. |
|
ElementKindVisitor6<R, |
|
|
ElementKindVisitor7<R, |
|
|
ElementKindVisitor8<R, |
|
|
ElementKindVisitor9<R, |
A visitor of program elements based on their kind with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
ElementKindVisitorPreviewPREVIEW<R, |
Preview. |
| Elements | Utility methods for operating on program elements. |
| Elements.DocCommentKind | The kind of documentation comment. |
| Elements.Origin | The origin of an element or other language model item. |
|
ElementScanner14<R, |
A scanning visitor of program elements with default behavior appropriate for the RELEASE_14 source version. |
|
ElementScanner6<R, |
A scanning visitor of program elements with default behavior appropriate for the RELEASE_6 source version. |
|
ElementScanner7<R, |
A scanning visitor of program elements with default behavior appropriate for the RELEASE_7 source version. |
|
ElementScanner8<R, |
A scanning visitor of program elements with default behavior appropriate for the RELEASE_8 source version. |
|
ElementScanner9<R, |
A scanning visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
ElementScannerPreviewPREVIEW<R, |
Preview. A scanning visitor of program elements with default behavior appropriate for a preview source version. |
|
SimpleAnnotationValueVisitor14<R, |
A simple visitor for annotation values with default behavior appropriate for source version RELEASE_14. |
|
SimpleAnnotationValueVisitor6<R, |
A simple visitor for annotation values with default behavior appropriate for the RELEASE_6 source version. |
|
SimpleAnnotationValueVisitor7<R, |
A simple visitor for annotation values with default behavior appropriate for the RELEASE_7 source version. |
|
SimpleAnnotationValueVisitor8<R, |
A simple visitor for annotation values with default behavior appropriate for the RELEASE_8 source version. |
|
SimpleAnnotationValueVisitor9<R, |
A simple visitor for annotation values with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
SimpleAnnotationValueVisitorPreviewPREVIEW<R, |
Preview. A simple visitor for annotation values with default behavior appropriate for a preview source version. |
|
SimpleElementVisitor14<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_14 source version. |
|
SimpleElementVisitor6<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_6 source version. |
|
SimpleElementVisitor7<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_7 source version. |
|
SimpleElementVisitor8<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_8 source version. |
|
SimpleElementVisitor9<R, |
A simple visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
SimpleElementVisitorPreviewPREVIEW<R, |
Preview. A simple visitor of program elements with default behavior appropriate for a preview source version. |
|
SimpleTypeVisitor14<R, |
A simple visitor of types with default behavior appropriate for source version RELEASE_14. |
|
SimpleTypeVisitor6<R, |
A simple visitor of types with default behavior appropriate for the RELEASE_6 source version. |
|
SimpleTypeVisitor7<R, |
A simple visitor of types with default behavior appropriate for the RELEASE_7 source version. |
|
SimpleTypeVisitor8<R, |
A simple visitor of types with default behavior appropriate for the RELEASE_8 source version. |
|
SimpleTypeVisitor9<R, |
A simple visitor of types with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
SimpleTypeVisitorPreviewPREVIEW<R, |
Preview. A simple visitor of types with default behavior appropriate for a preview source version. |
|
TypeKindVisitor14<R, |
A visitor of types based on their kind with default behavior appropriate for source version RELEASE_14. |
|
TypeKindVisitor6<R, |
|
|
TypeKindVisitor7<R, |
|
|
TypeKindVisitor8<R, |
|
|
TypeKindVisitor9<R, |
A visitor of types based on their kind with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
TypeKindVisitorPreviewPREVIEW<R, |
Preview. |
| Types | Utility methods for operating on types. |
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.compiler/javax/lang/model/util/package-summary.html