You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Factory.java 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. /* *******************************************************************
  2. * Copyright (c) 1999-2001 Xerox Corporation,
  3. * 2002-2018 Palo Alto Research Center, Incorporated (PARC), Contributors
  4. * All rights reserved.
  5. * This program and the accompanying materials are made available
  6. * under the terms of the Eclipse Public License v1.0
  7. * which accompanies this distribution and is available at
  8. * http://www.eclipse.org/legal/epl-v10.html
  9. *
  10. * Contributors:
  11. * Xerox/PARC initial implementation
  12. * Alex Vasseur new factory methods for variants of JP
  13. * Abraham Nevado new factory methods for collapsed SJPs
  14. * Andy Clement new factory methods that rely on LDC <class>
  15. * ******************************************************************/
  16. package org.aspectj.runtime.reflect;
  17. import java.lang.reflect.Constructor;
  18. import java.lang.reflect.Member;
  19. import java.lang.reflect.Method;
  20. import java.util.Hashtable;
  21. import java.util.StringTokenizer;
  22. import org.aspectj.lang.JoinPoint;
  23. import org.aspectj.lang.Signature;
  24. import org.aspectj.lang.reflect.AdviceSignature;
  25. import org.aspectj.lang.reflect.CatchClauseSignature;
  26. import org.aspectj.lang.reflect.ConstructorSignature;
  27. import org.aspectj.lang.reflect.FieldSignature;
  28. import org.aspectj.lang.reflect.InitializerSignature;
  29. import org.aspectj.lang.reflect.LockSignature;
  30. import org.aspectj.lang.reflect.MethodSignature;
  31. import org.aspectj.lang.reflect.SourceLocation;
  32. import org.aspectj.lang.reflect.UnlockSignature;
  33. public final class Factory {
  34. Class lexicalClass;
  35. ClassLoader lookupClassLoader;
  36. String filename;
  37. int count;
  38. private static final Class[] NO_TYPES = new Class[0];
  39. private static final String[] NO_STRINGS = new String[0];
  40. static Hashtable prims = new Hashtable();
  41. static {
  42. prims.put("void", Void.TYPE);
  43. prims.put("boolean", Boolean.TYPE);
  44. prims.put("byte", Byte.TYPE);
  45. prims.put("char", Character.TYPE);
  46. prims.put("short", Short.TYPE);
  47. prims.put("int", Integer.TYPE);
  48. prims.put("long", Long.TYPE);
  49. prims.put("float", Float.TYPE);
  50. prims.put("double", Double.TYPE);
  51. }
  52. static Class makeClass(String s, ClassLoader loader) {
  53. if (s.equals("*"))
  54. return null;
  55. Class ret = (Class)prims.get(s);
  56. if (ret != null)
  57. return ret;
  58. try {
  59. /*
  60. * The documentation of Class.forName explains why this is the right thing better than I could here.
  61. */
  62. if (loader == null) {
  63. return Class.forName(s);
  64. } else {
  65. // used to be 'return loader.loadClass(s)' but that didn't cause
  66. // array types to be created and loaded correctly. (pr70404)
  67. return Class.forName(s, false, loader);
  68. }
  69. } catch (ClassNotFoundException e) {
  70. // System.out.println("null for: " + s);
  71. // XXX there should be a better return value for this
  72. return ClassNotFoundException.class;
  73. }
  74. }
  75. public Factory(String filename, Class lexicalClass) {
  76. // System.out.println("making
  77. this.filename = filename;
  78. this.lexicalClass = lexicalClass;
  79. this.count = 0;
  80. lookupClassLoader = lexicalClass.getClassLoader();
  81. }
  82. /**
  83. * Create a signature and build a JoinPoint in one step. Prior to 1.6.10 this was done as a two step operation in the generated
  84. * code but merging these methods in the runtime library enables the generated code to be shorter. Generating code that
  85. * uses this method requires the weaver to be invoked with <tt>-Xset:targetRuntime1_6_10=true</tt>.
  86. *
  87. * @since 1.6.10
  88. */
  89. public JoinPoint.StaticPart makeSJP(String kind, String modifiers, String methodName, String declaringType, String paramTypes,
  90. String paramNames, String exceptionTypes, String returnType, int l) {
  91. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes, paramNames, exceptionTypes, returnType);
  92. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  93. }
  94. /**
  95. * Create a signature and build a JoinPoint in one step. Prior to 1.6.10 this was done as a two step operation in the generated
  96. * code but merging these methods in the runtime library enables the generated code to be shorter. Generating code that
  97. * uses this method requires the weaver to be invoked with <tt>-Xset:targetRuntime1_6_10=true</tt>.
  98. * <p>
  99. * This method differs from the previous one in that it includes no exceptionTypes parameter - it is an optimization for the
  100. * case where there are no exceptions. The generated code won't build an empty string and will not pass it into here.
  101. *
  102. * @since 1.6.10
  103. */
  104. public JoinPoint.StaticPart makeSJP(String kind, String modifiers, String methodName, String declaringType, String paramTypes,
  105. String paramNames, String returnType, int l) {
  106. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes, paramNames, "", returnType);
  107. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  108. }
  109. // These are direct routes to creating thisJoinPoint and thisEnclosingJoinPoint objects
  110. // added in 1.9.1
  111. public JoinPoint.StaticPart makeMethodSJP(String kind, int modifiers, String methodName, Class declaringType, Class[] paramTypes, String[] paramNames, Class[] exceptionTypes, Class returnType, int line) {
  112. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes==null?NO_TYPES:paramTypes,
  113. paramNames==null?NO_STRINGS:paramNames, exceptionTypes==null?NO_TYPES:exceptionTypes, returnType == null?Void.TYPE:returnType);
  114. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  115. }
  116. public JoinPoint.EnclosingStaticPart makeMethodESJP(String kind, int modifiers, String methodName, Class declaringType, Class[] paramTypes, String[] paramNames, Class[] exceptionTypes, Class returnType, int line) {
  117. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes==null?NO_TYPES:paramTypes,
  118. paramNames==null?NO_STRINGS:paramNames, exceptionTypes==null?NO_TYPES:exceptionTypes, returnType == null?Void.TYPE:returnType);
  119. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  120. }
  121. public JoinPoint.StaticPart makeConstructorSJP(String kind, int modifiers, Class declaringType, Class[] parameterTypes, String[] parameterNames, Class[] exceptionTypes, int line) {
  122. ConstructorSignatureImpl sig = new ConstructorSignatureImpl(modifiers, declaringType, parameterTypes==null?NO_TYPES:parameterTypes, parameterNames==null?NO_STRINGS:parameterNames,
  123. exceptionTypes==null?NO_TYPES:exceptionTypes);
  124. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  125. }
  126. public JoinPoint.EnclosingStaticPart makeConstructorESJP(String kind, int modifiers, Class declaringType, Class[] parameterTypes, String[] parameterNames, Class[] exceptionTypes, int line) {
  127. ConstructorSignatureImpl sig = new ConstructorSignatureImpl(modifiers, declaringType, parameterTypes==null?NO_TYPES:parameterTypes, parameterNames==null?NO_STRINGS:parameterNames,
  128. exceptionTypes==null?NO_TYPES:exceptionTypes);
  129. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  130. }
  131. public JoinPoint.StaticPart makeCatchClauseSJP(String kind, Class declaringType, Class parameterType, String parameterName, int line) {
  132. CatchClauseSignatureImpl sig = new CatchClauseSignatureImpl(declaringType, parameterType, parameterName==null?"":parameterName);
  133. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  134. }
  135. public JoinPoint.EnclosingStaticPart makeCatchClauseESJP(String kind, Class declaringType, Class parameterType, String parameterName, int line) {
  136. CatchClauseSignatureImpl sig = new CatchClauseSignatureImpl(declaringType, parameterType, parameterName==null?"":parameterName);
  137. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  138. }
  139. public JoinPoint.StaticPart makeFieldSJP(String kind, int modifiers, String name, Class declaringType, Class fieldType, int line) {
  140. FieldSignatureImpl sig = new FieldSignatureImpl(modifiers, name, declaringType, fieldType);
  141. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  142. }
  143. public JoinPoint.EnclosingStaticPart makeFieldESJP(String kind, int modifiers, String name, Class declaringType, Class fieldType, int line) {
  144. FieldSignatureImpl sig = new FieldSignatureImpl(modifiers, name, declaringType, fieldType);
  145. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  146. }
  147. public JoinPoint.StaticPart makeInitializerSJP(String kind, int modifiers, Class declaringType, int line) {
  148. InitializerSignatureImpl sig = new InitializerSignatureImpl(modifiers, declaringType);
  149. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  150. }
  151. public JoinPoint.EnclosingStaticPart makeInitializerESJP(String kind, int modifiers, Class declaringType, int line) {
  152. InitializerSignatureImpl sig = new InitializerSignatureImpl(modifiers, declaringType);
  153. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  154. }
  155. public JoinPoint.StaticPart makeLockSJP(String kind, Class declaringType, int line) {
  156. LockSignatureImpl sig = new LockSignatureImpl(declaringType);
  157. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  158. }
  159. public JoinPoint.EnclosingStaticPart makeLockESJP(String kind, Class declaringType, int line) {
  160. LockSignatureImpl sig = new LockSignatureImpl(declaringType);
  161. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  162. }
  163. public JoinPoint.StaticPart makeUnlockSJP(String kind, Class declaringType, int line) {
  164. UnlockSignatureImpl sig = new UnlockSignatureImpl(declaringType);
  165. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  166. }
  167. public JoinPoint.EnclosingStaticPart makeUnlockESJP(String kind, Class declaringType, int line) {
  168. UnlockSignatureImpl sig = new UnlockSignatureImpl(declaringType);
  169. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  170. }
  171. public JoinPoint.StaticPart makeAdviceSJP(String kind, int modifiers, String name, Class declaringType, Class[] parameterTypes,
  172. String[] parameterNames, Class[] exceptionTypes, Class returnType, int line) {
  173. AdviceSignatureImpl sig = new AdviceSignatureImpl(modifiers, name, declaringType,
  174. parameterTypes==null?NO_TYPES:parameterTypes,
  175. parameterNames==null?NO_STRINGS:parameterNames,
  176. exceptionTypes==null?NO_TYPES:exceptionTypes,
  177. returnType==null?Void.TYPE:returnType);
  178. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  179. }
  180. public JoinPoint.EnclosingStaticPart makeAdviceESJP(String kind, int modifiers, String name, Class declaringType, Class[] parameterTypes,
  181. String[] parameterNames, Class[] exceptionTypes, Class returnType, int line) {
  182. AdviceSignatureImpl sig = new AdviceSignatureImpl(modifiers, name, declaringType,
  183. parameterTypes==null?NO_TYPES:parameterTypes,
  184. parameterNames==null?NO_STRINGS:parameterNames,
  185. exceptionTypes==null?NO_TYPES:exceptionTypes,
  186. returnType==null?Void.TYPE:returnType);
  187. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  188. }
  189. // ---
  190. public JoinPoint.StaticPart makeSJP(String kind, Signature sig, SourceLocation loc) {
  191. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, loc);
  192. }
  193. public JoinPoint.StaticPart makeSJP(String kind, Signature sig, int l, int c) {
  194. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, c));
  195. }
  196. public JoinPoint.StaticPart makeSJP(String kind, Signature sig, int l) {
  197. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  198. }
  199. public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, SourceLocation loc) {
  200. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, loc);
  201. }
  202. public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, int l, int c) {
  203. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(l, c));
  204. }
  205. public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, int l) {
  206. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  207. }
  208. public static JoinPoint.StaticPart makeEncSJP(Member member) {
  209. Signature sig = null;
  210. String kind = null;
  211. if (member instanceof Method) {
  212. Method method = (Method) member;
  213. sig = new MethodSignatureImpl(method.getModifiers(), method.getName(), method.getDeclaringClass(), method
  214. .getParameterTypes(), new String[method.getParameterTypes().length], method.getExceptionTypes(), method
  215. .getReturnType());
  216. kind = JoinPoint.METHOD_EXECUTION;
  217. } else if (member instanceof Constructor) {
  218. Constructor cons = (Constructor) member;
  219. sig = new ConstructorSignatureImpl(cons.getModifiers(), cons.getDeclaringClass(), cons.getParameterTypes(),
  220. new String[cons.getParameterTypes().length], cons.getExceptionTypes());
  221. kind = JoinPoint.CONSTRUCTOR_EXECUTION;
  222. } else {
  223. throw new IllegalArgumentException("member must be either a method or constructor");
  224. }
  225. return new JoinPointImpl.EnclosingStaticPartImpl(-1, kind, sig, null);
  226. }
  227. private static Object[] NO_ARGS = new Object[0];
  228. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target) {
  229. return new JoinPointImpl(staticPart, _this, target, NO_ARGS);
  230. }
  231. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target, Object arg0) {
  232. return new JoinPointImpl(staticPart, _this, target, new Object[] { arg0 });
  233. }
  234. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target, Object arg0, Object arg1) {
  235. return new JoinPointImpl(staticPart, _this, target, new Object[] { arg0, arg1 });
  236. }
  237. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target, Object[] args) {
  238. return new JoinPointImpl(staticPart, _this, target, args);
  239. }
  240. public MethodSignature makeMethodSig(String stringRep) {
  241. MethodSignatureImpl ret = new MethodSignatureImpl(stringRep);
  242. ret.setLookupClassLoader(lookupClassLoader);
  243. return ret;
  244. }
  245. public MethodSignature makeMethodSig(String modifiers, String methodName, String declaringType, String paramTypes,
  246. String paramNames, String exceptionTypes, String returnType) {
  247. Class declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  248. return makeMethodSig(modifiers, methodName, declaringTypeClass, paramTypes, paramNames, exceptionTypes, returnType);
  249. }
  250. public MethodSignature makeMethodSig(String modifiers, String methodName, Class declaringTypeClass, String paramTypes,
  251. String paramNames, String exceptionTypes, String returnType) {
  252. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  253. StringTokenizer st = new StringTokenizer(paramTypes, ":");
  254. int numParams = st.countTokens();
  255. Class[] paramTypeClasses = new Class[numParams];
  256. for (int i = 0; i < numParams; i++)
  257. paramTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  258. st = new StringTokenizer(paramNames, ":");
  259. numParams = st.countTokens();
  260. String[] paramNamesArray = new String[numParams];
  261. for (int i = 0; i < numParams; i++)
  262. paramNamesArray[i] = st.nextToken();
  263. st = new StringTokenizer(exceptionTypes, ":");
  264. numParams = st.countTokens();
  265. Class[] exceptionTypeClasses = new Class[numParams];
  266. for (int i = 0; i < numParams; i++)
  267. exceptionTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  268. Class returnTypeClass = makeClass(returnType, lookupClassLoader);
  269. MethodSignatureImpl ret = new MethodSignatureImpl(modifiersAsInt, methodName, declaringTypeClass, paramTypeClasses,
  270. paramNamesArray, exceptionTypeClasses, returnTypeClass);
  271. return ret;
  272. }
  273. public MethodSignature makeMethodSig(int modifiers, String name, Class declaringType, Class[] parameterTypes,
  274. String[] parameterNames, Class[] exceptionTypes, Class returnType) {
  275. MethodSignatureImpl ret = new MethodSignatureImpl(modifiers, name, declaringType, parameterTypes==null?NO_TYPES:parameterTypes, parameterNames,
  276. exceptionTypes == null?NO_TYPES:exceptionTypes, returnType);
  277. ret.setLookupClassLoader(lookupClassLoader);
  278. return ret;
  279. }
  280. public ConstructorSignature makeConstructorSig(String stringRep) {
  281. ConstructorSignatureImpl ret = new ConstructorSignatureImpl(stringRep);
  282. ret.setLookupClassLoader(lookupClassLoader);
  283. return ret;
  284. }
  285. public ConstructorSignature makeConstructorSig(String modifiers, String declaringType, String paramTypes, String paramNames,
  286. String exceptionTypes) {
  287. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  288. Class declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  289. StringTokenizer st = new StringTokenizer(paramTypes, ":");
  290. int numParams = st.countTokens();
  291. Class[] paramTypeClasses = new Class[numParams];
  292. for (int i = 0; i < numParams; i++)
  293. paramTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  294. st = new StringTokenizer(paramNames, ":");
  295. numParams = st.countTokens();
  296. String[] paramNamesArray = new String[numParams];
  297. for (int i = 0; i < numParams; i++)
  298. paramNamesArray[i] = st.nextToken();
  299. st = new StringTokenizer(exceptionTypes, ":");
  300. numParams = st.countTokens();
  301. Class[] exceptionTypeClasses = new Class[numParams];
  302. for (int i = 0; i < numParams; i++)
  303. exceptionTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  304. ConstructorSignatureImpl ret = new ConstructorSignatureImpl(modifiersAsInt, declaringTypeClass, paramTypeClasses,
  305. paramNamesArray, exceptionTypeClasses);
  306. ret.setLookupClassLoader(lookupClassLoader);
  307. return ret;
  308. }
  309. public ConstructorSignature makeConstructorSig(int modifiers, Class declaringType, Class[] parameterTypes,
  310. String[] parameterNames, Class[] exceptionTypes) {
  311. ConstructorSignatureImpl ret = new ConstructorSignatureImpl(modifiers, declaringType, parameterTypes, parameterNames,
  312. exceptionTypes);
  313. ret.setLookupClassLoader(lookupClassLoader);
  314. return ret;
  315. }
  316. public FieldSignature makeFieldSig(String stringRep) {
  317. FieldSignatureImpl ret = new FieldSignatureImpl(stringRep);
  318. ret.setLookupClassLoader(lookupClassLoader);
  319. return ret;
  320. }
  321. public FieldSignature makeFieldSig(String modifiers, String name, String declaringType, String fieldType) {
  322. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  323. Class declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  324. Class fieldTypeClass = makeClass(fieldType, lookupClassLoader);
  325. FieldSignatureImpl ret = new FieldSignatureImpl(modifiersAsInt, name, declaringTypeClass, fieldTypeClass);
  326. ret.setLookupClassLoader(lookupClassLoader);
  327. return ret;
  328. }
  329. public FieldSignature makeFieldSig(int modifiers, String name, Class declaringType, Class fieldType) {
  330. FieldSignatureImpl ret = new FieldSignatureImpl(modifiers, name, declaringType, fieldType);
  331. ret.setLookupClassLoader(lookupClassLoader);
  332. return ret;
  333. }
  334. public AdviceSignature makeAdviceSig(String stringRep) {
  335. AdviceSignatureImpl ret = new AdviceSignatureImpl(stringRep);
  336. ret.setLookupClassLoader(lookupClassLoader);
  337. return ret;
  338. }
  339. public AdviceSignature makeAdviceSig(String modifiers, String name, String declaringType, String paramTypes, String paramNames,
  340. String exceptionTypes, String returnType) {
  341. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  342. Class declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  343. StringTokenizer st = new StringTokenizer(paramTypes, ":");
  344. int numParams = st.countTokens();
  345. Class[] paramTypeClasses = new Class[numParams];
  346. for (int i = 0; i < numParams; i++)
  347. paramTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  348. st = new StringTokenizer(paramNames, ":");
  349. numParams = st.countTokens();
  350. String[] paramNamesArray = new String[numParams];
  351. for (int i = 0; i < numParams; i++)
  352. paramNamesArray[i] = st.nextToken();
  353. st = new StringTokenizer(exceptionTypes, ":");
  354. numParams = st.countTokens();
  355. Class[] exceptionTypeClasses = new Class[numParams];
  356. for (int i = 0; i < numParams; i++)
  357. exceptionTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  358. ;
  359. Class returnTypeClass = makeClass(returnType, lookupClassLoader);
  360. AdviceSignatureImpl ret = new AdviceSignatureImpl(modifiersAsInt, name, declaringTypeClass, paramTypeClasses,
  361. paramNamesArray, exceptionTypeClasses, returnTypeClass);
  362. ret.setLookupClassLoader(lookupClassLoader);
  363. return ret;
  364. }
  365. public AdviceSignature makeAdviceSig(int modifiers, String name, Class declaringType, Class[] parameterTypes,
  366. String[] parameterNames, Class[] exceptionTypes, Class returnType) {
  367. AdviceSignatureImpl ret = new AdviceSignatureImpl(modifiers, name, declaringType, parameterTypes, parameterNames,
  368. exceptionTypes, returnType);
  369. ret.setLookupClassLoader(lookupClassLoader);
  370. return ret;
  371. }
  372. public InitializerSignature makeInitializerSig(String stringRep) {
  373. InitializerSignatureImpl ret = new InitializerSignatureImpl(stringRep);
  374. ret.setLookupClassLoader(lookupClassLoader);
  375. return ret;
  376. }
  377. public InitializerSignature makeInitializerSig(String modifiers, String declaringType) {
  378. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  379. Class declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  380. InitializerSignatureImpl ret = new InitializerSignatureImpl(modifiersAsInt, declaringTypeClass);
  381. ret.setLookupClassLoader(lookupClassLoader);
  382. return ret;
  383. }
  384. public InitializerSignature makeInitializerSig(int modifiers, Class declaringType) {
  385. InitializerSignatureImpl ret = new InitializerSignatureImpl(modifiers, declaringType);
  386. ret.setLookupClassLoader(lookupClassLoader);
  387. return ret;
  388. }
  389. public CatchClauseSignature makeCatchClauseSig(String stringRep) {
  390. CatchClauseSignatureImpl ret = new CatchClauseSignatureImpl(stringRep);
  391. ret.setLookupClassLoader(lookupClassLoader);
  392. return ret;
  393. }
  394. public CatchClauseSignature makeCatchClauseSig(String declaringType, String parameterType, String parameterName) {
  395. Class declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  396. StringTokenizer st = new StringTokenizer(parameterType, ":");
  397. Class parameterTypeClass = makeClass(st.nextToken(), lookupClassLoader);
  398. st = new StringTokenizer(parameterName, ":");
  399. String parameterNameForReturn = st.nextToken();
  400. CatchClauseSignatureImpl ret = new CatchClauseSignatureImpl(declaringTypeClass, parameterTypeClass, parameterNameForReturn);
  401. ret.setLookupClassLoader(lookupClassLoader);
  402. return ret;
  403. }
  404. public CatchClauseSignature makeCatchClauseSig(Class declaringType, Class parameterType, String parameterName) {
  405. CatchClauseSignatureImpl ret = new CatchClauseSignatureImpl(declaringType, parameterType, parameterName);
  406. ret.setLookupClassLoader(lookupClassLoader);
  407. return ret;
  408. }
  409. public LockSignature makeLockSig(String stringRep) {
  410. LockSignatureImpl ret = new LockSignatureImpl(stringRep);
  411. ret.setLookupClassLoader(lookupClassLoader);
  412. return ret;
  413. }
  414. public LockSignature makeLockSig() {
  415. Class declaringTypeClass = makeClass("Ljava/lang/Object;", lookupClassLoader);
  416. LockSignatureImpl ret = new LockSignatureImpl(declaringTypeClass);
  417. ret.setLookupClassLoader(lookupClassLoader);
  418. return ret;
  419. }
  420. public LockSignature makeLockSig(Class declaringType) {
  421. LockSignatureImpl ret = new LockSignatureImpl(declaringType);
  422. ret.setLookupClassLoader(lookupClassLoader);
  423. return ret;
  424. }
  425. public UnlockSignature makeUnlockSig(String stringRep) {
  426. UnlockSignatureImpl ret = new UnlockSignatureImpl(stringRep);
  427. ret.setLookupClassLoader(lookupClassLoader);
  428. return ret;
  429. }
  430. public UnlockSignature makeUnlockSig() {
  431. Class declaringTypeClass = makeClass("Ljava/lang/Object;", lookupClassLoader);
  432. UnlockSignatureImpl ret = new UnlockSignatureImpl(declaringTypeClass);
  433. ret.setLookupClassLoader(lookupClassLoader);
  434. return ret;
  435. }
  436. public UnlockSignature makeUnlockSig(Class declaringType) {
  437. UnlockSignatureImpl ret = new UnlockSignatureImpl(declaringType);
  438. ret.setLookupClassLoader(lookupClassLoader);
  439. return ret;
  440. }
  441. public SourceLocation makeSourceLoc(int line, int col) {
  442. return new SourceLocationImpl(lexicalClass, this.filename, line);
  443. }
  444. }