< prev index next >
src/java.compiler/share/classes/javax/lang/model/util/Elements.java
Print this page
@@ -27,10 +27,11 @@
import java.util.List;
import java.util.Map;
+import javax.lang.model.AnnotatedConstruct;
import javax.lang.model.element.*;
/**
* Utility methods for operating on program elements.
@@ -134,10 +135,144 @@
* @return {@code true} if the element is deprecated, {@code false} otherwise
*/
boolean isDeprecated(Element e);
/**
+ * Returns the <em>naturalness</em> of the given element.
+ *
+ * <p>Note that if an element logically has a naturalness other
+ * than {@link Naturalness#NATURAL NATURAL}, an implementation may
+ * not be able to reliably determine this status if the element is
+ * created from a class file due to limitations of the fidelity of
+ * the class file format in preserving information from source
+ * code.
+ *
+ * @implSpec The default implementation of this method returns
+ * {@link Naturalness#NATURAL NATURAL}.
+ *
+ * @param e the element being examined
+ * @return the naturalness of the given element
+ * @since 9
+ */
+ default Naturalness getNaturalness(Element e) {
+ return Naturalness.NATURAL;
+ }
+
+ /**
+ * Returns the <em>naturalness</em> of the given annotation mirror.
+ *
+ * One example of a mandated construct is the
+ * implicitly declared <em>container annotation</em> used to hold
+ * repeated base annotations of a repeatable annotation type.
+ *
+ * <p>Note that if an annotation mirror logically has a
+ * naturalness other than {@link Naturalness#NATURAL NATURAL}, an
+ * implementation may not be able to reliably determine this
+ * status if the element is created from a class file due to
+ * limitations of the fidelity of the class file format in
+ * preserving information from source code.
+ *
+ * @implSpec The default implementation of this method returns
+ * {@link Naturalness#NATURAL NATURAL}.
+ *
+ * @param c the construct the annotation mirror modifies
+ * @param a the annotation mirror being examined
+ * @return the naturalness of the given annotation mirror
+ * @jls 9.6.3 Repeatable Annotation Types
+ * @jls 9.7.5 Multiple Annotations of the Same Type
+ * @since 9
+ */
+ default Naturalness getNaturalness(AnnotatedConstruct c,
+ AnnotationMirror a) {
+ return Naturalness.NATURAL;
+ }
+
+ /**
+ * Returns the <em>naturalness</em> of the given module directive.
+ *
+ * <p>Note that if a directive mirror logically has a naturalness
+ * other than {@link Naturalness#NATURAL NATURAL}, an
+ * implementation may not be able to reliably determine this
+ * status if the element is created from a class file due to
+ * limitations of the fidelity of the class file format in
+ * preserving information from source code.
+ *
+ * @implSpec The default implementation of this method returns
+ * {@link Naturalness#NATURAL NATURAL}.
+ *
+ * @param m the module of the directive
+ * @param directive the module directive being examined
+ * @return the naturalness of the given directive
+ * @since 9
+ */
+ default Naturalness getNaturalness(ModuleElement m,
+ ModuleElement.Directive directive) {
+ return Naturalness.NATURAL;
+ }
+
+ /**
+ * The <em>naturalness</em> of a construct. The naturalness of a
+ * construct concerns the consistency between how a construct is
+ * declared in source code (explicitly, implicitly, or not at all)
+ * compared to how the construct is represented in this model.
+ *
+ * <p>Note that it is possible additional kinds of naturalness
+ * will be added in future versions of the platform.
+ *
+ * @jls 13.1 The Form of a Binary
+ * @since 9
+ */
+ enum Naturalness {
+ /**
+ * A natural construct is explicitly declared in source code.
+ */
+ NATURAL,
+
+ /**
+ * A mandated construct is one not explicitly declared in the
+ * source code, but whose presence is mandated by the
+ * specification; such a construct is said to be implicitly declared.
+ *
+ * One example of a mandated element is a <em>default
+ * constructor</em> in a class that contains no explicit
+ * constructor declarations.
+ *
+ * Another example of a mandated construct is the implicitly
+ * declared <em>container annotation</em> used to hold
+ * multiple annotations of a repeatable annotation type.
+ *
+ * @jls 8.8.9 Default Constructor
+ * @jls 9.6.3 Repeatable Annotation Types
+ * @jls 9.7.5 Multiple Annotations of the Same Type
+ */
+ MANDATED,
+
+ /**
+ * A synthetic construct is one that is neither implicitly nor
+ * explicitly declared in the source code. Synthetic
+ * constructs are commonly translation artifacts created by
+ * compiler.
+ */
+ SYNTHETIC;
+ }
+
+ /**
+ * Returns {@code true} if the executable element is a bridge
+ * method, {@code false} otherwise.
+ *
+ * @implSpec The default implementation of this method returns {@code false}.
+ *
+ * @param e the executable being examined
+ * @return {@code true} if the executable element is a bridge
+ * method, {@code false} otherwise
+ * @since 9
+ */
+ default boolean isBridge(ExecutableElement e) {
+ return false;
+ }
+
+ /**
* Returns the <i>binary name</i> of a type element.
*
* @param type the type element being examined
* @return the binary name
*
< prev index next >