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 9.3KB

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