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 }