Spec-Zone.ru › OpenJDK 24

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

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

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

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

API Note:

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

По мере развития языка программирования 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,
 
Метод default добавляется в ElementVisitor для поддержки новой конструкции:
 //  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.
END_OF_DOCUMENT_MARKER
ElementScanner7<R,P>
A scanning visitor of program elements with default behavior appropriate for the RELEASE_7 source version.
ElementScanner8<R,P>
A scanning visitor of program elements with default behavior appropriate for the RELEASE_8 source version.
ElementScanner9<R,P>
A scanning visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14.
ElementScannerPreviewPREVIEW<R,P>
Предварительный просмотр.
A scanning visitor of program elements with default behavior appropriate for a preview source version.
SimpleAnnotationValueVisitor14<R,P>
A simple visitor for annotation values with default behavior appropriate for source version RELEASE_14.
SimpleAnnotationValueVisitor6<R,P>
A simple visitor for annotation values with default behavior appropriate for the RELEASE_6 source version.
SimpleAnnotationValueVisitor7<R,P>
A simple visitor for annotation values with default behavior appropriate for the RELEASE_7 source version.
SimpleAnnotationValueVisitor8<R,P>
A simple visitor for annotation values with default behavior appropriate for the RELEASE_8 source version.
SimpleAnnotationValueVisitor9<R,P>
A simple visitor for annotation values with default behavior appropriate for source versions RELEASE_9 through RELEASE_14.
SimpleAnnotationValueVisitorPreviewPREVIEW<R,P>
Предварительный просмотр.
A simple visitor for annotation values with default behavior appropriate for a preview source version.
SimpleElementVisitor14<R,P>
A simple visitor of program elements with default behavior appropriate for the RELEASE_14 source version.
SimpleElementVisitor6<R,P>
A simple visitor of program elements with default behavior appropriate for the RELEASE_6 source version.
SimpleElementVisitor7<R,P>
A simple visitor of program elements with default behavior appropriate for the RELEASE_7 source version.
SimpleElementVisitor8<R,P>
A simple visitor of program elements with default behavior appropriate for the RELEASE_8 source version.
SimpleElementVisitor9<R,P>
A simple visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14.
SimpleElementVisitorPreviewPREVIEW<R,P>
Предварительный просмотр.
A simple visitor of program elements with default behavior appropriate for a preview source version.
SimpleTypeVisitor14<R,P>
A simple visitor of types with default behavior appropriate for source version RELEASE_14.
SimpleTypeVisitor6<R,P>
A simple visitor of types with default behavior appropriate for the RELEASE_6 source version.
SimpleTypeVisitor7<R,P>
A simple visitor of types with default behavior appropriate for the RELEASE_7 source version.
SimpleTypeVisitor8<R,P>
A simple visitor of types with default behavior appropriate for the RELEASE_8 source version.
SimpleTypeVisitor9<R,P>
A simple visitor of types with default behavior appropriate for source versions RELEASE_9 through RELEASE_14.
SimpleTypeVisitorPreviewPREVIEW<R,P>
Предварительный просмотр.
A simple visitor of types with default behavior appropriate for a preview source version.
TypeKindVisitor14<R,P>
A visitor of types based on their kind with default behavior appropriate for source version RELEASE_14.
TypeKindVisitor6<R,P>
A visitor of types based on their kind with default behavior appropriate for the RELEASE_6 source version.
TypeKindVisitor7<R,P>
A visitor of types based on their kind with default behavior appropriate for the RELEASE_7 source version.
TypeKindVisitor8<R,P>
A visitor of types based on their kind with default behavior appropriate for the RELEASE_8 source version.
TypeKindVisitor9<R,P>
A visitor of types based on their kind with default behavior appropriate for source versions RELEASE_9 through RELEASE_14.
TypeKindVisitorPreviewPREVIEW<R,P>
Предварительный просмотр.
A visitor of types based on their kind with default behavior appropriate for a preview source version.
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://download.java.net/java/early_access/jdk24/docs/api/java.compiler/javax/lang/model/util/package-summary.html

Spec-Zone.ru

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