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.

SignatureUtils.java 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /* *******************************************************************
  2. * Copyright (c) 2008 Contributors
  3. *
  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. * Andy Clement - refactored out of MemberImpl
  12. * ******************************************************************/
  13. package org.aspectj.weaver;
  14. import java.lang.reflect.Modifier;
  15. public class SignatureUtils {
  16. public static String getSignatureString(Member m, World world) {
  17. MemberKind kind = m.getKind();
  18. if (kind == Member.METHOD) {
  19. return getMethodSignatureString(m, world);
  20. } else if (kind == Member.CONSTRUCTOR) {
  21. return getConstructorSignatureString(m, world);
  22. } else if (kind == Member.FIELD) {
  23. return getFieldSignatureString(m, world);
  24. } else if (kind == Member.HANDLER) {
  25. return getHandlerSignatureString(m, world);
  26. } else if (kind == Member.STATIC_INITIALIZATION) {
  27. return getStaticInitializationSignatureString(m, world);
  28. } else if (kind == Member.ADVICE) {
  29. return getAdviceSignatureString(m, world);
  30. } else if (kind == Member.MONITORENTER || kind == Member.MONITOREXIT) {
  31. return getMonitorSignatureString(m, world);
  32. } else {
  33. throw new BCException("Do not know the signature string for MemberKind " + kind);
  34. }
  35. }
  36. public static String getSignatureMakerName(Member m) {
  37. MemberKind kind = m.getKind();
  38. if (kind == Member.METHOD) {
  39. return "makeMethodSig";
  40. } else if (kind == Member.CONSTRUCTOR) {
  41. return "makeConstructorSig";
  42. } else if (kind == Member.FIELD) {
  43. return "makeFieldSig";
  44. } else if (kind == Member.HANDLER) {
  45. return "makeCatchClauseSig";
  46. } else if (kind == Member.STATIC_INITIALIZATION) {
  47. return "makeInitializerSig";
  48. } else if (kind == Member.ADVICE) {
  49. return "makeAdviceSig";
  50. } else if (kind == Member.MONITORENTER) {
  51. return "makeLockSig";
  52. } else if (kind == Member.MONITOREXIT) {
  53. return "makeUnlockSig";
  54. } else {
  55. throw new BCException("Do not know the signature maker name for MemberKind " + kind);
  56. }
  57. }
  58. public static String getSignatureType(Member m) {
  59. MemberKind kind = m.getKind();
  60. if (m.getName().equals("<clinit>") && kind != Member.STATIC_INITIALIZATION)
  61. throw new BCException();
  62. // if (m.getName().equals("<clinit>")) return "org.aspectj.lang.reflect.InitializerSignature";
  63. if (kind == Member.METHOD) {
  64. return "org.aspectj.lang.reflect.MethodSignature";
  65. } else if (kind == Member.CONSTRUCTOR) {
  66. return "org.aspectj.lang.reflect.ConstructorSignature";
  67. } else if (kind == Member.FIELD) {
  68. return "org.aspectj.lang.reflect.FieldSignature";
  69. } else if (kind == Member.HANDLER) {
  70. return "org.aspectj.lang.reflect.CatchClauseSignature";
  71. } else if (kind == Member.STATIC_INITIALIZATION) {
  72. return "org.aspectj.lang.reflect.InitializerSignature";
  73. } else if (kind == Member.ADVICE) {
  74. return "org.aspectj.lang.reflect.AdviceSignature";
  75. } else if (kind == Member.MONITORENTER) {
  76. return "org.aspectj.lang.reflect.LockSignature";
  77. } else if (kind == Member.MONITOREXIT) {
  78. return "org.aspectj.lang.reflect.UnlockSignature";
  79. } else {
  80. throw new BCException("Do not know the signature type for MemberKind " + kind);
  81. }
  82. }
  83. // ---
  84. private static String getHandlerSignatureString(Member m, World world) {
  85. StringBuffer buf = new StringBuffer();
  86. buf.append(makeString(0));
  87. buf.append('-');
  88. // buf.append(getName());
  89. buf.append('-');
  90. buf.append(makeString(m.getDeclaringType()));
  91. buf.append('-');
  92. buf.append(makeString(m.getParameterTypes()[0]));
  93. buf.append('-');
  94. String pName = "<missing>";
  95. String[] names = m.getParameterNames(world);
  96. if (names != null)
  97. pName = names[0];
  98. buf.append(pName);
  99. buf.append('-');
  100. return buf.toString();
  101. }
  102. private static String getStaticInitializationSignatureString(Member m, World world) {
  103. StringBuffer buf = new StringBuffer();
  104. buf.append(makeString(m.getModifiers(world)));
  105. buf.append('-');
  106. // buf.append(getName());
  107. buf.append('-');
  108. buf.append(makeString(m.getDeclaringType()));
  109. buf.append('-');
  110. return buf.toString();
  111. }
  112. protected static String getAdviceSignatureString(Member m, World world) {
  113. StringBuffer buf = new StringBuffer();
  114. buf.append(makeString(m.getModifiers(world)));
  115. buf.append('-');
  116. buf.append(m.getName());
  117. buf.append('-');
  118. buf.append(makeString(m.getDeclaringType()));
  119. buf.append('-');
  120. buf.append(makeString(m.getParameterTypes()));
  121. buf.append('-');
  122. buf.append(makeString(m.getParameterNames(world)));
  123. buf.append('-');
  124. buf.append(makeString(m.getExceptions(world)));
  125. buf.append('-');
  126. buf.append(makeString(m.getReturnType()));
  127. buf.append('-');
  128. return buf.toString();
  129. }
  130. protected static String getMethodSignatureString(Member m, World world) {
  131. StringBuffer buf = new StringBuffer();
  132. buf.append(makeString(m.getModifiers(world)));
  133. buf.append('-');
  134. buf.append(m.getName());
  135. buf.append('-');
  136. buf.append(makeString(m.getDeclaringType()));
  137. buf.append('-');
  138. buf.append(makeString(m.getParameterTypes()));
  139. buf.append('-');
  140. buf.append(makeString(m.getParameterNames(world)));
  141. buf.append('-');
  142. buf.append(makeString(m.getExceptions(world)));
  143. buf.append('-');
  144. buf.append(makeString(m.getReturnType()));
  145. buf.append('-');
  146. return buf.toString();
  147. }
  148. protected static String getMonitorSignatureString(Member m, World world) {
  149. StringBuffer buf = new StringBuffer();
  150. buf.append(makeString(Modifier.STATIC)); // modifiers
  151. buf.append('-');
  152. buf.append(m.getName()); // name
  153. buf.append('-');
  154. buf.append(makeString(m.getDeclaringType())); // Declaring Type
  155. buf.append('-');
  156. buf.append(makeString(m.getParameterTypes()[0])); // Parameter Types
  157. buf.append('-');
  158. buf.append(""); // Parameter names
  159. buf.append('-');
  160. return buf.toString();
  161. }
  162. protected static String getConstructorSignatureString(Member m, World world) {
  163. StringBuffer buf = new StringBuffer();
  164. buf.append(makeString(m.getModifiers(world)));
  165. buf.append('-');
  166. buf.append('-');
  167. buf.append(makeString(m.getDeclaringType()));
  168. buf.append('-');
  169. buf.append(makeString(m.getParameterTypes()));
  170. buf.append('-');
  171. buf.append(makeString(m.getParameterNames(world)));
  172. buf.append('-');
  173. buf.append(makeString(m.getExceptions(world)));
  174. buf.append('-');
  175. return buf.toString();
  176. }
  177. protected static String getFieldSignatureString(Member m, World world) {
  178. StringBuffer buf = new StringBuffer();
  179. buf.append(makeString(m.getModifiers(world)));
  180. buf.append('-');
  181. buf.append(m.getName());
  182. buf.append('-');
  183. buf.append(makeString(m.getDeclaringType()));
  184. buf.append('-');
  185. buf.append(makeString(m.getReturnType()));
  186. buf.append('-');
  187. return buf.toString();
  188. }
  189. protected static String makeString(int i) {
  190. return Integer.toString(i, 16);
  191. }
  192. protected static String makeString(UnresolvedType t) {
  193. // this is the inverse of the odd behavior for Class.forName w/ arrays
  194. if (t.isArray()) {
  195. // this behavior matches the string used by the eclipse compiler for Foo.class literals
  196. return t.getSignature().replace('/', '.');
  197. } else {
  198. return t.getName();
  199. }
  200. }
  201. protected static String makeString(UnresolvedType[] types) {
  202. if (types == null)
  203. return "";
  204. StringBuffer buf = new StringBuffer();
  205. for (int i = 0, len = types.length; i < len; i++) {
  206. buf.append(makeString(types[i]));
  207. buf.append(':');
  208. }
  209. return buf.toString();
  210. }
  211. protected static String makeString(String[] names) {
  212. if (names == null)
  213. return "";
  214. StringBuffer buf = new StringBuffer();
  215. for (int i = 0, len = names.length; i < len; i++) {
  216. buf.append(names[i]);
  217. buf.append(':');
  218. }
  219. return buf.toString();
  220. }
  221. }