1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.annotations;
20
21 import java.lang.reflect.Array;
22
23 import org.eclipse.jetty.util.Loader;
24 import org.eclipse.jetty.util.TypeUtil;
25 import org.objectweb.asm.Type;
26
27
28
29
30 public class Util
31 {
32 private static Class[] __envEntryClassTypes =
33 new Class[] {String.class, Character.class, Integer.class, Boolean.class, Double.class, Byte.class, Short.class, Long.class, Float.class};
34
35
36 private static String[] __envEntryTypes =
37 new String[] { Type.getDescriptor(String.class), Type.getDescriptor(Character.class), Type.getDescriptor(Integer.class), Type.getDescriptor(Boolean.class),
38 Type.getDescriptor(Double.class), Type.getDescriptor(Byte.class), Type.getDescriptor(Short.class), Type.getDescriptor(Long.class), Type.getDescriptor(Float.class)};
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public static boolean isServletType (Class c)
55 {
56 boolean isServlet = false;
57 if (javax.servlet.Servlet.class.isAssignableFrom(c) ||
58 javax.servlet.Filter.class.isAssignableFrom(c) ||
59 javax.servlet.ServletContextListener.class.isAssignableFrom(c) ||
60 javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) ||
61 javax.servlet.ServletRequestListener.class.isAssignableFrom(c) ||
62 javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) ||
63 javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) ||
64 javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) ||
65 javax.servlet.AsyncListener.class.isAssignableFrom(c))
66
67 isServlet=true;
68
69 return isServlet;
70 }
71
72
73 public static boolean supportsResourceInjection (Class c)
74 {
75 if (javax.servlet.Servlet.class.isAssignableFrom(c) ||
76 javax.servlet.Filter.class.isAssignableFrom(c) ||
77 javax.servlet.ServletContextListener.class.isAssignableFrom(c) ||
78 javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) ||
79 javax.servlet.ServletRequestListener.class.isAssignableFrom(c) ||
80 javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) ||
81 javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) ||
82 javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) ||
83 javax.servlet.AsyncListener.class.isAssignableFrom(c) ||
84 javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c))
85 return true;
86
87 return false;
88 }
89
90
91 public static boolean supportsPostConstructPreDestroy (Class c)
92 {
93 if (javax.servlet.Servlet.class.isAssignableFrom(c) ||
94 javax.servlet.Filter.class.isAssignableFrom(c) ||
95 javax.servlet.ServletContextListener.class.isAssignableFrom(c) ||
96 javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) ||
97 javax.servlet.ServletRequestListener.class.isAssignableFrom(c) ||
98 javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) ||
99 javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) ||
100 javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) ||
101 javax.servlet.AsyncListener.class.isAssignableFrom(c) ||
102 javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c))
103 return true;
104
105 return false;
106 }
107
108 public static boolean isEnvEntryType (Class type)
109 {
110 boolean result = false;
111 for (int i=0;i<__envEntryClassTypes.length && !result;i++)
112 {
113 result = (type.equals(__envEntryClassTypes[i]));
114 }
115 return result;
116 }
117
118 public static boolean isEnvEntryType (String desc)
119 {
120 boolean result = false;
121 for (int i=0;i<__envEntryTypes.length && !result;i++)
122 {
123 result = (desc.equals(__envEntryTypes[i]));
124 }
125 return result;
126 }
127
128 public static String normalizePattern(String p)
129 {
130 if (p!=null && p.length()>0 && !p.startsWith("/") && !p.startsWith("*"))
131 return "/"+p;
132 return p;
133 }
134
135
136
137 public static Class[] convertTypes (String params)
138 throws Exception
139 {
140 return convertTypes(Type.getArgumentTypes(params));
141 }
142
143
144 public static Class[] convertTypes (Type[] types)
145 throws Exception
146 {
147 if (types==null)
148 return new Class[0];
149
150 Class[] classArray = new Class[types.length];
151
152 for (int i=0; i<types.length; i++)
153 {
154 classArray[i] = convertType(types[i]);
155 }
156 return classArray;
157 }
158
159 public static Class convertType (Type t)
160 throws Exception
161 {
162 if (t == null)
163 return (Class)null;
164
165 switch (t.getSort())
166 {
167 case Type.BOOLEAN:
168 {
169 return Boolean.TYPE;
170 }
171 case Type.ARRAY:
172 {
173 Class clazz = convertType(t.getElementType());
174 return Array.newInstance(clazz, 0).getClass();
175 }
176 case Type.BYTE:
177 {
178 return Byte.TYPE;
179 }
180 case Type.CHAR:
181 {
182 return Character.TYPE;
183 }
184 case Type.DOUBLE:
185 {
186 return Double.TYPE;
187 }
188 case Type.FLOAT:
189 {
190 return Float.TYPE;
191 }
192 case Type.INT:
193 {
194 return Integer.TYPE;
195 }
196 case Type.LONG:
197 {
198 return Long.TYPE;
199 }
200 case Type.OBJECT:
201 {
202 return (Loader.loadClass(null, t.getClassName()));
203 }
204 case Type.SHORT:
205 {
206 return Short.TYPE;
207 }
208 case Type.VOID:
209 {
210 return null;
211 }
212 default:
213 return null;
214 }
215
216 }
217
218 public static String asCanonicalName (Type t)
219 {
220 if (t == null)
221 return null;
222
223 switch (t.getSort())
224 {
225 case Type.BOOLEAN:
226 {
227 return TypeUtil.toName(Boolean.TYPE);
228 }
229 case Type.ARRAY:
230 {
231 return t.getElementType().getClassName();
232 }
233 case Type.BYTE:
234 {
235 return TypeUtil.toName(Byte.TYPE);
236 }
237 case Type.CHAR:
238 {
239 return TypeUtil.toName(Character.TYPE);
240 }
241 case Type.DOUBLE:
242 {
243 return TypeUtil.toName(Double.TYPE);
244 }
245 case Type.FLOAT:
246 {
247 return TypeUtil.toName(Float.TYPE);
248 }
249 case Type.INT:
250 {
251 return TypeUtil.toName(Integer.TYPE);
252 }
253 case Type.LONG:
254 {
255 return TypeUtil.toName(Long.TYPE);
256 }
257 case Type.OBJECT:
258 {
259 return t.getClassName();
260 }
261 case Type.SHORT:
262 {
263 return TypeUtil.toName(Short.TYPE);
264 }
265 case Type.VOID:
266 {
267 return null;
268 }
269 default:
270 return null;
271 }
272 }
273 }