1 /***************************************************************************************
2 * Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package org.codehaus.aspectwerkz.transform.inlining.weaver;
9
10 import org.objectweb.asm.Constants;
11 import org.objectweb.asm.CodeVisitor;
12 import org.objectweb.asm.Attribute;
13 import org.codehaus.aspectwerkz.transform.TransformationConstants;
14 import org.codehaus.aspectwerkz.annotation.instrumentation.asm.AsmAnnotationHelper;
15
16 import java.util.Set;
17
18 /***
19 * A read only visitor to gather wrapper methods and proxy methods
20 * Makes use of the NullVisitors
21 *
22 * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a>
23 */
24 public class AlreadyAddedMethodAdapter extends AsmAnnotationHelper.NullClassAdapter implements Constants, TransformationConstants {
25
26 /***
27 * Set of "<methodName><methodDesc>" strings populated with wrapper methods, prefixed originals
28 * and ctor body wrappers to allow multiweaving support.
29 */
30 private final Set m_addedMethods;
31
32 /***
33 * Creates a new class adapter.
34 *
35 * @param wrappers
36 */
37 public AlreadyAddedMethodAdapter(final Set wrappers) {
38 m_addedMethods = wrappers;
39 }
40
41 /***
42 * Visits the methods.
43 *
44 * @param access
45 * @param name
46 * @param desc
47 * @param exceptions
48 * @param attrs
49 * @return
50 */
51 public CodeVisitor visitMethod(final int access,
52 final String name,
53 final String desc,
54 final String[] exceptions,
55 final Attribute attrs) {
56 if (name.startsWith(WRAPPER_METHOD_PREFIX)
57 || name.startsWith(ORIGINAL_METHOD_PREFIX)) {
58 m_addedMethods.add(getMethodKey(name, desc));
59 }
60 return super.visitMethod(access, name, desc, exceptions, attrs);
61 }
62
63 static String getMethodKey(String name, String desc) {
64 StringBuffer sb = new StringBuffer(name);
65 return sb.append(desc).toString();
66 }
67 }