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