author | mchung |
Wed, 27 May 2015 13:25:18 -0700 | |
changeset 30846 | 2b3f379840f0 |
parent 25874 | langtools/src/jdk.compiler/share/classes/com/sun/tools/classfile/Type.java@83c19f00452c |
permissions | -rw-r--r-- |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1 |
/* |
9078 | 2 |
* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
4 |
* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
5520 | 7 |
* published by the Free Software Foundation. Oracle designates this |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
5520 | 9 |
* by Oracle in the LICENSE file that accompanied this code. |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
10 |
* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
15 |
* accompanied this code). |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
16 |
* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
20 |
* |
5520 | 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. |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
24 |
*/ |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
25 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
26 |
package com.sun.tools.classfile; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
27 |
|
2976 | 28 |
import java.util.Arrays; |
29 |
import java.util.HashSet; |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
30 |
import java.util.List; |
2976 | 31 |
import java.util.Set; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
32 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
33 |
/* |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
34 |
* Family of classes used to represent the parsed form of a {@link Descriptor} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
35 |
* or {@link Signature}. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
36 |
* |
5847
1908176fd6e3
6944312: Potential rebranding issues in openjdk/langtools repository sources
jjg
parents:
5520
diff
changeset
|
37 |
* <p><b>This is NOT part of any supported API. |
1908176fd6e3
6944312: Potential rebranding issues in openjdk/langtools repository sources
jjg
parents:
5520
diff
changeset
|
38 |
* If you write code that depends on this, you do so at your own risk. |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
39 |
* This code and its internal interfaces are subject to change or |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
40 |
* deletion without notice.</b> |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
41 |
*/ |
2976 | 42 |
public abstract class Type { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
43 |
protected Type() { } |
9078 | 44 |
|
45 |
public boolean isObject() { |
|
46 |
return false; |
|
47 |
} |
|
48 |
||
2976 | 49 |
public abstract <R,D> R accept(Visitor<R,D> visitor, D data); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
50 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
51 |
protected static void append(StringBuilder sb, String prefix, List<? extends Type> types, String suffix) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
52 |
sb.append(prefix); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
53 |
String sep = ""; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
54 |
for (Type t: types) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
55 |
sb.append(sep); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
56 |
sb.append(t); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
57 |
sep = ", "; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
58 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
59 |
sb.append(suffix); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
60 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
61 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
62 |
protected static void appendIfNotEmpty(StringBuilder sb, String prefix, List<? extends Type> types, String suffix) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
63 |
if (types != null && types.size() > 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
64 |
append(sb, prefix, types, suffix); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
65 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
66 |
|
2976 | 67 |
public interface Visitor<R,P> { |
68 |
R visitSimpleType(SimpleType type, P p); |
|
69 |
R visitArrayType(ArrayType type, P p); |
|
70 |
R visitMethodType(MethodType type, P p); |
|
71 |
R visitClassSigType(ClassSigType type, P p); |
|
72 |
R visitClassType(ClassType type, P p); |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
73 |
R visitTypeParamType(TypeParamType type, P p); |
2976 | 74 |
R visitWildcardType(WildcardType type, P p); |
75 |
} |
|
76 |
||
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
77 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
78 |
* Represents a type signature with a simple name. The name may be that of a |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
79 |
* primitive type, such "{@code int}, {@code float}, etc |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
80 |
* or that of a type argument, such as {@code T}, {@code K}, {@code V}, etc. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
81 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
82 |
* See: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
83 |
* JVMS 4.3.2 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
84 |
* BaseType: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
85 |
* {@code B}, {@code C}, {@code D}, {@code F}, {@code I}, |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
86 |
* {@code J}, {@code S}, {@code Z}; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
87 |
* VoidDescriptor: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
88 |
* {@code V}; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
89 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
90 |
* TypeVariableSignature: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
91 |
* {@code T} Identifier {@code ;} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
92 |
*/ |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
93 |
public static class SimpleType extends Type { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
94 |
public SimpleType(String name) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
95 |
this.name = name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
96 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
97 |
|
2976 | 98 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
99 |
return visitor.visitSimpleType(this, data); |
|
100 |
} |
|
101 |
||
102 |
public boolean isPrimitiveType() { |
|
103 |
return primitiveTypes.contains(name); |
|
104 |
} |
|
105 |
// where |
|
22163 | 106 |
private static final Set<String> primitiveTypes = new HashSet<>(Arrays.asList( |
2976 | 107 |
"boolean", "byte", "char", "double", "float", "int", "long", "short", "void")); |
108 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
109 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
110 |
public String toString() { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
111 |
return name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
112 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
113 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
114 |
public final String name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
115 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
116 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
117 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
118 |
* Represents an array type signature. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
119 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
120 |
* See: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
121 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
122 |
* ArrayTypeSignature: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
123 |
* {@code [} TypeSignature {@code ]} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
124 |
*/ |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
125 |
public static class ArrayType extends Type { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
126 |
public ArrayType(Type elemType) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
127 |
this.elemType = elemType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
128 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
129 |
|
2976 | 130 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
131 |
return visitor.visitArrayType(this, data); |
|
132 |
} |
|
133 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
134 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
135 |
public String toString() { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
136 |
return elemType + "[]"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
137 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
138 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
139 |
public final Type elemType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
140 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
141 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
142 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
143 |
* Represents a method type signature. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
144 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
145 |
* See; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
146 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
147 |
* MethodTypeSignature: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
148 |
* FormalTypeParameters_opt {@code (} TypeSignature* {@code)} ReturnType |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
149 |
* ThrowsSignature* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
150 |
*/ |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
151 |
public static class MethodType extends Type { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
152 |
public MethodType(List<? extends Type> paramTypes, Type resultType) { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
153 |
this(null, paramTypes, resultType, null); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
154 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
155 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
156 |
public MethodType(List<? extends TypeParamType> typeParamTypes, |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
157 |
List<? extends Type> paramTypes, |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
158 |
Type returnType, |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
159 |
List<? extends Type> throwsTypes) { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
160 |
this.typeParamTypes = typeParamTypes; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
161 |
this.paramTypes = paramTypes; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
162 |
this.returnType = returnType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
163 |
this.throwsTypes = throwsTypes; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
164 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
165 |
|
2976 | 166 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
167 |
return visitor.visitMethodType(this, data); |
|
168 |
} |
|
169 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
170 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
171 |
public String toString() { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
172 |
StringBuilder sb = new StringBuilder(); |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
173 |
appendIfNotEmpty(sb, "<", typeParamTypes, "> "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
174 |
sb.append(returnType); |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
175 |
append(sb, " (", paramTypes, ")"); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
176 |
appendIfNotEmpty(sb, " throws ", throwsTypes, ""); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
177 |
return sb.toString(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
178 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
179 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
180 |
public final List<? extends TypeParamType> typeParamTypes; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
181 |
public final List<? extends Type> paramTypes; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
182 |
public final Type returnType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
183 |
public final List<? extends Type> throwsTypes; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
184 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
185 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
186 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
187 |
* Represents a class signature. These describe the signature of |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
188 |
* a class that has type arguments. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
189 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
190 |
* See: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
191 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
192 |
* ClassSignature: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
193 |
* FormalTypeParameters_opt SuperclassSignature SuperinterfaceSignature* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
194 |
*/ |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
195 |
public static class ClassSigType extends Type { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
196 |
public ClassSigType(List<TypeParamType> typeParamTypes, Type superclassType, |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
197 |
List<Type> superinterfaceTypes) { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
198 |
this.typeParamTypes = typeParamTypes; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
199 |
this.superclassType = superclassType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
200 |
this.superinterfaceTypes = superinterfaceTypes; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
201 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
202 |
|
2976 | 203 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
204 |
return visitor.visitClassSigType(this, data); |
|
205 |
} |
|
206 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
207 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
208 |
public String toString() { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
209 |
StringBuilder sb = new StringBuilder(); |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
210 |
appendIfNotEmpty(sb, "<", typeParamTypes, ">"); |
859
16b1ea00598f
6715757: javap does not print "extends java.lang.Object"
jjg
parents:
727
diff
changeset
|
211 |
if (superclassType != null) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
212 |
sb.append(" extends "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
213 |
sb.append(superclassType); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
214 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
215 |
appendIfNotEmpty(sb, " implements ", superinterfaceTypes, ""); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
216 |
return sb.toString(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
217 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
218 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
219 |
public final List<TypeParamType> typeParamTypes; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
220 |
public final Type superclassType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
221 |
public final List<Type> superinterfaceTypes; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
222 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
223 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
224 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
225 |
* Represents a class type signature. This is used to represent a |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
226 |
* reference to a class, such as in a field, parameter, return type, etc. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
227 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
228 |
* See: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
229 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
230 |
* ClassTypeSignature: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
231 |
* {@code L} PackageSpecifier_opt SimpleClassTypeSignature |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
232 |
* ClassTypeSignatureSuffix* {@code ;} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
233 |
* PackageSpecifier: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
234 |
* Identifier {@code /} PackageSpecifier* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
235 |
* SimpleClassTypeSignature: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
236 |
* Identifier TypeArguments_opt } |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
237 |
* ClassTypeSignatureSuffix: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
238 |
* {@code .} SimpleClassTypeSignature |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
239 |
*/ |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
240 |
public static class ClassType extends Type { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
241 |
public ClassType(ClassType outerType, String name, List<Type> typeArgs) { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
242 |
this.outerType = outerType; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
243 |
this.name = name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
244 |
this.typeArgs = typeArgs; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
245 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
246 |
|
2976 | 247 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
248 |
return visitor.visitClassType(this, data); |
|
249 |
} |
|
250 |
||
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
251 |
public String getBinaryName() { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
252 |
if (outerType == null) |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
253 |
return name; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
254 |
else |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
255 |
return (outerType.getBinaryName() + "$" + name); |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
256 |
} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
257 |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
258 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
259 |
public String toString() { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
260 |
StringBuilder sb = new StringBuilder(); |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
261 |
if (outerType != null) { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
262 |
sb.append(outerType); |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
263 |
sb.append("."); |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
264 |
} |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
265 |
sb.append(name); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
266 |
appendIfNotEmpty(sb, "<", typeArgs, ">"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
267 |
return sb.toString(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
268 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
269 |
|
9078 | 270 |
@Override |
271 |
public boolean isObject() { |
|
272 |
return (outerType == null) |
|
273 |
&& name.equals("java/lang/Object") |
|
274 |
&& (typeArgs == null || typeArgs.isEmpty()); |
|
275 |
} |
|
276 |
||
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
277 |
public final ClassType outerType; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
278 |
public final String name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
279 |
public final List<Type> typeArgs; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
280 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
281 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
282 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
283 |
* Represents a FormalTypeParameter. These are used to declare the type |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
284 |
* parameters for generic classes and methods. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
285 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
286 |
* See: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
287 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
288 |
* FormalTypeParameters: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
289 |
* {@code <} FormalTypeParameter+ {@code >} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
290 |
* FormalTypeParameter: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
291 |
* Identifier ClassBound InterfaceBound* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
292 |
* ClassBound: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
293 |
* {@code :} FieldTypeSignature_opt |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
294 |
* InterfaceBound: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
295 |
* {@code :} FieldTypeSignature |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
296 |
*/ |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
297 |
public static class TypeParamType extends Type { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
298 |
public TypeParamType(String name, Type classBound, List<Type> interfaceBounds) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
299 |
this.name = name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
300 |
this.classBound = classBound; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
301 |
this.interfaceBounds = interfaceBounds; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
302 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
303 |
|
2976 | 304 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
305 |
return visitor.visitTypeParamType(this, data); |
2976 | 306 |
} |
307 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
308 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
309 |
public String toString() { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
310 |
StringBuilder sb = new StringBuilder(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
311 |
sb.append(name); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
312 |
String sep = " extends "; |
859
16b1ea00598f
6715757: javap does not print "extends java.lang.Object"
jjg
parents:
727
diff
changeset
|
313 |
if (classBound != null) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
314 |
sb.append(sep); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
315 |
sb.append(classBound); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
316 |
sep = " & "; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
317 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
318 |
if (interfaceBounds != null) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
319 |
for (Type bound: interfaceBounds) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
320 |
sb.append(sep); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
321 |
sb.append(bound); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
322 |
sep = " & "; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
323 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
324 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
325 |
return sb.toString(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
326 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
327 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
328 |
public final String name; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
329 |
public final Type classBound; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
330 |
public final List<Type> interfaceBounds; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
331 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
332 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
333 |
/** |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
334 |
* Represents a wildcard type argument. A type argument that is not a |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
335 |
* wildcard type argument will be represented by a ClassType, ArrayType, etc. |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
336 |
* |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
337 |
* See: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
338 |
* JVMS 4.3.4 |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
339 |
* TypeArgument: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
340 |
* WildcardIndicator_opt FieldTypeSignature |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
341 |
* {@code *} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
342 |
* WildcardIndicator: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
343 |
* {@code +} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
344 |
* {@code -} |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
345 |
*/ |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
346 |
public static class WildcardType extends Type { |
22163 | 347 |
public enum Kind { UNBOUNDED, EXTENDS, SUPER } |
348 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
349 |
public WildcardType() { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
350 |
this(Kind.UNBOUNDED, null); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
351 |
} |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
352 |
public WildcardType(Kind kind, Type boundType) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
353 |
this.kind = kind; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
354 |
this.boundType = boundType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
355 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
356 |
|
2976 | 357 |
public <R, D> R accept(Visitor<R, D> visitor, D data) { |
358 |
return visitor.visitWildcardType(this, data); |
|
359 |
} |
|
360 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
361 |
@Override |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
362 |
public String toString() { |
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
363 |
switch (kind) { |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
364 |
case UNBOUNDED: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
365 |
return "?"; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
366 |
case EXTENDS: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
367 |
return "? extends " + boundType; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
368 |
case SUPER: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
369 |
return "? super " + boundType; |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
370 |
default: |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
371 |
throw new AssertionError(); |
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
372 |
} |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
373 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
374 |
|
4076
319c19c1f28d
6888367: classfile library parses signature attributes incorrectly
jjg
parents:
2976
diff
changeset
|
375 |
public final Kind kind; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
376 |
public final Type boundType; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
377 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
378 |
} |