Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor6.java
42759 views
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
import javax.annotation.processing.SupportedSourceVersion;
29
import javax.lang.model.SourceVersion;
30
import javax.lang.model.type.*;
31
import static javax.lang.model.SourceVersion.*;
32
33
/**
34
* A visitor of types based on their {@linkplain TypeKind kind} with
35
* default behavior appropriate for the {@link SourceVersion#RELEASE_6
36
* RELEASE_6} source version. For {@linkplain
37
* TypeMirror types} <code><i>Xyz</i></code> that may have more than one
38
* kind, the <code>visit<i>Xyz</i></code> methods in this class delegate
39
* to the <code>visit<i>Xyz</i>As<i>Kind</i></code> method corresponding to the
40
* first argument's kind. The <code>visit<i>Xyz</i>As<i>Kind</i></code> methods
41
* call {@link #defaultAction defaultAction}, passing their arguments
42
* to {@code defaultAction}'s 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
* TypeVisitor} interface implemented by this class may have methods
50
* added to it or the {@link TypeKind TypeKind enum} used in this
51
* class may have constants added to it in the future to accommodate
52
* new, currently unknown, language structures added to future
53
* versions of the Java programming language. Therefore,
54
* methods whose names begin with {@code "visit"} may be added to this
55
* class in the future; to avoid incompatibilities, classes and
56
* subclasses which extend this class should not declare any instance
57
* methods with names beginning with {@code "visit"}.</p>
58
*
59
* <p>When such a new visit method is added, the default
60
* implementation in this class will be to directly or indirectly call
61
* the {@link #visitUnknown visitUnknown} method. A new type kind
62
* visitor class will also be introduced to correspond to the new
63
* language level; this visitor will have different default behavior
64
* for the visit method in question. When a new visitor is
65
* introduced, portions of this visitor class may be deprecated,
66
* including its constructors.
67
*
68
* @param <R> the return type of this visitor's methods. Use {@link
69
* Void} for visitors that do not need to return results.
70
* @param <P> the type of the additional parameter to this visitor's
71
* methods. Use {@code Void} for visitors that do not need an
72
* additional parameter.
73
*
74
* @author Joseph D. Darcy
75
* @author Scott Seligman
76
* @author Peter von der Ah&eacute;
77
*
78
* @see TypeKindVisitor7
79
* @see TypeKindVisitor8
80
* @see TypeKindVisitor9
81
* @see TypeKindVisitor14
82
* @since 1.6
83
*/
84
@SupportedSourceVersion(RELEASE_6)
85
public class TypeKindVisitor6<R, P> extends SimpleTypeVisitor6<R, P> {
86
/**
87
* Constructor for concrete subclasses to call; uses {@code null}
88
* for the default value.
89
* @deprecated Release 6 is obsolete; update to a visitor for a newer
90
* release level.
91
*/
92
@Deprecated(since="9")
93
protected TypeKindVisitor6() {
94
super(null);
95
}
96
97
98
/**
99
* Constructor for concrete subclasses to call; uses the argument
100
* for the default value.
101
*
102
* @param defaultValue the value to assign to {@link #DEFAULT_VALUE}
103
* @deprecated Release 6 is obsolete; update to a visitor for a newer
104
* release level.
105
*/
106
@Deprecated(since="9")
107
protected TypeKindVisitor6(R defaultValue) {
108
super(defaultValue);
109
}
110
111
/**
112
* {@inheritDoc}
113
*
114
* @implSpec This implementation dispatches to the visit method for
115
* the specific {@linkplain TypeKind kind} of primitive type:
116
* {@code BOOLEAN}, {@code BYTE}, etc.
117
*
118
* @param t {@inheritDoc}
119
* @param p {@inheritDoc}
120
* @return the result of the kind-specific visit method
121
*/
122
@Override
123
public R visitPrimitive(PrimitiveType t, P p) {
124
TypeKind k = t.getKind();
125
switch (k) {
126
case BOOLEAN:
127
return visitPrimitiveAsBoolean(t, p);
128
129
case BYTE:
130
return visitPrimitiveAsByte(t, p);
131
132
case SHORT:
133
return visitPrimitiveAsShort(t, p);
134
135
case INT:
136
return visitPrimitiveAsInt(t, p);
137
138
case LONG:
139
return visitPrimitiveAsLong(t, p);
140
141
case CHAR:
142
return visitPrimitiveAsChar(t, p);
143
144
case FLOAT:
145
return visitPrimitiveAsFloat(t, p);
146
147
case DOUBLE:
148
return visitPrimitiveAsDouble(t, p);
149
150
default:
151
throw new AssertionError("Bad kind " + k + " for PrimitiveType" + t);
152
}
153
}
154
155
/**
156
* Visits a {@code BOOLEAN} primitive type.
157
*
158
* @implSpec This implementation calls {@code defaultAction}.
159
*
160
* @param t the type to visit
161
* @param p a visitor-specified parameter
162
* @return the result of {@code defaultAction}
163
*/
164
public R visitPrimitiveAsBoolean(PrimitiveType t, P p) {
165
return defaultAction(t, p);
166
}
167
168
/**
169
* Visits a {@code BYTE} primitive type.
170
*
171
* @implSpec This implementation calls {@code defaultAction}.
172
*
173
* @param t the type to visit
174
* @param p a visitor-specified parameter
175
* @return the result of {@code defaultAction}
176
*/
177
public R visitPrimitiveAsByte(PrimitiveType t, P p) {
178
return defaultAction(t, p);
179
}
180
181
/**
182
* Visits a {@code SHORT} primitive type.
183
*
184
* @implSpec This implementation calls {@code defaultAction}.
185
*
186
* @param t the type to visit
187
* @param p a visitor-specified parameter
188
* @return the result of {@code defaultAction}
189
*/
190
public R visitPrimitiveAsShort(PrimitiveType t, P p) {
191
return defaultAction(t, p);
192
}
193
194
/**
195
* Visits an {@code INT} primitive type.
196
*
197
* @implSpec This implementation calls {@code defaultAction}.
198
*
199
* @param t the type to visit
200
* @param p a visitor-specified parameter
201
* @return the result of {@code defaultAction}
202
*/
203
public R visitPrimitiveAsInt(PrimitiveType t, P p) {
204
return defaultAction(t, p);
205
}
206
207
/**
208
* Visits a {@code LONG} primitive type.
209
*
210
* @implSpec This implementation calls {@code defaultAction}.
211
*
212
* @param t the type to visit
213
* @param p a visitor-specified parameter
214
* @return the result of {@code defaultAction}
215
*/
216
public R visitPrimitiveAsLong(PrimitiveType t, P p) {
217
return defaultAction(t, p);
218
}
219
220
/**
221
* Visits a {@code CHAR} primitive type.
222
*
223
* @implSpec This implementation calls {@code defaultAction}.
224
*
225
* @param t the type to visit
226
* @param p a visitor-specified parameter
227
* @return the result of {@code defaultAction}
228
*/
229
public R visitPrimitiveAsChar(PrimitiveType t, P p) {
230
return defaultAction(t, p);
231
}
232
233
/**
234
* Visits a {@code FLOAT} primitive type.
235
*
236
* @implSpec This implementation calls {@code defaultAction}.
237
*
238
* @param t the type to visit
239
* @param p a visitor-specified parameter
240
* @return the result of {@code defaultAction}
241
*/
242
public R visitPrimitiveAsFloat(PrimitiveType t, P p) {
243
return defaultAction(t, p);
244
}
245
246
/**
247
* Visits a {@code DOUBLE} primitive type.
248
*
249
* @implSpec This implementation calls {@code defaultAction}.
250
*
251
* @param t the type to visit
252
* @param p a visitor-specified parameter
253
* @return the result of {@code defaultAction}
254
*/
255
public R visitPrimitiveAsDouble(PrimitiveType t, P p) {
256
return defaultAction(t, p);
257
}
258
259
/**
260
* {@inheritDoc}
261
*
262
* @implSpec This implementation dispatches to the visit method for
263
* the specific {@linkplain TypeKind kind} of pseudo-type:
264
* {@code VOID}, {@code PACKAGE}, {@code MODULE}, or {@code NONE}.
265
*
266
* @param t {@inheritDoc}
267
* @param p {@inheritDoc}
268
* @return the result of the kind-specific visit method
269
*/
270
@Override
271
public R visitNoType(NoType t, P p) {
272
TypeKind k = t.getKind();
273
switch (k) {
274
case VOID:
275
return visitNoTypeAsVoid(t, p);
276
277
case PACKAGE:
278
return visitNoTypeAsPackage(t, p);
279
280
case MODULE:
281
return visitNoTypeAsModule(t, p);
282
283
case NONE:
284
return visitNoTypeAsNone(t, p);
285
286
default:
287
throw new AssertionError("Bad kind " + k + " for NoType" + t);
288
}
289
}
290
291
/**
292
* Visits a {@link TypeKind#VOID VOID} pseudo-type.
293
*
294
* @implSpec This implementation calls {@code defaultAction}.
295
*
296
* @param t the type to visit
297
* @param p a visitor-specified parameter
298
* @return the result of {@code defaultAction}
299
*/
300
public R visitNoTypeAsVoid(NoType t, P p) {
301
return defaultAction(t, p);
302
}
303
304
/**
305
* Visits a {@link TypeKind#PACKAGE PACKAGE} pseudo-type.
306
*
307
* @implSpec This implementation calls {@code defaultAction}.
308
*
309
* @param t the type to visit
310
* @param p a visitor-specified parameter
311
* @return the result of {@code defaultAction}
312
*/
313
public R visitNoTypeAsPackage(NoType t, P p) {
314
return defaultAction(t, p);
315
}
316
317
/**
318
* Visits a {@link TypeKind#MODULE MODULE} pseudo-type.
319
*
320
* @implSpec This implementation calls {@code visitUnknown}.
321
*
322
* @param t the type to visit
323
* @param p a visitor-specified parameter
324
* @return the result of {@code visitUnknown}
325
*
326
* @since 10
327
*/
328
public R visitNoTypeAsModule(NoType t, P p) {
329
return visitUnknown(t, p);
330
}
331
332
/**
333
* Visits a {@link TypeKind#NONE NONE} pseudo-type.
334
*
335
* @implSpec This implementation calls {@code defaultAction}.
336
*
337
* @param t the type to visit
338
* @param p a visitor-specified parameter
339
* @return the result of {@code defaultAction}
340
*/
341
public R visitNoTypeAsNone(NoType t, P p) {
342
return defaultAction(t, p);
343
}
344
}
345
346