KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > aspectwerkz > transform > inlining > weaver > AlreadyAddedMethodVisitor


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.CodeVisitor;
11 import org.objectweb.asm.Attribute;
12 import org.codehaus.aspectwerkz.transform.TransformationConstants;
13 import org.codehaus.aspectwerkz.annotation.instrumentation.asm.AsmAnnotationHelper;
14
15 import java.util.Set JavaDoc;
16
17 /**
18  * A read only visitor to gather wrapper methods and proxy methods
19  * Makes use of the NullVisitors
20  *
21  * @author <a HREF="mailto:alex@gnilux.com">Alexandre Vasseur</a>
22  */

23 public class AlreadyAddedMethodVisitor extends AsmAnnotationHelper.NullClassAdapter implements TransformationConstants {
24
25     /**
26      * Set of "<methodName><methodDesc>" strings populated with wrapper methods, prefixed originals
27      * and ctor body wrappers to allow multiweaving support.
28      */

29     private final Set JavaDoc m_addedMethods;
30
31     /**
32      * Creates a new class adapter.
33      *
34      * @param wrappers
35      */

36     public AlreadyAddedMethodVisitor(final Set JavaDoc wrappers) {
37         m_addedMethods = wrappers;
38     }
39
40     /**
41      * Visits the methods.
42      *
43      * @param access
44      * @param name
45      * @param desc
46      * @param exceptions
47      * @param attrs
48      * @return
49      */

50     public CodeVisitor visitMethod(final int access,
51                                    final String JavaDoc name,
52                                    final String JavaDoc desc,
53                                    final String JavaDoc[] exceptions,
54                                    final Attribute attrs) {
55         if (name.startsWith(WRAPPER_METHOD_PREFIX) ||
56             name.startsWith(ORIGINAL_METHOD_PREFIX)) {
57             //FIXME do it for ctor exe wrapper
58
m_addedMethods.add(getMethodKey(name, desc));
59         }
60         return super.visitMethod(access, name, desc, exceptions, attrs);
61     }
62
63     /**
64      * Returns the key of the method.
65      *
66      * @param name
67      * @param desc
68      * @return
69      */

70     static String JavaDoc getMethodKey(final String JavaDoc name, final String JavaDoc desc) {
71         StringBuffer JavaDoc sb = new StringBuffer JavaDoc(name);
72         return sb.append(desc).toString();
73     }
74 }
75
Popular Tags