rt/emul/mini/src/main/java/java/lang/annotation/Target.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 26 Feb 2013 16:54:16 +0100
changeset 772 d382dacfd73f
parent 554 emul/mini/src/main/java/java/lang/annotation/Target.java@05224402145d
permissions -rw-r--r--
Moving modules around so the runtime is under one master pom and can be built without building other modules that are in the repository
     1 /*
     2  * Copyright (c) 2003, 2004, 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.annotation;
    27 
    28 /**
    29  * Indicates the kinds of program element to which an annotation type
    30  * is applicable.  If a Target meta-annotation is not present on an
    31  * annotation type declaration, the declared type may be used on any
    32  * program element.  If such a meta-annotation is present, the compiler
    33  * will enforce the specified usage restriction.
    34  *
    35  * For example, this meta-annotation indicates that the declared type is
    36  * itself a meta-annotation type.  It can only be used on annotation type
    37  * declarations:
    38  * <pre>
    39  *    &#064;Target(ElementType.ANNOTATION_TYPE)
    40  *    public &#064;interface MetaAnnotationType {
    41  *        ...
    42  *    }
    43  * </pre>
    44  * This meta-annotation indicates that the declared type is intended solely
    45  * for use as a member type in complex annotation type declarations.  It
    46  * cannot be used to annotate anything directly:
    47  * <pre>
    48  *    &#064;Target({})
    49  *    public &#064;interface MemberType {
    50  *        ...
    51  *    }
    52  * </pre>
    53  * It is a compile-time error for a single ElementType constant to
    54  * appear more than once in a Target annotation.  For example, the
    55  * following meta-annotation is illegal:
    56  * <pre>
    57  *    &#064;Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
    58  *    public &#064;interface Bogus {
    59  *        ...
    60  *    }
    61  * </pre>
    62  */
    63 @Documented
    64 @Retention(RetentionPolicy.RUNTIME)
    65 @Target(ElementType.ANNOTATION_TYPE)
    66 public @interface Target {
    67     ElementType[] value();
    68 }