emul/mini/src/main/java/java/lang/reflect/AnnotatedElement.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 26 Jan 2013 08:47:05 +0100
changeset 592 5e13b1ac2886
parent 258 21b390daf444
permissions -rw-r--r--
In order to support fields of the same name in subclasses we are now prefixing them with name of the class that defines them. To provide convenient way to access them from generated bytecode and also directly from JavaScript, there is a getter/setter function for each field. It starts with _ followed by the field name. If called with a parameter, it sets the field, with a parameter it just returns it.
     1 /*
     2  * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    25 
    26 package java.lang.reflect;
    27 
    28 import java.lang.annotation.Annotation;
    29 
    30 /**
    31  * Represents an annotated element of the program currently running in this
    32  * VM.  This interface allows annotations to be read reflectively.  All
    33  * annotations returned by methods in this interface are immutable and
    34  * serializable.  It is permissible for the caller to modify the
    35  * arrays returned by accessors for array-valued enum members; it will
    36  * have no affect on the arrays returned to other callers.
    37  *
    38  * <p>If an annotation returned by a method in this interface contains
    39  * (directly or indirectly) a {@link Class}-valued member referring to
    40  * a class that is not accessible in this VM, attempting to read the class
    41  * by calling the relevant Class-returning method on the returned annotation
    42  * will result in a {@link TypeNotPresentException}.
    43  *
    44  * <p>Similarly, attempting to read an enum-valued member will result in
    45  * a {@link EnumConstantNotPresentException} if the enum constant in the
    46  * annotation is no longer present in the enum type.
    47  *
    48  * <p>Finally, Attempting to read a member whose definition has evolved
    49  * incompatibly will result in a {@link
    50  * java.lang.annotation.AnnotationTypeMismatchException} or an
    51  * {@link java.lang.annotation.IncompleteAnnotationException}.
    52  *
    53  * @see java.lang.EnumConstantNotPresentException
    54  * @see java.lang.TypeNotPresentException
    55  * @see java.lang.annotation.AnnotationFormatError
    56  * @see java.lang.annotation.AnnotationTypeMismatchException
    57  * @see java.lang.annotation.IncompleteAnnotationException
    58  * @since 1.5
    59  * @author Josh Bloch
    60  */
    61 public interface AnnotatedElement {
    62     /**
    63      * Returns true if an annotation for the specified type
    64      * is present on this element, else false.  This method
    65      * is designed primarily for convenient access to marker annotations.
    66      *
    67      * @param annotationClass the Class object corresponding to the
    68      *        annotation type
    69      * @return true if an annotation for the specified annotation
    70      *     type is present on this element, else false
    71      * @throws NullPointerException if the given annotation class is null
    72      * @since 1.5
    73      */
    74      boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);
    75 
    76    /**
    77      * Returns this element's annotation for the specified type if
    78      * such an annotation is present, else null.
    79      *
    80      * @param annotationClass the Class object corresponding to the
    81      *        annotation type
    82      * @return this element's annotation for the specified annotation type if
    83      *     present on this element, else null
    84      * @throws NullPointerException if the given annotation class is null
    85      * @since 1.5
    86      */
    87     <T extends Annotation> T getAnnotation(Class<T> annotationClass);
    88 
    89     /**
    90      * Returns all annotations present on this element.  (Returns an array
    91      * of length zero if this element has no annotations.)  The caller of
    92      * this method is free to modify the returned array; it will have no
    93      * effect on the arrays returned to other callers.
    94      *
    95      * @return all annotations present on this element
    96      * @since 1.5
    97      */
    98     Annotation[] getAnnotations();
    99 
   100     /**
   101      * Returns all annotations that are directly present on this
   102      * element.  Unlike the other methods in this interface, this method
   103      * ignores inherited annotations.  (Returns an array of length zero if
   104      * no annotations are directly present on this element.)  The caller of
   105      * this method is free to modify the returned array; it will have no
   106      * effect on the arrays returned to other callers.
   107      *
   108      * @return All annotations directly present on this element
   109      * @since 1.5
   110      */
   111     Annotation[] getDeclaredAnnotations();
   112 }