Пакет javax.lang.model.util
Если для конкретной реализации не указано иное, следует считать, что коллекции, возвращаемые методами этого пакета, не могут быть изменены вызывающим кодом и небезопасны при параллельном доступе.
Если не указано иное, методы этого пакета выбрасывают NullPointerException, если им передан аргумент null.
- Примечание к API:
-
Ожидаемое развитие интерфейсов посетителей
По мере развития языка программирования Java развиваются и интерфейсы посетителей языковой модели, а также конкретные посетители этого пакета. Предварительная функция языка в JDK N может привести к добавлению элементов API в набор посетителей для предварительного уровня языка. Такие новые элементы помечаются как предварительный API с отражением. Существующие методы, спецификация которых обновлена для поддержки предварительной функции, не помечаются как предварительные.В оставшейся части этого примечания приведены два примера изменений API в модели и посетителях, которые могут быть добавлены для поддержки функции языка. В примерах рассматриваются добавления в раздел элементов языковой модели, однако соответствующие обновления посетителей типов или значений аннотаций были бы аналогичны. Различают два случая:
- конструкция предварительного языка имеет соответствующий новый интерфейс модели и сопутствующую новую константу вида, например новую константу
ElementKind - конструкция предварительного языка приводит к появлению нового вида без нового интерфейса модели
Добавление поддержки посетителей для конструкции языка верхнего уровня
Рассмотрим новую функцию языка — предварительную функцию 1 — в JDK N. Для её моделирования предусмотрен интерфейс элемента верхнего уровня: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... }Для моделирования такой функции также будет введён новый вид элемента:// Sample diff of ElementKind.java + /** + * A preview feature 1. + * @since N + */ + PREVIEW_FEATURE_1,
ВElementVisitorдобавляется методdefaultдля поддержки новой конструкции:// 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); + }С учётом методаdefaultв интерфейсе посетителя классы предварительных посетителей должны переопределить этот метод и выполнить действие, соответствующее семантике посетителя:// 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 + *Когда предварительная функция 1 перестанет быть предварительной в JDK (N+k), будет добавлен набор посетителей для уровня языка (N+k). Методы, работающие с этой функцией, будут перенесены из предварительных посетителей в новые посетители уровня языка (N+k). Прямой суперкласс каждого предварительного посетителя будет изменён на соответствующий новый посетитель (N+k).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); + }Добавление поддержки посетителей для конструкции языка, являющейся новым видом существующей конструкции
Рассмотрим новую функцию языка — предварительную функцию 2 — в JDK N. Для этой функции вводится новый вид элемента без необходимости в новом интерфейсе элемента верхнего уровня для её моделирования. Например, предположим, что предварительная функция 2 представляет собой новый вид переменной; изменения были бы аналогичными, если бы функция представляла собой новый вид исполняемого элемента или другой существующей конструкции верхнего уровня. В этом случае изменения API более ограничены:// 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; }; }Посетители видов должны поддерживать новый вариант элемента:// 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); + }В свою очередь, посетитель предварительных видов элементов переопределяет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); + }Как и в случае введения нового интерфейса, когда предварительная функция 2 перестанет быть предварительной в JDK (N+k), будет добавлен набор посетителей для уровня языка (N+k). Методы, работающие с новой функцией в посетителях видов, будут перенесены из предварительных посетителей в новые посетители уровня языка (N+k). Прямой суперкласс каждого предварительного посетителя будет изменён на соответствующий новый посетитель (N+k). - конструкция предварительного языка имеет соответствующий новый интерфейс модели и сопутствующую новую константу вида, например новую константу
- Начиная с:
- 1.6
- См. также:
| Класс | Описание |
|---|---|
|
AbstractAnnotationValueVisitor14<R, |
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
AbstractAnnotationValueVisitor6<R, |
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
AbstractAnnotationValueVisitor7<R, |
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
AbstractAnnotationValueVisitor8<R, |
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
AbstractAnnotationValueVisitor9<R, |
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
AbstractAnnotationValueVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии предварительной версии. |
|
AbstractElementVisitor14<R, |
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
AbstractElementVisitor6<R, |
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
AbstractElementVisitor7<R, |
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
AbstractElementVisitor8<R, |
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
AbstractElementVisitor9<R, |
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
AbstractElementVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии предварительной версии. |
|
AbstractTypeVisitor14<R, |
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
AbstractTypeVisitor6<R, |
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
AbstractTypeVisitor7<R, |
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
AbstractTypeVisitor8<R, |
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
AbstractTypeVisitor9<R, |
Базовый посетитель типов со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
AbstractTypeVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Базовый посетитель типов со стандартным поведением, соответствующим исходной версии предварительной версии. |
| ElementFilter | Фильтры для выбора интересующих элементов из коллекции элементов. |
|
ElementKindVisitor14<R, |
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
ElementKindVisitor6<R, |
|
|
ElementKindVisitor7<R, |
|
|
ElementKindVisitor8<R, |
|
|
ElementKindVisitor9<R, |
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
ElementKindVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии предварительной версии. |
| Elements | Вспомогательные методы для работы с элементами программы. |
| Elements.DocCommentKind | Вид комментария документации. |
| Elements.Origin | Происхождение элемента или другого элемента языковой модели. |
|
ElementScanner14<R, |
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
ElementScanner6<R, |
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
ElementScanner7<R, |
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
ElementScanner8<R, |
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
ElementScanner9<R, |
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
ElementScannerPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии предварительной версии. |
|
SimpleAnnotationValueVisitor14<R, |
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
SimpleAnnotationValueVisitor6<R, |
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
SimpleAnnotationValueVisitor7<R, |
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
SimpleAnnotationValueVisitor8<R, |
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
SimpleAnnotationValueVisitor9<R, |
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
SimpleAnnotationValueVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии предварительной версии. |
|
SimpleElementVisitor14<R, |
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
SimpleElementVisitor6<R, |
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
SimpleElementVisitor7<R, |
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
SimpleElementVisitor8<R, |
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
SimpleElementVisitor9<R, |
Простой посетитель элементов программы со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
SimpleElementVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии предварительной версии. |
|
SimpleTypeVisitor14<R, |
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
SimpleTypeVisitor6<R, |
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_6. |
|
SimpleTypeVisitor7<R, |
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_7. |
|
SimpleTypeVisitor8<R, |
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_8. |
|
SimpleTypeVisitor9<R, |
Простой посетитель типов со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
SimpleTypeVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Простой посетитель типов со стандартным поведением, соответствующим исходной версии предварительной версии. |
|
TypeKindVisitor14<R, |
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_14. |
|
TypeKindVisitor6<R, |
|
|
TypeKindVisitor7<R, |
|
|
TypeKindVisitor8<R, |
|
|
TypeKindVisitor9<R, |
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14. |
|
TypeKindVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R, |
Предварительная версия. Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии предварительной версии. |
| 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