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.

BcelWeavingSupport.java 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* *******************************************************************
  2. * Copyright (c) 2008 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://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Andy Clement initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.weaver.bcel;
  13. import org.aspectj.weaver.Advice;
  14. import org.aspectj.weaver.AjAttribute;
  15. import org.aspectj.weaver.ConcreteTypeMunger;
  16. import org.aspectj.weaver.IWeavingSupport;
  17. import org.aspectj.weaver.Member;
  18. import org.aspectj.weaver.ResolvedMember;
  19. import org.aspectj.weaver.ResolvedType;
  20. import org.aspectj.weaver.ResolvedTypeMunger;
  21. import org.aspectj.weaver.ast.Var;
  22. import org.aspectj.weaver.patterns.PerClause;
  23. import org.aspectj.weaver.patterns.Pointcut;
  24. /**
  25. * Bcel implementation of the weaving support required in a BcelWorld which will actually modify bytecode.
  26. *
  27. * @author Andy Clement
  28. */
  29. public class BcelWeavingSupport implements IWeavingSupport {
  30. public Advice createAdviceMunger(AjAttribute.AdviceAttribute attribute, Pointcut pointcut, Member signature,
  31. ResolvedType concreteAspect) {
  32. // System.err.println("concrete advice: " + signature + " context " +
  33. // sourceContext);
  34. return new BcelAdvice(attribute, pointcut, signature, concreteAspect);
  35. }
  36. public ConcreteTypeMunger makeCflowStackFieldAdder(ResolvedMember cflowField) {
  37. return new BcelCflowStackFieldAdder(cflowField);
  38. }
  39. public ConcreteTypeMunger makeCflowCounterFieldAdder(ResolvedMember cflowField) {
  40. return new BcelCflowCounterFieldAdder(cflowField);
  41. }
  42. /**
  43. * Register a munger for perclause @AJ aspect so that we add aspectOf(..) to them as needed
  44. *
  45. * @param aspect
  46. * @param kind
  47. * @return munger
  48. */
  49. public ConcreteTypeMunger makePerClauseAspect(ResolvedType aspect, PerClause.Kind kind) {
  50. return new BcelPerClauseAspectAdder(aspect, kind);
  51. }
  52. public Var makeCflowAccessVar(ResolvedType formalType, Member cflowField, int arrayIndex) {
  53. return new BcelCflowAccessVar(formalType, cflowField, arrayIndex);
  54. }
  55. public ConcreteTypeMunger concreteTypeMunger(ResolvedTypeMunger munger, ResolvedType aspectType) {
  56. return new BcelTypeMunger(munger, aspectType);
  57. }
  58. public ConcreteTypeMunger createAccessForInlineMunger(ResolvedType aspect) {
  59. return new BcelAccessForInlineMunger(aspect);
  60. }
  61. }