/**************************************************************************************
* Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package org.codehaus.aspectwerkz.transform.inlining;
import org.objectweb.asm.*;
/**
* Visitors that are not writing any bytecode and using a Null ClassVisitor / Code Visitor as a target instead.
*
* @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a>
*/
public class AsmNullAdapter {
/**
* A NullClassAdapter that does nothing.
* Can be used to speed up ASM and avoid unecessary bytecode writing thru a regular ClassWriter when this is not
* needed (read only purpose).
*/
public static class NullClassAdapter implements ClassVisitor {
public final static ClassVisitor NULL_CLASS_ADAPTER = new NullClassAdapter();
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
}
public void visitInnerClass(String name, String outerName, String innerName, int access) {
}
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
return NullFieldAdapter.NULL_FIELD_ADAPTER;
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
return NullMethodAdapter.NULL_METHOD_ADAPTER;
}
public void visitSource(String source, String debug) {
}
public void visitOuterClass(String owner, String name, String desc) {
}
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
return NullAnnotationVisitor.NULL_ANNOTATION_ADAPTER;
}
public void visitAttribute(Attribute attribute) {
}
public void visitEnd() {
}
}
/**
* A NullMethodAdapter that does nothing.
* Can be used to speed up ASM and avoid unecessary bytecode writing thru a regular CodeWriter when this is not
* needed (read only purpose)
*/
public static class NullMethodAdapter implements MethodVisitor {
public final static MethodVisitor NULL_METHOD_ADAPTER = new NullMethodAdapter();
public void visitInsn(int opcode) {
}
public void visitIntInsn(int opcode, int operand) {
}
public void visitVarInsn(int opcode, int var) {
}
public void visitTypeInsn(int opcode, String desc) {
}
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
}
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
}
public void visitJumpInsn(int opcode, Label label) {
}
public void visitLabel(Label label) {
}
public void visitLdcInsn(Object cst) {
}
public void visitIincInsn(int var, int increment) {
}
public void visitTableSwitchInsn(int min, int max, Label dflt, Label labels[]) {
}
public void visitLookupSwitchInsn(Label dflt, int keys[], Label labels[]) {
}
public void visitMultiANewArrayInsn(String desc, int dims) {
}
public void visitTryCatchBlock(Label start, Label end, Label handler, String type) {
}
public void visitMaxs(int maxStack, int maxLocals) {
}
public void visitLocalVariable(String name, String desc, String sig, Label start, Label end, int index) {
}
public void visitLineNumber(int line, Label start) {
}
public void visitAttribute(Attribute attr) {
}
public AnnotationVisitor visitAnnotationDefault() {
return NullAnnotationVisitor.NULL_ANNOTATION_ADAPTER;
}
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
return NullAnnotationVisitor.NULL_ANNOTATION_ADAPTER;
}
public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) {
return NullAnnotationVisitor.NULL_ANNOTATION_ADAPTER;
}
public void visitCode() {
}
public void visitEnd() {
}
}
/**
* A NullFieldAdapter
*/
public static class NullFieldAdapter implements FieldVisitor {
public final static FieldVisitor NULL_FIELD_ADAPTER = new NullFieldAdapter();
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
return NullAnnotationVisitor.NULL_ANNOTATION_ADAPTER;
}
public void visitAttribute(Attribute attr) {
}
public void visitEnd() {
}
}
/**
* A NullAnnotationVisitor
*/
public static class NullAnnotationVisitor implements AnnotationVisitor {
public final static AnnotationVisitor NULL_ANNOTATION_ADAPTER = new NullAnnotationVisitor();
public void visit(String name, Object value) {
}
public void visitEnum(String name, String desc, String value) {
}
public AnnotationVisitor visitAnnotation(String name, String desc) {
return NULL_ANNOTATION_ADAPTER;
}
public AnnotationVisitor visitArray(String name) {
return NULL_ANNOTATION_ADAPTER;
}
public void visitEnd() {
}
}
}