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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  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 v 2.0
  7. * which accompanies this distribution and is available at
  8. * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
  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<String, Class<?>> 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. // @since 1.6.10
  87. public JoinPoint.StaticPart makeSJP(String kind, String modifiers, String methodName, String declaringType, String paramTypes,
  88. String paramNames, String exceptionTypes, String returnType, int l) {
  89. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes, paramNames, exceptionTypes, returnType);
  90. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  91. }
  92. // 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
  93. // code but merging these methods in the runtime library enables the generated code to be shorter. Generating code that
  94. // uses this method requires the weaver to be invoked with <tt>-Xset:targetRuntime1_6_10=true</tt>.
  95. // This method differs from the previous one in that it includes no exceptionTypes parameter - it is an optimization for the
  96. // case where there are no exceptions. The generated code won't build an empty string and will not pass it into here.
  97. //
  98. // @since 1.6.10
  99. public JoinPoint.StaticPart makeSJP(String kind, String modifiers, String methodName, String declaringType, String paramTypes,
  100. String paramNames, String returnType, int l) {
  101. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes, paramNames, "", returnType);
  102. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  103. }
  104. // These are direct routes to creating thisJoinPoint and thisEnclosingJoinPoint objects
  105. // added in 1.9.1
  106. public JoinPoint.StaticPart makeMethodSJP(String kind, int modifiers, String methodName, Class declaringType, Class[] paramTypes, String[] paramNames, Class[] exceptionTypes, Class returnType, int line) {
  107. Signature sig = this.makeMethodSig(modifiers, methodName, declaringType, paramTypes==null?NO_TYPES:paramTypes,
  108. paramNames==null?NO_STRINGS:paramNames, exceptionTypes==null?NO_TYPES:exceptionTypes, returnType == null?Void.TYPE:returnType);
  109. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  110. }
  111. public JoinPoint.EnclosingStaticPart makeMethodESJP(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.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  115. }
  116. public JoinPoint.StaticPart makeConstructorSJP(String kind, int modifiers, Class declaringType, Class[] parameterTypes, String[] parameterNames, Class[] exceptionTypes, int line) {
  117. ConstructorSignatureImpl sig = new ConstructorSignatureImpl(modifiers, declaringType, parameterTypes==null?NO_TYPES:parameterTypes, parameterNames==null?NO_STRINGS:parameterNames,
  118. exceptionTypes==null?NO_TYPES:exceptionTypes);
  119. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  120. }
  121. public JoinPoint.EnclosingStaticPart makeConstructorESJP(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.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  125. }
  126. public JoinPoint.StaticPart makeCatchClauseSJP(String kind, Class declaringType, Class parameterType, String parameterName, int line) {
  127. CatchClauseSignatureImpl sig = new CatchClauseSignatureImpl(declaringType, parameterType, parameterName==null?"":parameterName);
  128. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  129. }
  130. public JoinPoint.EnclosingStaticPart makeCatchClauseESJP(String kind, Class declaringType, Class parameterType, String parameterName, int line) {
  131. CatchClauseSignatureImpl sig = new CatchClauseSignatureImpl(declaringType, parameterType, parameterName==null?"":parameterName);
  132. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  133. }
  134. public JoinPoint.StaticPart makeFieldSJP(String kind, int modifiers, String name, Class declaringType, Class fieldType, int line) {
  135. FieldSignatureImpl sig = new FieldSignatureImpl(modifiers, name, declaringType, fieldType);
  136. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  137. }
  138. public JoinPoint.EnclosingStaticPart makeFieldESJP(String kind, int modifiers, String name, Class declaringType, Class fieldType, int line) {
  139. FieldSignatureImpl sig = new FieldSignatureImpl(modifiers, name, declaringType, fieldType);
  140. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  141. }
  142. public JoinPoint.StaticPart makeInitializerSJP(String kind, int modifiers, Class declaringType, int line) {
  143. InitializerSignatureImpl sig = new InitializerSignatureImpl(modifiers, declaringType);
  144. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  145. }
  146. public JoinPoint.EnclosingStaticPart makeInitializerESJP(String kind, int modifiers, Class declaringType, int line) {
  147. InitializerSignatureImpl sig = new InitializerSignatureImpl(modifiers, declaringType);
  148. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  149. }
  150. public JoinPoint.StaticPart makeLockSJP(String kind, Class declaringType, int line) {
  151. LockSignatureImpl sig = new LockSignatureImpl(declaringType);
  152. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  153. }
  154. public JoinPoint.EnclosingStaticPart makeLockESJP(String kind, Class declaringType, int line) {
  155. LockSignatureImpl sig = new LockSignatureImpl(declaringType);
  156. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  157. }
  158. public JoinPoint.StaticPart makeUnlockSJP(String kind, Class declaringType, int line) {
  159. UnlockSignatureImpl sig = new UnlockSignatureImpl(declaringType);
  160. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  161. }
  162. public JoinPoint.EnclosingStaticPart makeUnlockESJP(String kind, Class declaringType, int line) {
  163. UnlockSignatureImpl sig = new UnlockSignatureImpl(declaringType);
  164. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  165. }
  166. public JoinPoint.StaticPart makeAdviceSJP(String kind, int modifiers, String name, Class declaringType, Class[] parameterTypes,
  167. String[] parameterNames, Class[] exceptionTypes, Class returnType, int line) {
  168. AdviceSignatureImpl sig = new AdviceSignatureImpl(modifiers, name, declaringType,
  169. parameterTypes==null?NO_TYPES:parameterTypes,
  170. parameterNames==null?NO_STRINGS:parameterNames,
  171. exceptionTypes==null?NO_TYPES:exceptionTypes,
  172. returnType==null?Void.TYPE:returnType);
  173. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  174. }
  175. public JoinPoint.EnclosingStaticPart makeAdviceESJP(String kind, int modifiers, String name, Class declaringType, Class[] parameterTypes,
  176. String[] parameterNames, Class[] exceptionTypes, Class returnType, int line) {
  177. AdviceSignatureImpl sig = new AdviceSignatureImpl(modifiers, name, declaringType,
  178. parameterTypes==null?NO_TYPES:parameterTypes,
  179. parameterNames==null?NO_STRINGS:parameterNames,
  180. exceptionTypes==null?NO_TYPES:exceptionTypes,
  181. returnType==null?Void.TYPE:returnType);
  182. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(line, -1));
  183. }
  184. // ---
  185. public JoinPoint.StaticPart makeSJP(String kind, Signature sig, SourceLocation loc) {
  186. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, loc);
  187. }
  188. public JoinPoint.StaticPart makeSJP(String kind, Signature sig, int l, int c) {
  189. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, c));
  190. }
  191. public JoinPoint.StaticPart makeSJP(String kind, Signature sig, int l) {
  192. return new JoinPointImpl.StaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  193. }
  194. public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, SourceLocation loc) {
  195. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, loc);
  196. }
  197. public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, int l, int c) {
  198. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(l, c));
  199. }
  200. public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, int l) {
  201. return new JoinPointImpl.EnclosingStaticPartImpl(count++, kind, sig, makeSourceLoc(l, -1));
  202. }
  203. public static JoinPoint.StaticPart makeEncSJP(Member member) {
  204. Signature sig = null;
  205. String kind = null;
  206. if (member instanceof Method) {
  207. Method method = (Method) member;
  208. sig = new MethodSignatureImpl(method.getModifiers(), method.getName(), method.getDeclaringClass(), method
  209. .getParameterTypes(), new String[method.getParameterTypes().length], method.getExceptionTypes(), method
  210. .getReturnType());
  211. kind = JoinPoint.METHOD_EXECUTION;
  212. } else if (member instanceof Constructor) {
  213. Constructor<?> cons = (Constructor<?>) member;
  214. sig = new ConstructorSignatureImpl(cons.getModifiers(), cons.getDeclaringClass(), cons.getParameterTypes(),
  215. new String[cons.getParameterTypes().length], cons.getExceptionTypes());
  216. kind = JoinPoint.CONSTRUCTOR_EXECUTION;
  217. } else {
  218. throw new IllegalArgumentException("member must be either a method or constructor");
  219. }
  220. return new JoinPointImpl.EnclosingStaticPartImpl(-1, kind, sig, null);
  221. }
  222. private static Object[] NO_ARGS = new Object[0];
  223. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target) {
  224. return new JoinPointImpl(staticPart, _this, target, NO_ARGS);
  225. }
  226. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target, Object arg0) {
  227. return new JoinPointImpl(staticPart, _this, target, new Object[] { arg0 });
  228. }
  229. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target, Object arg0, Object arg1) {
  230. return new JoinPointImpl(staticPart, _this, target, new Object[] { arg0, arg1 });
  231. }
  232. public static JoinPoint makeJP(JoinPoint.StaticPart staticPart, Object _this, Object target, Object[] args) {
  233. return new JoinPointImpl(staticPart, _this, target, args);
  234. }
  235. public MethodSignature makeMethodSig(String stringRep) {
  236. MethodSignatureImpl ret = new MethodSignatureImpl(stringRep);
  237. ret.setLookupClassLoader(lookupClassLoader);
  238. return ret;
  239. }
  240. public MethodSignature makeMethodSig(String modifiers, String methodName, String declaringType, String paramTypes,
  241. String paramNames, String exceptionTypes, String returnType) {
  242. Class<?> declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  243. return makeMethodSig(modifiers, methodName, declaringTypeClass, paramTypes, paramNames, exceptionTypes, returnType);
  244. }
  245. public MethodSignature makeMethodSig(String modifiers, String methodName, Class declaringTypeClass, String paramTypes,
  246. String paramNames, String exceptionTypes, String returnType) {
  247. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  248. StringTokenizer st = new StringTokenizer(paramTypes, ":");
  249. int numParams = st.countTokens();
  250. Class[] paramTypeClasses = new Class[numParams];
  251. for (int i = 0; i < numParams; i++)
  252. paramTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  253. st = new StringTokenizer(paramNames, ":");
  254. numParams = st.countTokens();
  255. String[] paramNamesArray = new String[numParams];
  256. for (int i = 0; i < numParams; i++)
  257. paramNamesArray[i] = st.nextToken();
  258. st = new StringTokenizer(exceptionTypes, ":");
  259. numParams = st.countTokens();
  260. Class[] exceptionTypeClasses = new Class[numParams];
  261. for (int i = 0; i < numParams; i++)
  262. exceptionTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  263. Class<?> returnTypeClass = makeClass(returnType, lookupClassLoader);
  264. MethodSignatureImpl ret = new MethodSignatureImpl(modifiersAsInt, methodName, declaringTypeClass, paramTypeClasses,
  265. paramNamesArray, exceptionTypeClasses, returnTypeClass);
  266. return ret;
  267. }
  268. public MethodSignature makeMethodSig(int modifiers, String name, Class declaringType, Class[] parameterTypes,
  269. String[] parameterNames, Class[] exceptionTypes, Class returnType) {
  270. MethodSignatureImpl ret = new MethodSignatureImpl(modifiers, name, declaringType, parameterTypes==null?NO_TYPES:parameterTypes, parameterNames,
  271. exceptionTypes == null?NO_TYPES:exceptionTypes, returnType);
  272. ret.setLookupClassLoader(lookupClassLoader);
  273. return ret;
  274. }
  275. public ConstructorSignature makeConstructorSig(String stringRep) {
  276. ConstructorSignatureImpl ret = new ConstructorSignatureImpl(stringRep);
  277. ret.setLookupClassLoader(lookupClassLoader);
  278. return ret;
  279. }
  280. public ConstructorSignature makeConstructorSig(String modifiers, String declaringType, String paramTypes, String paramNames,
  281. String exceptionTypes) {
  282. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  283. Class<?> declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  284. StringTokenizer st = new StringTokenizer(paramTypes, ":");
  285. int numParams = st.countTokens();
  286. Class[] paramTypeClasses = new Class[numParams];
  287. for (int i = 0; i < numParams; i++)
  288. paramTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  289. st = new StringTokenizer(paramNames, ":");
  290. numParams = st.countTokens();
  291. String[] paramNamesArray = new String[numParams];
  292. for (int i = 0; i < numParams; i++)
  293. paramNamesArray[i] = st.nextToken();
  294. st = new StringTokenizer(exceptionTypes, ":");
  295. numParams = st.countTokens();
  296. Class[] exceptionTypeClasses = new Class[numParams];
  297. for (int i = 0; i < numParams; i++)
  298. exceptionTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  299. ConstructorSignatureImpl ret = new ConstructorSignatureImpl(modifiersAsInt, declaringTypeClass, paramTypeClasses,
  300. paramNamesArray, exceptionTypeClasses);
  301. ret.setLookupClassLoader(lookupClassLoader);
  302. return ret;
  303. }
  304. public ConstructorSignature makeConstructorSig(int modifiers, Class declaringType, Class[] parameterTypes,
  305. String[] parameterNames, Class[] exceptionTypes) {
  306. ConstructorSignatureImpl ret = new ConstructorSignatureImpl(modifiers, declaringType, parameterTypes, parameterNames,
  307. exceptionTypes);
  308. ret.setLookupClassLoader(lookupClassLoader);
  309. return ret;
  310. }
  311. public FieldSignature makeFieldSig(String stringRep) {
  312. FieldSignatureImpl ret = new FieldSignatureImpl(stringRep);
  313. ret.setLookupClassLoader(lookupClassLoader);
  314. return ret;
  315. }
  316. public FieldSignature makeFieldSig(String modifiers, String name, String declaringType, String fieldType) {
  317. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  318. Class<?> declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  319. Class<?> fieldTypeClass = makeClass(fieldType, lookupClassLoader);
  320. FieldSignatureImpl ret = new FieldSignatureImpl(modifiersAsInt, name, declaringTypeClass, fieldTypeClass);
  321. ret.setLookupClassLoader(lookupClassLoader);
  322. return ret;
  323. }
  324. public FieldSignature makeFieldSig(int modifiers, String name, Class declaringType, Class fieldType) {
  325. FieldSignatureImpl ret = new FieldSignatureImpl(modifiers, name, declaringType, fieldType);
  326. ret.setLookupClassLoader(lookupClassLoader);
  327. return ret;
  328. }
  329. public AdviceSignature makeAdviceSig(String stringRep) {
  330. AdviceSignatureImpl ret = new AdviceSignatureImpl(stringRep);
  331. ret.setLookupClassLoader(lookupClassLoader);
  332. return ret;
  333. }
  334. public AdviceSignature makeAdviceSig(String modifiers, String name, String declaringType, String paramTypes, String paramNames,
  335. String exceptionTypes, String returnType) {
  336. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  337. Class<?> declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  338. StringTokenizer st = new StringTokenizer(paramTypes, ":");
  339. int numParams = st.countTokens();
  340. Class[] paramTypeClasses = new Class[numParams];
  341. for (int i = 0; i < numParams; i++)
  342. paramTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  343. st = new StringTokenizer(paramNames, ":");
  344. numParams = st.countTokens();
  345. String[] paramNamesArray = new String[numParams];
  346. for (int i = 0; i < numParams; i++)
  347. paramNamesArray[i] = st.nextToken();
  348. st = new StringTokenizer(exceptionTypes, ":");
  349. numParams = st.countTokens();
  350. Class[] exceptionTypeClasses = new Class[numParams];
  351. for (int i = 0; i < numParams; i++)
  352. exceptionTypeClasses[i] = makeClass(st.nextToken(), lookupClassLoader);
  353. ;
  354. Class<?> returnTypeClass = makeClass(returnType, lookupClassLoader);
  355. AdviceSignatureImpl ret = new AdviceSignatureImpl(modifiersAsInt, name, declaringTypeClass, paramTypeClasses,
  356. paramNamesArray, exceptionTypeClasses, returnTypeClass);
  357. ret.setLookupClassLoader(lookupClassLoader);
  358. return ret;
  359. }
  360. public AdviceSignature makeAdviceSig(int modifiers, String name, Class declaringType, Class[] parameterTypes,
  361. String[] parameterNames, Class[] exceptionTypes, Class returnType) {
  362. AdviceSignatureImpl ret = new AdviceSignatureImpl(modifiers, name, declaringType, parameterTypes, parameterNames,
  363. exceptionTypes, returnType);
  364. ret.setLookupClassLoader(lookupClassLoader);
  365. return ret;
  366. }
  367. public InitializerSignature makeInitializerSig(String stringRep) {
  368. InitializerSignatureImpl ret = new InitializerSignatureImpl(stringRep);
  369. ret.setLookupClassLoader(lookupClassLoader);
  370. return ret;
  371. }
  372. public InitializerSignature makeInitializerSig(String modifiers, String declaringType) {
  373. int modifiersAsInt = Integer.parseInt(modifiers, 16);
  374. Class<?> declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  375. InitializerSignatureImpl ret = new InitializerSignatureImpl(modifiersAsInt, declaringTypeClass);
  376. ret.setLookupClassLoader(lookupClassLoader);
  377. return ret;
  378. }
  379. public InitializerSignature makeInitializerSig(int modifiers, Class declaringType) {
  380. InitializerSignatureImpl ret = new InitializerSignatureImpl(modifiers, declaringType);
  381. ret.setLookupClassLoader(lookupClassLoader);
  382. return ret;
  383. }
  384. public CatchClauseSignature makeCatchClauseSig(String stringRep) {
  385. CatchClauseSignatureImpl ret = new CatchClauseSignatureImpl(stringRep);
  386. ret.setLookupClassLoader(lookupClassLoader);
  387. return ret;
  388. }
  389. public CatchClauseSignature makeCatchClauseSig(String declaringType, String parameterType, String parameterName) {
  390. Class<?> declaringTypeClass = makeClass(declaringType, lookupClassLoader);
  391. StringTokenizer st = new StringTokenizer(parameterType, ":");
  392. Class<?> parameterTypeClass = makeClass(st.nextToken(), lookupClassLoader);
  393. st = new StringTokenizer(parameterName, ":");
  394. String parameterNameForReturn = st.nextToken();
  395. CatchClauseSignatureImpl ret = new CatchClauseSignatureImpl(declaringTypeClass, parameterTypeClass, parameterNameForReturn);
  396. ret.setLookupClassLoader(lookupClassLoader);
  397. return ret;
  398. }
  399. public CatchClauseSignature makeCatchClauseSig(Class declaringType, Class parameterType, String parameterName) {
  400. CatchClauseSignatureImpl ret = new CatchClauseSignatureImpl(declaringType, parameterType, parameterName);
  401. ret.setLookupClassLoader(lookupClassLoader);
  402. return ret;
  403. }
  404. public LockSignature makeLockSig(String stringRep) {
  405. LockSignatureImpl ret = new LockSignatureImpl(stringRep);
  406. ret.setLookupClassLoader(lookupClassLoader);
  407. return ret;
  408. }
  409. public LockSignature makeLockSig() {
  410. Class<?> declaringTypeClass = makeClass("Ljava/lang/Object;", lookupClassLoader);
  411. LockSignatureImpl ret = new LockSignatureImpl(declaringTypeClass);
  412. ret.setLookupClassLoader(lookupClassLoader);
  413. return ret;
  414. }
  415. public LockSignature makeLockSig(Class declaringType) {
  416. LockSignatureImpl ret = new LockSignatureImpl(declaringType);
  417. ret.setLookupClassLoader(lookupClassLoader);
  418. return ret;
  419. }
  420. public UnlockSignature makeUnlockSig(String stringRep) {
  421. UnlockSignatureImpl ret = new UnlockSignatureImpl(stringRep);
  422. ret.setLookupClassLoader(lookupClassLoader);
  423. return ret;
  424. }
  425. public UnlockSignature makeUnlockSig() {
  426. Class<?> declaringTypeClass = makeClass("Ljava/lang/Object;", lookupClassLoader);
  427. UnlockSignatureImpl ret = new UnlockSignatureImpl(declaringTypeClass);
  428. ret.setLookupClassLoader(lookupClassLoader);
  429. return ret;
  430. }
  431. public UnlockSignature makeUnlockSig(Class declaringType) {
  432. UnlockSignatureImpl ret = new UnlockSignatureImpl(declaringType);
  433. ret.setLookupClassLoader(lookupClassLoader);
  434. return ret;
  435. }
  436. public SourceLocation makeSourceLoc(int line, int col) {
  437. return new SourceLocationImpl(lexicalClass, this.filename, line);
  438. }
  439. }