RoundEnvironment.java revision 2571:10fc81ac75b4
1/* 2 * Copyright (c) 2005, 2007, 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 26package javax.annotation.processing; 27 28import javax.lang.model.element.Element; 29import javax.lang.model.element.TypeElement; 30import java.util.Set; 31import java.lang.annotation.Annotation; 32 33/** 34 * An annotation processing tool framework will {@linkplain 35 * Processor#process provide an annotation processor with an object 36 * implementing this interface} so that the processor can query for 37 * information about a round of annotation processing. 38 * 39 * @author Joseph D. Darcy 40 * @author Scott Seligman 41 * @author Peter von der Ahé 42 * @since 1.6 43 */ 44public interface RoundEnvironment { 45 /** 46 * Returns {@code true} if types generated by this round will not 47 * be subject to a subsequent round of annotation processing; 48 * returns {@code false} otherwise. 49 * 50 * @return {@code true} if types generated by this round will not 51 * be subject to a subsequent round of annotation processing; 52 * returns {@code false} otherwise 53 */ 54 boolean processingOver(); 55 56 /** 57 * Returns {@code true} if an error was raised in the prior round 58 * of processing; returns {@code false} otherwise. 59 * 60 * @return {@code true} if an error was raised in the prior round 61 * of processing; returns {@code false} otherwise 62 */ 63 boolean errorRaised(); 64 65 /** 66 * Returns the root elements for annotation processing generated 67 * by the prior round. 68 * 69 * @return the root elements for annotation processing generated 70 * by the prior round, or an empty set if there were none 71 */ 72 Set<? extends Element> getRootElements(); 73 74 /** 75 * Returns the elements annotated with the given annotation type. 76 * The annotation may appear directly or be inherited. Only 77 * package elements and type elements <i>included</i> in this 78 * round of annotation processing, or declarations of members, 79 * constructors, parameters, or type parameters declared within 80 * those, are returned. Included type elements are {@linkplain 81 * #getRootElements root types} and any member types nested within 82 * them. Elements in a package are not considered included simply 83 * because a {@code package-info} file for that package was 84 * created. 85 * 86 * @param a annotation type being requested 87 * @return the elements annotated with the given annotation type, 88 * or an empty set if there are none 89 * @throws IllegalArgumentException if the argument does not 90 * represent an annotation type 91 */ 92 Set<? extends Element> getElementsAnnotatedWith(TypeElement a); 93 94 /** 95 * Returns the elements annotated with the given annotation type. 96 * The annotation may appear directly or be inherited. Only 97 * package elements and type elements <i>included</i> in this 98 * round of annotation processing, or declarations of members, 99 * constructors, parameters, or type parameters declared within 100 * those, are returned. Included type elements are {@linkplain 101 * #getRootElements root types} and any member types nested within 102 * them. Elements in a package are not considered included simply 103 * because a {@code package-info} file for that package was 104 * created. 105 * 106 * @param a annotation type being requested 107 * @return the elements annotated with the given annotation type, 108 * or an empty set if there are none 109 * @throws IllegalArgumentException if the argument does not 110 * represent an annotation type 111 */ 112 Set<? extends Element> getElementsAnnotatedWith(Class<? extends Annotation> a); 113} 114