001: /*
002: * Copyright 2005-2006 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.lang.model.util;
027:
028: import java.util.List;
029: import javax.lang.model.element.*;
030:
031: import javax.lang.model.type.TypeMirror;
032: import static javax.lang.model.SourceVersion.*;
033: import javax.lang.model.SourceVersion;
034: import javax.annotation.processing.SupportedSourceVersion;
035:
036: /**
037: * A skeletal visitor for annotation values with default behavior
038: * appropriate for the {@link SourceVersion#RELEASE_6 RELEASE_6}
039: * source version.
040: *
041: * <p> <b>WARNING:</b> The {@code AnnotationValueVisitor} interface
042: * implemented by this class may have methods added to it in the
043: * future to accommodate new, currently unknown, language structures
044: * added to future versions of the Java™ programming language.
045: * Therefore, methods whose names begin with {@code "visit"} may be
046: * added to this class in the future; to avoid incompatibilities,
047: * classes which extend this class should not declare any instance
048: * methods with names beginning with {@code "visit"}.
049: *
050: * <p>When such a new visit method is added, the default
051: * implementation in this class will be to call the {@link
052: * #visitUnknown visitUnknown} method. A new abstract annotation
053: * value visitor class will also be introduced to correspond to the
054: * new language level; this visitor will have different default
055: * behavior for the visit method in question. When the new visitor is
056: * introduced, all or portions of this visitor may be deprecated.
057: *
058: * @param <R> the return type of this visitor's methods
059: * @param <P> the type of the additional parameter to this visitor's methods.
060: *
061: * @author Joseph D. Darcy
062: * @author Scott Seligman
063: * @author Peter von der Ahé
064: * @version 1.10 07/05/05
065: * @since 1.6
066: */
067: @SupportedSourceVersion(RELEASE_6)
068: public abstract class AbstractAnnotationValueVisitor6<R, P> implements
069: AnnotationValueVisitor<R, P> {
070:
071: /**
072: * Constructor for concrete subclasses to call.
073: */
074: protected AbstractAnnotationValueVisitor6() {
075: }
076:
077: /**
078: * Visits an annotation value as if by passing itself to that
079: * value's {@link AnnotationValue#accept accept}. The invocation
080: * {@code v.visit(av)} is equivalent to {@code av.accept(v, p)}.
081: * @param av {@inheritDoc}
082: * @param p {@inheritDoc}
083: */
084: public final R visit(AnnotationValue av, P p) {
085: return av.accept(this , p);
086: }
087:
088: /**
089: * Visits an annotation value as if by passing itself to that
090: * value's {@link AnnotationValue#accept accept} method passing
091: * {@code null} for the additional parameter. The invocation
092: * {@code v.visit(av)} is equivalent to {@code av.accept(v,
093: * null)}.
094: * @param av {@inheritDoc}
095: */
096: public final R visit(AnnotationValue av) {
097: return av.accept(this , null);
098: }
099:
100: /**
101: * {@inheritDoc}
102: *
103: * <p>The default implementation of this method in {@code
104: * AbstractAnnotationValueVisitor6} will always throw {@code
105: * UnknownAnnotationValueException}. This behavior is not
106: * required of a subclass.
107: *
108: * @param av {@inheritDoc}
109: * @param p {@inheritDoc}
110: */
111: public R visitUnknown(AnnotationValue av, P p) {
112: throw new UnknownAnnotationValueException(av, p);
113: }
114: }
|