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.

JoinPointSignature.java 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. /* *******************************************************************
  2. * Copyright (c) 2005 Contributors.
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Adrian Colyer Initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.weaver;
  13. import java.io.DataOutputStream;
  14. import java.io.IOException;
  15. import java.util.Collection;
  16. import java.util.Iterator;
  17. import java.util.List;
  18. import java.util.Map;
  19. import org.aspectj.bridge.ISourceLocation;
  20. import org.aspectj.weaver.AjAttribute.EffectiveSignatureAttribute;
  21. /**
  22. * @author colyer
  23. * Instances of this class are created by ResolvedMember.getSignatures() when collating
  24. * all of the signatures for a member. We need to create entries in the set for the "gaps"
  25. * in the hierarchy. For example:
  26. *
  27. * class A {
  28. * void foo();
  29. * }
  30. *
  31. * class B extends A {}
  32. *
  33. * Join Point : call(* B.foo())
  34. *
  35. * has signatures:
  36. *
  37. * B.foo() AND A.foo()
  38. * B.foo() will be created as a ResolvedMemberWithSubstituteDeclaringType
  39. *
  40. * Oh for a JDK 1.4 dynamic proxy.... we have to run on 1.3 :(
  41. */
  42. public class JoinPointSignature implements ResolvedMember {
  43. private ResolvedMember realMember;
  44. private ResolvedType substituteDeclaringType;
  45. public JoinPointSignature(ResolvedMember backing, ResolvedType aType) {
  46. this.realMember = backing;
  47. this.substituteDeclaringType = aType;
  48. }
  49. public UnresolvedType getDeclaringType() {
  50. return substituteDeclaringType;
  51. }
  52. public int getModifiers(World world) {
  53. return realMember.getModifiers(world);
  54. }
  55. public int getModifiers() {
  56. return realMember.getModifiers();
  57. }
  58. public UnresolvedType[] getExceptions(World world) {
  59. return realMember.getExceptions(world);
  60. }
  61. public UnresolvedType[] getExceptions() {
  62. return realMember.getExceptions();
  63. }
  64. public ShadowMunger getAssociatedShadowMunger() {
  65. return realMember.getAssociatedShadowMunger();
  66. }
  67. public boolean isAjSynthetic() {
  68. return realMember.isAjSynthetic();
  69. }
  70. public boolean hasAnnotations() {
  71. return realMember.hasAnnotations();
  72. }
  73. public boolean hasAnnotation(UnresolvedType ofType) {
  74. return realMember.hasAnnotation(ofType);
  75. }
  76. public ResolvedType[] getAnnotationTypes() {
  77. return realMember.getAnnotationTypes();
  78. }
  79. public AnnotationX getAnnotationOfType(UnresolvedType ofType) {
  80. return realMember.getAnnotationOfType(ofType);
  81. }
  82. public void setAnnotationTypes(UnresolvedType[] annotationtypes) {
  83. realMember.setAnnotationTypes(annotationtypes);
  84. }
  85. public void addAnnotation(AnnotationX annotation) {
  86. realMember.addAnnotation(annotation);
  87. }
  88. public boolean isBridgeMethod() {
  89. return realMember.isBridgeMethod();
  90. }
  91. public boolean isVarargsMethod() {
  92. return realMember.isVarargsMethod();
  93. }
  94. public boolean isSynthetic() {
  95. return realMember.isSynthetic();
  96. }
  97. public void write(DataOutputStream s) throws IOException {
  98. realMember.write(s);
  99. }
  100. public ISourceContext getSourceContext(World world) {
  101. return realMember.getSourceContext(world);
  102. }
  103. public String[] getParameterNames() {
  104. return realMember.getParameterNames();
  105. }
  106. public void setParameterNames(String[] names) {
  107. realMember.setParameterNames(names);
  108. }
  109. public String[] getParameterNames(World world) {
  110. return realMember.getParameterNames(world);
  111. }
  112. public EffectiveSignatureAttribute getEffectiveSignature() {
  113. return realMember.getEffectiveSignature();
  114. }
  115. public ISourceLocation getSourceLocation() {
  116. return realMember.getSourceLocation();
  117. }
  118. public int getEnd() {
  119. return realMember.getEnd();
  120. }
  121. public ISourceContext getSourceContext() {
  122. return realMember.getSourceContext();
  123. }
  124. public int getStart() {
  125. return realMember.getStart();
  126. }
  127. public void setPosition(int sourceStart, int sourceEnd) {
  128. realMember.setPosition(sourceStart,sourceEnd);
  129. }
  130. public void setSourceContext(ISourceContext sourceContext) {
  131. realMember.setSourceContext(sourceContext);
  132. }
  133. public boolean isAbstract() {
  134. return realMember.isAbstract();
  135. }
  136. public boolean isPublic() {
  137. return realMember.isPublic();
  138. }
  139. public boolean isProtected() {
  140. return realMember.isProtected();
  141. }
  142. public boolean isNative() {
  143. return realMember.isNative();
  144. }
  145. public boolean isDefault() {
  146. return realMember.isDefault();
  147. }
  148. public boolean isVisible(ResolvedType fromType) {
  149. return realMember.isVisible(fromType);
  150. }
  151. public void setCheckedExceptions(UnresolvedType[] checkedExceptions) {
  152. realMember.setCheckedExceptions(checkedExceptions);
  153. }
  154. public void setAnnotatedElsewhere(boolean b) {
  155. realMember.setAnnotatedElsewhere(b);
  156. }
  157. public boolean isAnnotatedElsewhere() {
  158. return realMember.isAnnotatedElsewhere();
  159. }
  160. public UnresolvedType getGenericReturnType() {
  161. return realMember.getGenericReturnType();
  162. }
  163. public UnresolvedType[] getGenericParameterTypes() {
  164. return realMember.getGenericParameterTypes();
  165. }
  166. public ResolvedMemberImpl parameterizedWith(UnresolvedType[] typeParameters, ResolvedType newDeclaringType, boolean isParameterized) {
  167. return realMember.parameterizedWith(typeParameters, newDeclaringType, isParameterized);
  168. }
  169. public ResolvedMemberImpl parameterizedWith(UnresolvedType[] typeParameters, ResolvedType newDeclaringType, boolean isParameterized,List aliases) {
  170. return realMember.parameterizedWith(typeParameters, newDeclaringType, isParameterized,aliases);
  171. }
  172. public void setTypeVariables(TypeVariable[] types) {
  173. realMember.setTypeVariables(types);
  174. }
  175. public TypeVariable[] getTypeVariables() {
  176. return realMember.getTypeVariables();
  177. }
  178. public TypeVariable getTypeVariableNamed(String name) {
  179. return realMember.getTypeVariableNamed(name);
  180. }
  181. public ResolvedMember getErasure() {
  182. throw new UnsupportedOperationException("Adrian doesn't think you should be asking for the erasure of one of these...");
  183. }
  184. public boolean matches(ResolvedMember aCandidateMatch) {
  185. return realMember.matches(aCandidateMatch);
  186. }
  187. public ResolvedMember resolve(World world) {
  188. return realMember.resolve(world);
  189. }
  190. public MemberKind getKind() {
  191. return realMember.getKind();
  192. }
  193. public UnresolvedType getReturnType() {
  194. return realMember.getReturnType();
  195. }
  196. public UnresolvedType getType() {
  197. return realMember.getType();
  198. }
  199. public String getName() {
  200. return realMember.getName();
  201. }
  202. public UnresolvedType[] getParameterTypes() {
  203. return realMember.getParameterTypes();
  204. }
  205. public AnnotationX[][] getParameterAnnotations() {
  206. return realMember.getParameterAnnotations();
  207. }
  208. public ResolvedType[][] getParameterAnnotationTypes() {
  209. return realMember.getParameterAnnotationTypes();
  210. }
  211. public String getSignature() {
  212. return realMember.getSignature();
  213. }
  214. public int getArity() {
  215. return realMember.getArity();
  216. }
  217. public String getParameterSignature() {
  218. return realMember.getParameterSignature();
  219. }
  220. public boolean isCompatibleWith(Member am) {
  221. return realMember.isCompatibleWith(am);
  222. }
  223. public boolean isStatic() {
  224. return realMember.isStatic();
  225. }
  226. public boolean isInterface() {
  227. return realMember.isInterface();
  228. }
  229. public boolean isPrivate() {
  230. return realMember.isPrivate();
  231. }
  232. public boolean canBeParameterized() {
  233. return realMember.canBeParameterized();
  234. }
  235. public int getCallsiteModifiers() {
  236. return realMember.getCallsiteModifiers();
  237. }
  238. public String getExtractableName() {
  239. return realMember.getExtractableName();
  240. }
  241. public AnnotationX[] getAnnotations() {
  242. return realMember.getAnnotations();
  243. }
  244. public Collection getDeclaringTypes(World world) {
  245. throw new UnsupportedOperationException("Adrian doesn't think you should be calling this...");
  246. }
  247. public String getSignatureMakerName() {
  248. return realMember.getSignatureMakerName();
  249. }
  250. public String getSignatureType() {
  251. return realMember.getSignatureType();
  252. }
  253. public String getSignatureString(World world) {
  254. return realMember.getSignatureString(world);
  255. }
  256. public Iterator getJoinPointSignatures(World world) {
  257. return realMember.getJoinPointSignatures(world);
  258. }
  259. public String toString() {
  260. StringBuffer buf = new StringBuffer();
  261. buf.append(getReturnType().getName());
  262. buf.append(' ');
  263. buf.append(getDeclaringType().getName());
  264. buf.append('.');
  265. buf.append(getName());
  266. if (getKind() != FIELD) {
  267. buf.append("(");
  268. UnresolvedType[] parameterTypes = getParameterTypes();
  269. if (parameterTypes.length != 0) {
  270. buf.append(parameterTypes[0]);
  271. for (int i=1, len = parameterTypes.length; i < len; i++) {
  272. buf.append(", ");
  273. buf.append(parameterTypes[i].getName());
  274. }
  275. }
  276. buf.append(")");
  277. }
  278. return buf.toString();
  279. }
  280. public String toGenericString() {
  281. return realMember.toGenericString();
  282. }
  283. public String toDebugString() {
  284. return realMember.toDebugString();
  285. }
  286. public void resetName(String newName) {
  287. realMember.resetName(newName);
  288. }
  289. public void resetKind(MemberKind newKind) {
  290. realMember.resetKind(newKind);
  291. }
  292. public void resetModifiers(int newModifiers) {
  293. realMember.resetModifiers(newModifiers);
  294. }
  295. public void resetReturnTypeToObjectArray() {
  296. realMember.resetReturnTypeToObjectArray();
  297. }
  298. public boolean equals(Object obj) {
  299. if (! (obj instanceof JoinPointSignature)) return false;
  300. JoinPointSignature other = (JoinPointSignature) obj;
  301. if (!realMember.equals(other.realMember)) return false;
  302. if (!substituteDeclaringType.equals(other.substituteDeclaringType)) return false;
  303. return true;
  304. }
  305. public int hashCode() {
  306. return 17 + (37 * realMember.hashCode()) + (37 * substituteDeclaringType.hashCode());
  307. }
  308. public boolean hasBackingGenericMember() {
  309. return realMember.hasBackingGenericMember();
  310. }
  311. public ResolvedMember getBackingGenericMember() {
  312. return realMember.getBackingGenericMember();
  313. }
  314. public void evictWeavingState() { realMember.evictWeavingState(); }
  315. public ResolvedMember parameterizedWith(Map m, World w) {
  316. return realMember.parameterizedWith(m,w);
  317. }
  318. public String getAnnotationDefaultValue() {
  319. return realMember.getAnnotationDefaultValue();
  320. }
  321. }