class file attributes for the java.lang.classfile library.java.lang.classfile.attribute package contains interfaces describing specific class file
attributes, including predefined (JVMS 4.7) and JDK-specific nonstandard attributes, whose mappers are
defined in Attributes. This package summary provides an overview to the class file attribute system,
including Attribute, AttributedElement, AttributeMapper, and CustomAttribute, which
do not reside in this package.
APIs in this package perform null and unrepresentable argument checks, unless otherwise noted.
AttributedElement. In addition to that, many attributes
implement ClassElement, FieldElement, MethodElement, or CodeElement, and these
attributes are generally delivered when their enclosing elements are viewed as CompoundElements in streaming
traversal, unless otherwise specified.
When read from class files, the attributes are lazily inflated; the contents of these attributes are not
evaluated to speed up parsing, and user-defined attributes from AttributeMapper#readAttribute should be
lazy too. Contents to users interest can be read on demand, so errors in one attribute does not prevent access to
other attributes.
Attribute contents are represented with constant pool entries to closely represent the original class file.
These entries provide conversion methods to view them as validated symbolic descriptors. Check java. for effective reading of constant pool entries, which can affect attribute reading
speed as well. See this example of checking the presence of a Deprecated annotation:
private static final String DEPRECATED_DESC = Deprecated.class.descriptorString(); static boolean hasDeprecated(AttributedElement element) { var annotations = element.findAttribute(Attributes.runtimeVisibleAnnotations()) .map(RuntimeVisibleAnnotationsAttribute::annotations) .orElse(List.of()); for (var anno : annotations) { // equalsString reduces extra computations for raw UTF-8 entries if (anno.className().equalsString(DEPRECATED_DESC)) { return true; } } return false; }
Due to the lazy nature of class file parsing, IllegalArgumentException indicating malformed
class file data can be thrown at any method invocation, either from the attribute itself due to structural
corruption, or from a constant pool entry referred by the attribute. Some attributes, such as annotation attributes,
must be ignored silently if they are malformed per JVMS; as a result, attribute processing code should anticipate
IllegalArgumentException and skip, instead of propagating the failure, on such attributes.
ClassElement, FieldElement, MethodElement, or
CodeElement, so they can be sent to the respective ClassFileBuilder to be written as part of those
structure. Attributes define if they can appear multiple times in one
structure; if they cannot, the last attribute instance supplied to the builder is the one written to the final
structure. Some attributes, such as BootstrapMethodsAttribute, implement none of those interfaces. They are
created through other means, specified in the modeling interface for each of the attributes. Attributes for a RecordComponentInfo are supplied through its factory methods.
The attribute factories generally have two sets of factory methods: one that accepts symbolic information
representing the uses, and another that accepts constant pool entries. Most of time, the symbolic factories are
sufficent, but the constant pool entry ones can be used for fine-grained control over class file generation;
see "Writing the constant pool entries" for more details.
Many attributes can be bulk-copied if the data it depends on does not change; this information is exposed in AttributeMapper#stability() and is documented for each attribute on its modeling interface. Ability to bulk-copy
can massively speed up class file generation or transformation. In addition, in conjunction with ClassFile., attributes read from other class files that cannot confirm its data
is still valid for the currently building class file may be dropped.
Attribute, AttributeMapper, Attributes
| Modifier and Type | Interface and Description |
|---|---|
| public interface | AnnotationDefaultAttribute
Models the |
| public interface | BootstrapMethodsAttribute
Models the |
| public interface | CharacterRangeInfo
Models a single character range entry in the |
| public interface | CharacterRangeTableAttribute
Models the |
| public interface | CodeAttribute
Models the |
| public interface | CompilationIDAttribute
Models the |
| public interface | ConstantValueAttribute
Models the |
| public interface | DeprecatedAttribute
Models the |
| public interface | EnclosingMethodAttribute
Models the |
| public interface | ExceptionsAttribute
Models the |
| public interface | InnerClassesAttribute
Models the |
| public interface | InnerClassInfo
Models a single entry in the |
| public interface | LineNumberInfo
Models a single line number entry in the |
| public interface | LineNumberTableAttribute
Models the |
| public interface | LocalVariableInfo
Models a single local variable in the |
| public interface | LocalVariableTableAttribute
Models the |
| public interface | LocalVariableTypeInfo
Models a single local variable in the |
| public interface | LocalVariableTypeTableAttribute
Models the |
| public interface | MethodParameterInfo
Models a single method parameter in the |
| public interface | MethodParametersAttribute
Models the |
| public interface | ModuleAttribute
Models the |
| public interface | ModuleExportInfo
Models a single "exports" declaration in the |
| public interface | ModuleHashesAttribute
Models the |
| public interface | ModuleHashInfo
Models hash information for a single module in the |
| public interface | ModuleMainClassAttribute
Models the |
| public interface | ModuleOpenInfo
Models a single "opens" declaration in the |
| public interface | ModulePackagesAttribute
Models the |
| public interface | ModuleProvideInfo
Models a single "provides" declaration in the |
| public interface | ModuleRequireInfo
Models a single "requires" declaration in the |
| public interface | ModuleResolutionAttribute
Models the |
| public interface | ModuleTargetAttribute
Models the |
| public interface | NestHostAttribute
Models the |
| public interface | NestMembersAttribute
Models the |
| public interface | PermittedSubclassesAttribute
Models the |
| public interface | RecordAttribute
Models the |
| public interface | RecordComponentInfo
Models a single record component in the |
| public interface | RuntimeInvisibleAnnotationsAttribute
Models the |
| public interface | RuntimeInvisibleParameterAnnotationsAttribute
Models the |
| public interface | RuntimeInvisibleTypeAnnotationsAttribute
Models the |
| public interface | RuntimeVisibleAnnotationsAttribute
Models the |
| public interface | RuntimeVisibleParameterAnnotationsAttribute
Models the |
| public interface | RuntimeVisibleTypeAnnotationsAttribute
Models the |
| public interface | SignatureAttribute
Models the |
| public interface | SourceDebugExtensionAttribute
Models the |
| public interface | SourceFileAttribute
Models the |
| public interface | SourceIDAttribute
Models the |
| public interface | StackMapFrameInfo
Models a stack map frame in a |
| public interface | StackMapTableAttribute
Models the |
| public interface | SyntheticAttribute
Models the |
| public interface | UnknownAttribute
Models an unknown attribute read from a |