View Javadoc

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;
9   
10  import org.objectweb.asm.Label;
11  
12  import java.util.List;
13  import java.util.Set;
14  
15  /***
16   * Interface for the different transformation context implementations. FIXME crap: abstract method on an interface.
17   * Refactor some in between if we are sure to keep the delegation model
18   *
19   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
20   */
21  public interface Context {
22  
23      public String getClassName();
24  
25      /***
26       * Sets the current bytecode.
27       *
28       * @param bytecode
29       */
30      public abstract void setCurrentBytecode(final byte[] bytecode);
31  
32      /***
33       * Returns the initial bytecode.
34       *
35       * @return bytecode
36       */
37      public abstract byte[] getInitialBytecode();
38  
39      /***
40       * Returns the current bytecode.
41       *
42       * @return bytecode
43       */
44      public abstract byte[] getCurrentBytecode();
45  
46      /***
47       * Returns the class loader.
48       *
49       * @return the class loader
50       */
51      public abstract ClassLoader getLoader();
52  
53      /***
54       * The definitions context (with hierarchical structure)
55       *
56       * @return
57       */
58      public abstract Set getDefinitions();
59  
60      /***
61       * Marks the class being transformed as advised. The marker can at most be set once per class per transformer
62       */
63      public abstract void markAsAdvised();
64  
65      /***
66       * Resets the isAdviced flag.
67       */
68      public abstract void resetAdvised();
69  
70      /***
71       * Checks if the class being transformed has been advised.
72       * This should only be used after ALL actual transformations.
73       *
74       * @return boolean
75       */
76      public abstract boolean isAdvised();
77  
78      /***
79       * Marks the context as read-only.
80       */
81      public abstract void markAsReadOnly();
82  
83      /***
84       * Checks if the context is read-only.
85       *
86       * @return boolean
87       */
88      public abstract boolean isReadOnly();
89  
90      /***
91       * Returns meta-data for the transformation.
92       *
93       * @param key the key
94       * @return the value
95       */
96      public abstract Object getMetaData(final Object key);
97  
98      /***
99       * Adds new meta-data for the transformation.
100      *
101      * @param key   the key
102      * @param value the value
103      */
104     public abstract void addMetaData(final Object key, final Object value);
105 
106     /***
107      * Dump the class to specific directory.
108      *
109      * @param dir
110      */
111     public abstract void dump(String dir);
112 
113     /***
114      * Tries to resolve the line number from the given label
115      *
116      * @param label
117      * @return
118      */
119     abstract int resolveLineNumberInfo(Label label);
120 
121 }