emul/src/main/java/java/lang/reflect/AnnotatedElement.java
author Jaroslav Tulach <jtulach@netbeans.org>
Tue, 04 Dec 2012 13:29:17 +0100
branchjdk7-b147
changeset 258 21b390daf444
permissions -rw-r--r--
Bringing in few reflection types, in order to support Class.getMethods
     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 }