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.http.HttpSessionIdListener.class.isAssignableFrom(c) ||
84 javax.servlet.AsyncListener.class.isAssignableFrom(c) ||
85 javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c))
86 return true;
87
88 return false;
89 }
90
91
92 public static boolean supportsPostConstructPreDestroy (Class c)
93 {
94 if (javax.servlet.Servlet.class.isAssignableFrom(c) ||
95 javax.servlet.Filter.class.isAssignableFrom(c) ||
96 javax.servlet.ServletContextListener.class.isAssignableFrom(c) ||
97 javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) ||
98 javax.servlet.ServletRequestListener.class.isAssignableFrom(c) ||
99 javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) ||
100 javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) ||
101 javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) ||
102 javax.servlet.http.HttpSessionIdListener.class.isAssignableFrom(c) ||
103 javax.servlet.AsyncListener.class.isAssignableFrom(c) ||
104 javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c))
105 return true;
106
107 return false;
108 }
109
110 public static boolean isEnvEntryType (Class type)
111 {
112 boolean result = false;
113 for (int i=0;i<__envEntryClassTypes.length && !result;i++)
114 {
115 result = (type.equals(__envEntryClassTypes[i]));
116 }
117 return result;
118 }
119
120 public static boolean isEnvEntryType (String desc)
121 {
122 boolean result = false;
123 for (int i=0;i<__envEntryTypes.length && !result;i++)
124 {
125 result = (desc.equals(__envEntryTypes[i]));
126 }
127 return result;
128 }
129
130 public static String normalizePattern(String p)
131 {
132 if (p!=null && p.length()>0 && !p.startsWith("/") && !p.startsWith("*"))
133 return "/"+p;
134 return p;
135 }
136
137
138
139 public static Class[] convertTypes (String params)
140 throws Exception
141 {
142 return convertTypes(Type.getArgumentTypes(params));
143 }
144
145
146 public static Class[] convertTypes (Type[] types)
147 throws Exception
148 {
149 if (types==null)
150 return new Class[0];
151
152 Class[] classArray = new Class[types.length];
153
154 for (int i=0; i<types.length; i++)
155 {
156 classArray[i] = convertType(types[i]);
157 }
158 return classArray;
159 }
160
161 public static Class convertType (Type t)
162 throws Exception
163 {
164 if (t == null)
165 return (Class)null;
166
167 switch (t.getSort())
168 {
169 case Type.BOOLEAN:
170 {
171 return Boolean.TYPE;
172 }
173 case Type.ARRAY:
174 {
175 Class clazz = convertType(t.getElementType());
176 return Array.newInstance(clazz, 0).getClass();
177 }
178 case Type.BYTE:
179 {
180 return Byte.TYPE;
181 }
182 case Type.CHAR:
183 {
184 return Character.TYPE;
185 }
186 case Type.DOUBLE:
187 {
188 return Double.TYPE;
189 }
190 case Type.FLOAT:
191 {
192 return Float.TYPE;
193 }
194 case Type.INT:
195 {
196 return Integer.TYPE;
197 }
198 case Type.LONG:
199 {
200 return Long.TYPE;
201 }
202 case Type.OBJECT:
203 {
204 return (Loader.loadClass(null, t.getClassName()));
205 }
206 case Type.SHORT:
207 {
208 return Short.TYPE;
209 }
210 case Type.VOID:
211 {
212 return null;
213 }
214 default:
215 return null;
216 }
217
218 }
219
220 public static String asCanonicalName (Type t)
221 {
222 if (t == null)
223 return null;
224
225 switch (t.getSort())
226 {
227 case Type.BOOLEAN:
228 {
229 return TypeUtil.toName(Boolean.TYPE);
230 }
231 case Type.ARRAY:
232 {
233 return t.getElementType().getClassName();
234 }
235 case Type.BYTE:
236 {
237 return TypeUtil.toName(Byte.TYPE);
238 }
239 case Type.CHAR:
240 {
241 return TypeUtil.toName(Character.TYPE);
242 }
243 case Type.DOUBLE:
244 {
245 return TypeUtil.toName(Double.TYPE);
246 }
247 case Type.FLOAT:
248 {
249 return TypeUtil.toName(Float.TYPE);
250 }
251 case Type.INT:
252 {
253 return TypeUtil.toName(Integer.TYPE);
254 }
255 case Type.LONG:
256 {
257 return TypeUtil.toName(Long.TYPE);
258 }
259 case Type.OBJECT:
260 {
261 return t.getClassName();
262 }
263 case Type.SHORT:
264 {
265 return TypeUtil.toName(Short.TYPE);
266 }
267 case Type.VOID:
268 {
269 return null;
270 }
271 default:
272 return null;
273 }
274 }
275 }