Spec-Zone.ru › OpenJDK 25

Пакет javax.lang.model.util

package javax.lang.model.util
Утилиты для обработки элементов программы и типов.

Если для конкретной реализации не указано иное, следует считать, что коллекции, возвращаемые методами этого пакета, не могут быть изменены вызывающим кодом и небезопасны при параллельном доступе.

Если не указано иное, методы этого пакета выбрасывают NullPointerException, если им передан аргумент null.

Примечание к API:

Ожидаемое развитие интерфейсов посетителей

По мере развития языка программирования Java развиваются и интерфейсы посетителей языковой модели, а также конкретные посетители этого пакета. Предварительная функция языка в JDK N может привести к добавлению элементов API в набор посетителей для предварительного уровня языка. Такие новые элементы помечаются как предварительный API с отражением. Существующие методы, спецификация которых обновлена для поддержки предварительной функции, не помечаются как предварительные.

В оставшейся части этого примечания приведены два примера изменений API в модели и посетителях, которые могут быть добавлены для поддержки функции языка. В примерах рассматриваются добавления в раздел элементов языковой модели, однако соответствующие обновления посетителей типов или значений аннотаций были бы аналогичны. Различают два случая:

  • конструкция предварительного языка имеет соответствующий новый интерфейс модели и сопутствующую новую константу вида, например новую константу ElementKind
  • конструкция предварительного языка приводит к появлению нового вида без нового интерфейса модели
Если предварительная функция языка отзывается, а не становится постоянной функцией платформы, ожидается, что связанные с ней элементы API будут удалены. В приведённых ниже примерах описаны изменения API, ожидаемые при превращении предварительной функции в постоянную.

Добавление поддержки посетителей для конструкции языка верхнего уровня

Рассмотрим новую функцию языка — предварительную функцию 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
 +     * 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);
 +    }
Когда предварительная функция 1 перестанет быть предварительной в JDK (N+k), будет добавлен набор посетителей для уровня языка (N+k). Методы, работающие с этой функцией, будут перенесены из предварительных посетителей в новые посетители уровня языка (N+k). Прямой суперкласс каждого предварительного посетителя будет изменён на соответствующий новый посетитель (N+k).

Добавление поддержки посетителей для конструкции языка, являющейся новым видом существующей конструкции

Рассмотрим новую функцию языка — предварительную функцию 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
См. также:
  • JSR 269: Подключаемый API обработки аннотаций
Пакет Описание
javax.lang.model
Типы и иерархии пакетов, составляющих языковую модель Java, — отражающий API, моделирующий объявления и типы языка программирования Java.
javax.lang.model.element
Интерфейсы для моделирования элементов языка программирования Java.
javax.lang.model.type
Интерфейсы для моделирования типов языка программирования Java.
Класс Описание
AbstractAnnotationValueVisitor14<R,P>
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_14.
AbstractAnnotationValueVisitor6<R,P>
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_6.
AbstractAnnotationValueVisitor7<R,P>
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_7.
AbstractAnnotationValueVisitor8<R,P>
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_8.
AbstractAnnotationValueVisitor9<R,P>
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
AbstractAnnotationValueVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Базовый посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии предварительной версии.
AbstractElementVisitor14<R,P>
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_14.
AbstractElementVisitor6<R,P>
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_6.
AbstractElementVisitor7<R,P>
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_7.
AbstractElementVisitor8<R,P>
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_8.
AbstractElementVisitor9<R,P>
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
AbstractElementVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Базовый посетитель элементов программы со стандартным поведением, соответствующим исходной версии предварительной версии.
AbstractTypeVisitor14<R,P>
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_14.
AbstractTypeVisitor6<R,P>
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_6.
AbstractTypeVisitor7<R,P>
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_7.
AbstractTypeVisitor8<R,P>
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_8.
AbstractTypeVisitor9<R,P>
Базовый посетитель типов со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
AbstractTypeVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Базовый посетитель типов со стандартным поведением, соответствующим исходной версии предварительной версии.
ElementFilter
Фильтры для выбора интересующих элементов из коллекции элементов.
ElementKindVisitor14<R,P>
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_14.
ElementKindVisitor6<R,P>
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_6.
ElementKindVisitor7<R,P>
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_7.
ElementKindVisitor8<R,P>
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_8.
ElementKindVisitor9<R,P>
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
ElementKindVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Посетитель элементов программы, основанный на их виде, со стандартным поведением, соответствующим исходной версии предварительной версии.
Elements
Вспомогательные методы для работы с элементами программы.
Elements.DocCommentKind
Вид комментария документации.
Elements.Origin
Происхождение элемента или другого элемента языковой модели.
ElementScanner14<R,P>
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_14.
ElementScanner6<R,P>
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_6.
ElementScanner7<R,P>
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_7.
ElementScanner8<R,P>
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_8.
ElementScanner9<R,P>
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
ElementScannerPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Посетитель-сканер элементов программы со стандартным поведением, соответствующим исходной версии предварительной версии.
SimpleAnnotationValueVisitor14<R,P>
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_14.
SimpleAnnotationValueVisitor6<R,P>
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_6.
SimpleAnnotationValueVisitor7<R,P>
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_7.
SimpleAnnotationValueVisitor8<R,P>
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии RELEASE_8.
SimpleAnnotationValueVisitor9<R,P>
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
SimpleAnnotationValueVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Простой посетитель значений аннотаций со стандартным поведением, соответствующим исходной версии предварительной версии.
SimpleElementVisitor14<R,P>
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_14.
SimpleElementVisitor6<R,P>
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_6.
SimpleElementVisitor7<R,P>
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_7.
SimpleElementVisitor8<R,P>
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии RELEASE_8.
SimpleElementVisitor9<R,P>
Простой посетитель элементов программы со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
SimpleElementVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Простой посетитель элементов программы со стандартным поведением, соответствующим исходной версии предварительной версии.
SimpleTypeVisitor14<R,P>
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_14.
SimpleTypeVisitor6<R,P>
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_6.
SimpleTypeVisitor7<R,P>
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_7.
SimpleTypeVisitor8<R,P>
Простой посетитель типов со стандартным поведением, соответствующим исходной версии RELEASE_8.
SimpleTypeVisitor9<R,P>
Простой посетитель типов со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
SimpleTypeVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Простой посетитель типов со стандартным поведением, соответствующим исходной версии предварительной версии.
TypeKindVisitor14<R,P>
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_14.
TypeKindVisitor6<R,P>
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_6.
TypeKindVisitor7<R,P>
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_7.
TypeKindVisitor8<R,P>
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии RELEASE_8.
TypeKindVisitor9<R,P>
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходным версиям с RELEASE_9 по RELEASE_14.
TypeKindVisitorPreviewПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ<R,P>
Предварительная версия.
Посетитель типов, основанный на их виде, со стандартным поведением, соответствующим исходной версии предварительной версии.
Types
Вспомогательные методы для работы с типами.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API