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

Интерфейсы, используемые для моделирования элементов языка программирования Java. Термин "элемент" в этом пакете используется для обозначения программных элементов, объявленных сущностей, составляющих программу. Элементы включают классы, интерфейсы, методы, конструкторы и поля. Интерфейсы в этом пакете не моделируют структуру программы внутри тела метода; например, нет представления о for цикле или try-finally блоке. Однако интерфейсы могут моделировать некоторые структуры, встречающиеся только внутри тел методов, такие как локальные переменные и анонимные классы.

При использовании в контексте обработки аннотаций должна быть возвращена точная модель представляемого элемента. Поскольку это модель языка, исходный код предоставляет эталонное (ссылочное) представление рассматриваемого конструкта, а не представление в исполняемом выводе, таком как файл класса. Исполняемый вывод может служить основой для создания моделирующего элемента. Однако процесс преобразования исходного кода в исполняемый вывод может не позволить восстановить некоторые аспекты представления исходного кода. Например, аннотации с source retention нельзя восстановить из файлов классов, и файлы классов могут не содержать информацию о позициях в исходном коде. Имена параметров могут быть невосстановимыми из файлов классов. Модификаторы modifiers элемента, созданного из файла класса, в некоторых случаях могут отличаться от элемента для той же декларации, созданного из исходного файла, включая:

  • strictfp для класса или интерфейса
  • final для параметра
  • protected, private, и static для классов и интерфейсов
Некоторые элементы, которые обязательны, могут не быть помечены как такие, когда создаются из файлов классов. Кроме того, синтезированные конструкции в файле класса, такие как методы-аксессоры, используемые при реализации вложенных классов, и мосты методов, используемые при реализации ковариативных возвратов, являются артефактами трансляции, строго находящимися за пределами этой модели. Однако при работе с файлами классов полезно иметь возможность работать с такими элементами, отсеивая их при необходимости.

При обработке аннотаций необходимо работать с неполными или ошибочными программами; однако гарантий относительно характера результирующей модели меньше. Если исходный код не является синтаксически правильным или имеет другую невосстановимую ошибку, которая не могла быть устранена путем генерации новых типов, модель может или не может быть предоставлена как вопрос качества реализации. Если программа синтаксически верна, но ошибочна в другом отношении, любая возвращаемая модель должна иметь не меньше информации, чем если бы все тела методов в программе были заменены на "throw new RuntimeException();". Если программа ссылается на отсутствующий тип Xyz, возвращаемая модель должна содержать не меньше информации, чем если бы декларация типа Xyz предполагалась "class Xyz {}", "interface Xyz {}", "enum Xyz {}", или "@interface Xyz {}". Если программа ссылается на отсутствующий тип Xyz<K1, ... ,Kn>, возвращаемая модель должна содержать не меньше информации, чем если бы декларация Xyz предполагалась "class Xyz<T1, ... ,Tn> {}" или "interface Xyz<T1, ... ,Tn> {}".

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

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

Since:
1.6
Интерфейс Описание
AnnotationMirror

Представляет аннотацию.

AnnotationValue

Представляет значение элемента типа аннотации.

AnnotationValueVisitor<R,​P>

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

Element

Представляет программный элемент, такой как модуль, пакет, класс или метод.

ElementVisitor<R,​P>

Посетитель программных элементов в стиле шаблона проектирования посетитель.

ExecutableElement

Представляет метод, конструктор или инициализатор (статический или экземплярный) класса или интерфейса, включая элементы типа аннотации.

ModuleElement

Представляет программный элемент модуля.

ModuleElement.Directive

Представляет директиву в декларации этого модуля.

ModuleElement.DirectiveVisitor<R,​P>

Посетитель модульных директив в стиле шаблона проектирования посетитель.

ModuleElement.ExportsDirective

Экспортируемый пакет модуля.

ModuleElement.OpensDirective

Открытый пакет модуля.

ModuleElement.ProvidesDirective

Реализация сервиса, предоставляемого модулем.

ModuleElement.RequiresDirective

Зависимость модуля.

ModuleElement.UsesDirective

Ссылка на сервис, используемый модулем.

Name

Неизменяемая последовательность символов.

PackageElement

Представляет программный элемент пакета.

Parameterizable

Интерфейс-миксин для элемента, имеющего параметры типа.

QualifiedNameable

Интерфейс-миксин для элемента, имеющего полное имя.

TypeElement

Представляет программный элемент класса или интерфейса.

TypeParameterElement

Представляет формальный параметр типа для обобщенного класса, интерфейса, метода или конструктора.

VariableElement

Представляет поле, enum константу, параметр метода или конструктора, локальную переменную, переменную ресурса или параметр исключения.

Перечисление Описание
ElementKind

Тип элемента.

Modifier

Представляет модификатор программного элемента, такого как класс, метод или поле.

ModuleElement.DirectiveKind

Тип директивы.

NestingKind

Тип вложенности элемента типа.

Исключение Описание
UnknownAnnotationValueException

Указывает, что был обнаружен неизвестный тип значения аннотации.

UnknownDirectiveException

Указывает, что был обнаружен неизвестный тип модульной директивы.

UnknownElementException

Указывает, что был обнаружен неизвестный тип элемента.

© 1993, 2020, 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/11/docs/api/java.compiler/javax/lang/model/element/package-summary.html

Spec-Zone .ru
спецификации, руководства, описания, API