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.4KB

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