--- /dev/null
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.util.List;
+
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+
+/**
+ *
+ *
+ * @author tamada
+ * @version $Revision$
+ */
+public interface BirthmarkElementBuilder {
+ public BirthmarkElement[] buildBirthmarkElements(List<Opcode> opcodes, BirthmarkContext context);
+}
+
-package jp.sourceforge.stigmata.birthmarks.wsp;
+package jp.sourceforge.stigmata.birthmarks;
/*
* $Id$
-package jp.sourceforge.stigmata.birthmarks.wsp;
+package jp.sourceforge.stigmata.birthmarks;
/*
* $Id$
--- /dev/null
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.util.List;
+
+/**
+ *
+ * @author Haruaki Tamada
+ * @version $Revision$
+ */
+public interface OpcodeExtractListener{
+ public void extractOpcodesFinished(List<Opcode> opcodes);
+}
-package jp.sourceforge.stigmata.birthmarks.wsp;
+package jp.sourceforge.stigmata.birthmarks;
/*
* $Id$
* @author Haruaki TAMADA
* @version $Revision$
*/
-public class OpcodeExtractionMethodVisitor extends MethodAdapter{
+public class OpcodeExtractMethodVisitor extends MethodAdapter{
private List<Opcode> opcodes;
private OpcodeManager manager = OpcodeManager.getInstance();
- private List<OpcodeExtractionFinishListener> listeners = new ArrayList<OpcodeExtractionFinishListener>();
+ private List<OpcodeExtractListener> listeners = new ArrayList<OpcodeExtractListener>();
- public OpcodeExtractionMethodVisitor(MethodVisitor visitor){
+ public OpcodeExtractMethodVisitor(MethodVisitor visitor){
this(visitor, new ArrayList<Opcode>());
}
- public OpcodeExtractionMethodVisitor(MethodVisitor visitor, List<Opcode> opcodes){
+ public OpcodeExtractMethodVisitor(MethodVisitor visitor, List<Opcode> opcodes){
super(visitor);
this.opcodes = opcodes;
}
- public void addOpcodeExtractionFinishListener(OpcodeExtractionFinishListener listener){
+ public void addOpcodeExtractListener(OpcodeExtractionFinishListener listener){
listeners.add(listener);
}
- public void removeOpcodeExtractionFinishListener(OpcodeExtractionFinishListener listener){
+ public void removeOpcodeExtractListener(OpcodeExtractionFinishListener listener){
listeners.add(listener);
}
@Override
public void visitEnd(){
for(OpcodeExtractionFinishListener listener: listeners){
- listener.finishExtractionOpcodes(opcodes);
+ listener.extractionOpcodesFinished(opcodes);
}
}
}
--- /dev/null
+package jp.sourceforge.stigmata.birthmarks;
+
+/*
+ * $Id$
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sourceforge.stigmata.Birthmark;
+import jp.sourceforge.stigmata.BirthmarkContext;
+import jp.sourceforge.stigmata.BirthmarkElement;
+import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
+
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.MethodVisitor;
+
+/**
+ *
+ *
+ * @author tamada
+ * @version $Revision$
+ */
+public class OpcodeExtractVisitor extends BirthmarkExtractVisitor{
+ private List<Opcode> opcodeList = new ArrayList<Opcode>();
+ private BirthmarkElementBuilder builder;
+
+ public OpcodeExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context, BirthmarkElementBuilder builder){
+ super(visitor, birthmark, context);
+ this.builder = builder;
+ }
+
+ public void visitEnd(){
+ BirthmarkElement[] elements = builder.buildBirthmarkElements(opcodeList, getContext());
+ for(BirthmarkElement element: elements){
+ addElement(element);
+ }
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int arg0, String arg1, String arg2, String arg3, String[] arg4){
+ MethodVisitor visitor = super.visitMethod(arg0, arg1, arg2, arg3, arg4);
+ OpcodeExtractMethodVisitor opcodeVisitor = new OpcodeExtractMethodVisitor(visitor, opcodeList);
+
+ return opcodeVisitor;
+ }
+}
-package jp.sourceforge.stigmata.birthmarks.wsp;
+package jp.sourceforge.stigmata.birthmarks;
/*
* $Id$
+++ /dev/null
-package jp.sourceforge.stigmata.birthmarks.wsp;
-
-/*
- * $Id$
- */
-
-import java.util.List;
-
-/**
- *
- * @author Haruaki Tamada
- * @version $Revision$
- */
-public interface OpcodeExtractionFinishListener{
- public void finishExtractionOpcodes(List<Opcode> opcodes);
-}