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™ 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é 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 }