001: /*
002: * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package javax.annotation.processing;
027:
028: import javax.lang.model.element.Element;
029: import javax.lang.model.element.TypeElement;
030: import java.util.Set;
031: import java.lang.annotation.Annotation;
032:
033: /**
034: * An annotation processing tool framework will {@linkplain
035: * Processor#process provide an annotation processor with an object
036: * implementing this interface} so that the processor can query for
037: * information about a round of annotation processing.
038: *
039: * @author Joseph D. Darcy
040: * @author Scott Seligman
041: * @author Peter von der Ahé
042: * @version 1.13 07/05/05
043: * @since 1.6
044: */
045: public interface RoundEnvironment {
046: /**
047: * Returns {@code true} if types generated by this round will not
048: * be subject to a subsequent round of annotation processing;
049: * returns {@code false} otherwise.
050: *
051: * @return {@code true} if types generated by this round will not
052: * be subject to a subsequent round of annotation processing;
053: * returns {@code false} otherwise
054: */
055: boolean processingOver();
056:
057: /**
058: * Returns {@code true} if an error was raised in the prior round
059: * of processing; returns {@code false} otherwise.
060: *
061: * @return {@code true} if an error was raised in the prior round
062: * of processing; returns {@code false} otherwise
063: */
064: boolean errorRaised();
065:
066: /**
067: * Returns the root elements for annotation processing generated
068: * by the prior round.
069: *
070: * @return the root elements for annotation processing generated
071: * by the prior round, or an empty set if there were none
072: */
073: Set<? extends Element> getRootElements();
074:
075: /**
076: * Returns the elements annotated with the given annotation type.
077: * The annotation may appear directly or be inherited. Only
078: * package elements and type elements <i>included</i> in this
079: * round of annotation processing, or declarations of members,
080: * constructors, parameters, or type parameters declared within
081: * those, are returned. Included type elements are {@linkplain
082: * #getRootElements root types} and any member types nested within
083: * them. Elements in a package are not considered included simply
084: * because a {@code package-info} file for that package was
085: * created.
086: *
087: * @param a annotation type being requested
088: * @return the elements annotated with the given annotation type,
089: * or an empty set if there are none
090: * @throws IllegalArgumentException if the argument does not
091: * represent an annotation type
092: */
093: Set<? extends Element> getElementsAnnotatedWith(TypeElement a);
094:
095: /**
096: * Returns the elements annotated with the given annotation type.
097: * The annotation may appear directly or be inherited. Only
098: * package elements and type elements <i>included</i> in this
099: * round of annotation processing, or declarations of members,
100: * constructors, parameters, or type parameters declared within
101: * those, are returned. Included type elements are {@linkplain
102: * #getRootElements root types} and any member types nested within
103: * them. Elements in a package are not considered included simply
104: * because a {@code package-info} file for that package was
105: * created.
106: *
107: * @param a annotation type being requested
108: * @return the elements annotated with the given annotation type,
109: * or an empty set if there are none
110: * @throws IllegalArgumentException if the argument does not
111: * represent an annotation type
112: */
113: Set<? extends Element> getElementsAnnotatedWith(
114: Class<? extends Annotation> a);
115: }
|