1 /*
   2  * Copyright (c) 2005, 2020, 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 javax.lang.model.util;
  27 
  28 
  29 import java.util.List;
  30 import javax.lang.model.element.*;
  31 
  32 import javax.lang.model.type.TypeMirror;
  33 import static javax.lang.model.SourceVersion.*;
  34 import javax.lang.model.SourceVersion;
  35 import javax.annotation.processing.SupportedSourceVersion;
  36 
  37 /**
  38  * A simple visitor for annotation values with default behavior
  39  * appropriate for the {@link SourceVersion#RELEASE_6 RELEASE_6}
  40  * source version.  Visit methods call {@link
  41  * #defaultAction} passing their arguments to {@code defaultAction}'s
  42  * corresponding parameters.
  43  *
  44  * @apiNote
  45  * Methods in this class may be overridden subject to their general
  46  * contract.
  47  *
  48  * <p id=note_for_subclasses><strong>WARNING:</strong> The {@code
  49  * AnnotationValueVisitor} interface implemented by this class may
  50  * have methods added to it in the future to accommodate new,
  51  * currently unknown, language structures added to future versions of
  52  * the Java&trade; programming language.  Therefore, methods whose
  53  * names begin with {@code "visit"} may be added to this class in the
  54  * future; to avoid incompatibilities, classes and subclasses which
  55  * extend this class should not declare any instance methods with
  56  * names beginning with {@code "visit"}.</p>
  57  *
  58  * <p>When such a new visit method is added, the default
  59  * implementation in this class will be to directly or indirectly call
  60  * the {@link #visitUnknown visitUnknown} method.  A new simple
  61  * annotation value visitor class will also be introduced to
  62  * correspond to the new language level; this visitor will have
  63  * different default behavior for the visit method in question.  When
  64  * a new visitor is introduced, portions of this visitor class may be
  65  * deprecated, including its constructors.
  66  *
  67  * @param <R> the return type of this visitor's methods
  68  * @param <P> the type of the additional parameter to this visitor's methods.
  69  *
  70  * @author Joseph D. Darcy
  71  * @author Scott Seligman
  72  * @author Peter von der Ah&eacute;
  73  *
  74  * @see SimpleAnnotationValueVisitor7
  75  * @see SimpleAnnotationValueVisitor8
  76  * @see SimpleAnnotationValueVisitor9
  77  * @see SimpleAnnotationValueVisitor14
  78  * @since 1.6
  79  */
  80 @SupportedSourceVersion(RELEASE_6)
  81 public class SimpleAnnotationValueVisitor6<R, P>
  82     extends AbstractAnnotationValueVisitor6<R, P> {
  83 
  84     /**
  85      * Default value to be returned; {@link #defaultAction
  86      * defaultAction} returns this value unless the method is
  87      * overridden.
  88      */
  89     protected final R DEFAULT_VALUE;
  90 
  91     /**
  92      * Constructor for concrete subclasses; uses {@code null} for the
  93      * default value.
  94      * @deprecated Release 6 is obsolete; update to a visitor for a newer
  95      * release level.
  96      */
  97     @Deprecated(since="9")
  98     protected SimpleAnnotationValueVisitor6() {
  99         super();
 100         DEFAULT_VALUE = null;
 101     }
 102 
 103     /**
 104      * Constructor for concrete subclasses; uses the argument for the
 105      * default value.
 106      *
 107      * @param defaultValue the value to assign to {@link #DEFAULT_VALUE}
 108      * @deprecated Release 6 is obsolete; update to a visitor for a newer
 109      * release level.
 110      */
 111     @Deprecated(since="9")
 112     protected SimpleAnnotationValueVisitor6(R defaultValue) {
 113         super();
 114         DEFAULT_VALUE = defaultValue;
 115     }
 116 
 117     /**
 118      * The default action for visit methods.
 119      *
 120      * @implSpec The implementation in this class just returns {@link
 121      * #DEFAULT_VALUE}; subclasses will commonly override this method.
 122      *
 123      * @param o the value of the annotation
 124      * @param p a visitor-specified parameter
 125      * @return {@code DEFAULT_VALUE} unless overridden
 126      */
 127     protected R defaultAction(Object o, P p) {
 128         return DEFAULT_VALUE;
 129     }
 130 
 131     /**
 132      * {@inheritDoc}
 133      *
 134      * @implSpec This implementation calls {@code defaultAction}.
 135      *
 136      * @param b {@inheritDoc}
 137      * @param p {@inheritDoc}
 138      * @return  the result of {@code defaultAction}
 139      */
 140     public R visitBoolean(boolean b, P p) {
 141         return defaultAction(b, p);
 142     }
 143 
 144     /**
 145      * {@inheritDoc}
 146      *
 147      * @implSpec This implementation calls {@code defaultAction}.
 148      *
 149      * @param b {@inheritDoc}
 150      * @param p {@inheritDoc}
 151      * @return  the result of {@code defaultAction}
 152      */
 153     public R visitByte(byte b, P p) {
 154         return defaultAction(b, p);
 155     }
 156 
 157     /**
 158      * {@inheritDoc}
 159      *
 160      * @implSpec This implementation calls {@code defaultAction}.
 161      *
 162      * @param c {@inheritDoc}
 163      * @param p {@inheritDoc}
 164      * @return  the result of {@code defaultAction}
 165      */
 166     public R visitChar(char c, P p) {
 167         return defaultAction(c, p);
 168     }
 169 
 170     /**
 171      * {@inheritDoc}
 172      *
 173      * @implSpec This implementation calls {@code defaultAction}.
 174      *
 175      *
 176      * @param d {@inheritDoc}
 177      * @param p {@inheritDoc}
 178      * @return  the result of {@code defaultAction}
 179      */
 180     public R visitDouble(double d, P p) {
 181         return defaultAction(d, p);
 182     }
 183 
 184     /**
 185      * {@inheritDoc}
 186      *
 187      * @implSpec This implementation calls {@code defaultAction}.
 188      *
 189      *
 190      * @param f {@inheritDoc}
 191      * @param p {@inheritDoc}
 192      * @return  the result of {@code defaultAction}
 193      */
 194     public R visitFloat(float f, P p) {
 195         return defaultAction(f, p);
 196     }
 197 
 198     /**
 199      * {@inheritDoc}
 200      *
 201      * @implSpec This implementation calls {@code defaultAction}.
 202      *
 203      * @param i {@inheritDoc}
 204      * @param p {@inheritDoc}
 205      * @return  the result of {@code defaultAction}
 206      */
 207     public R visitInt(int i, P p) {
 208         return defaultAction(i, p);
 209     }
 210 
 211     /**
 212      * {@inheritDoc}
 213      *
 214      * @implSpec This implementation calls {@code defaultAction}.
 215      *
 216      * @param i {@inheritDoc}
 217      * @param p {@inheritDoc}
 218      * @return  the result of {@code defaultAction}
 219      */
 220     public R visitLong(long i, P p) {
 221         return defaultAction(i, p);
 222     }
 223 
 224     /**
 225      * {@inheritDoc}
 226      *
 227      * @implSpec This implementation calls {@code defaultAction}.
 228      *
 229      * @param s {@inheritDoc}
 230      * @param p {@inheritDoc}
 231      * @return  the result of {@code defaultAction}
 232      */
 233     public R visitShort(short s, P p) {
 234         return defaultAction(s, p);
 235     }
 236 
 237     /**
 238      * {@inheritDoc}
 239      *
 240      * @implSpec This implementation calls {@code defaultAction}.
 241      *
 242      * @param s {@inheritDoc}
 243      * @param p {@inheritDoc}
 244      * @return  the result of {@code defaultAction}
 245      */
 246     public R visitString(String s, P p) {
 247         return defaultAction(s, p);
 248     }
 249 
 250     /**
 251      * {@inheritDoc}
 252      *
 253      * @implSpec This implementation calls {@code defaultAction}.
 254      *
 255      * @param t {@inheritDoc}
 256      * @param p {@inheritDoc}
 257      * @return  the result of {@code defaultAction}
 258      */
 259     public R visitType(TypeMirror t, P p) {
 260         return defaultAction(t, p);
 261     }
 262 
 263     /**
 264      * {@inheritDoc}
 265      *
 266      * @implSpec This implementation calls {@code defaultAction}.
 267      *
 268      * @param c {@inheritDoc}
 269      * @param p {@inheritDoc}
 270      * @return  the result of {@code defaultAction}
 271      */
 272     public R visitEnumConstant(VariableElement c, P p) {
 273         return defaultAction(c, p);
 274     }
 275 
 276     /**
 277      * {@inheritDoc}
 278      *
 279      * @implSpec This implementation calls {@code defaultAction}.
 280      *
 281      * @param a {@inheritDoc}
 282      * @param p {@inheritDoc}
 283      * @return  the result of {@code defaultAction}
 284      */
 285     public R visitAnnotation(AnnotationMirror a, P p) {
 286         return defaultAction(a, p);
 287     }
 288 
 289     /**
 290      * {@inheritDoc}
 291      *
 292      * @implSpec This implementation calls {@code defaultAction}.
 293      *
 294      * @param vals {@inheritDoc}
 295      * @param p {@inheritDoc}
 296      * @return  the result of {@code defaultAction}
 297      */
 298     public R visitArray(List<? extends AnnotationValue> vals, P p) {
 299         return defaultAction(vals, p);
 300     }
 301 }