All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.avaje.metric.agent.AddProxyMethodVisitor Maven / Gradle / Ivy

There is a newer version: 4.3.2
Show newest version
package org.avaje.metric.agent;

//import org.avaje.metric.agent.asm.ClassVisitor;
//import org.avaje.metric.agent.asm.Label;
//import org.avaje.metric.agent.asm.MethodVisitor;
//import org.avaje.metric.agent.asm.Opcodes;
//import org.avaje.metric.agent.asm.Type;

public class AddProxyMethodVisitor {//implements Opcodes {

//  private final MethodMeta methodMeta;
//  
//  private final String className;
//  
//  private final String superClass;
//    
//  public AddProxyMethodVisitor(MethodMeta methodMeta, String className, String superClass) {
//    this.methodMeta = methodMeta;
//    this.className = className;
//    this.superClass = superClass;
//  }
//
//  public void startX(ClassVisitor cw, int fieldIndex) {
//    
//    MethodVisitor mv = methodMeta.createMethodVisitor(cw);
//  
//    mv.visitCode();
//    Label l0 = new Label();
//    Label l1 = new Label();
//    mv.visitTryCatchBlock(l0, l1, l1, null);
//    mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J");
//    mv.visitVarInsn(LSTORE, 1);
//    mv.visitLabel(l0);
//    mv.visitLineNumber(1, l0);
//    mv.visitVarInsn(ALOAD, 0);
//    
//    Type[] argumentTypes = Type.getArgumentTypes(methodMeta.getDesc());
//    for (int i = 0; i < argumentTypes.length; i++) {
//      System.out.println("----------------------- "+i+" visitVarInsn "+argumentTypes[i].getOpcode(ILOAD)+" == "+ALOAD);
//
//      mv.visitVarInsn(argumentTypes[i].getOpcode(ILOAD), i+1);
//    }
//    
//    mv.visitMethodInsn(INVOKESPECIAL, superClass, methodMeta.getName(), methodMeta.getDesc());
//    
//    //mv.visitFieldInsn(GETSTATIC, "java/lang/System", "err", "Ljava/io/PrintStream;");
//    //mv.visitLdcInsn("Exiting proxy method "+methodMeta.getName());
//    //mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
//
//    Label l2 = new Label();
//    mv.visitLabel(l2);
//    mv.visitLineNumber(1, l2);
//    mv.visitFieldInsn(GETSTATIC, className, "_$metricP_"+fieldIndex, "Lorg/avaje/metric/TimedMetric;");
//    mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J");
//    mv.visitVarInsn(LLOAD, 1);
//    mv.visitInsn(LSUB);
//    mv.visitIntInsn(SIPUSH, 176);
//    mv.visitMethodInsn(INVOKEINTERFACE, "org/avaje/metric/TimedMetric", "operationEnd", "(JI)V");
//    mv.visitInsn(ARETURN);
//    mv.visitLabel(l1);
//    mv.visitFrame(Opcodes.F_FULL, 2, new Object[]{className, Opcodes.LONG}, 1, new Object[]{"java/lang/Throwable"});
//    //mv.visitFieldInsn(GETSTATIC, "java/lang/System", "err", "Ljava/io/PrintStream;");
//    //mv.visitLdcInsn("Exiting proxy method "+methodMeta.getName());
//    //mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
//    Label l3 = new Label();
//    mv.visitLabel(l3);
//    mv.visitLineNumber(1, l3);
//    mv.visitFieldInsn(GETSTATIC, className, "_$metricP_"+fieldIndex, "Lorg/avaje/metric/TimedMetric;");
//    mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J");
//    mv.visitVarInsn(LLOAD, 1);
//    mv.visitInsn(LSUB);
//    mv.visitIntInsn(SIPUSH, 191);
//    mv.visitMethodInsn(INVOKEINTERFACE, "org/avaje/metric/TimedMetric", "operationEnd", "(JI)V");
//    mv.visitInsn(ATHROW);
//    mv.visitLocalVariable("this", "L"+className+";", null, l0, l1, 0);
//    
//    for (int i = 0; i < argumentTypes.length; i++) {
//      //mv.visitVarInsn(argumentTypes[i].getOpcode(ILOAD), i+1);
//      String descriptor = argumentTypes[i].getDescriptor();
//      //String cn = argumentTypes[i].getClassName().replace('.', '/');
//      System.out.println("----------------------- "+i+" visitLocalVariable "+descriptor);
//      mv.visitLocalVariable("a"+i, descriptor, null, l0, l1, 0);
//    }
//    
//    mv.visitMaxs(0,0);//6, 3);
//    mv.visitEnd();
//  }
//
//  public void start(ClassVisitor cw, int fieldIndex) {
//    
//    MethodVisitor mv = methodMeta.createMethodVisitor(cw);
//    
//    String name = methodMeta.getName();
//    String desc = methodMeta.getDesc();
//    
//    //mv = cw.visitMethod(methodMeta.getAccess(), name, desc, null, null);
////    {
////        av0 = mv.visitAnnotation("Ljavax/ws/rs/Path;", true);
////        av0.visit("value", "/findall");
////        av0.visitEnd();
////    }
//
//    Type returnType = Type.getReturnType(methodMeta.getDesc());
//    boolean returnVoid = (returnType.getSize() == 0);
//    Type[] argumentTypes = Type.getArgumentTypes(methodMeta.getDesc());
//    
//    int timePos = argumentTypes.length + 1;//2
//    int retPos = timePos + 2; //4
//    int throwPos = retPos + 1; //5
//
//    int nLocal = argumentTypes.length + 2;
//    
//    mv.visitCode();
//    Label l0 = new Label();
//    Label l1 = new Label();
//    Label l2 = new Label();
//    mv.visitTryCatchBlock(l0, l1, l2, null);
//    Label l3 = new Label();
//    mv.visitTryCatchBlock(l2, l3, l2, null);
//    Label l4 = new Label();
//    mv.visitLabel(l4);
//    mv.visitLineNumber(83, l4);
//    mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J");
//    mv.visitVarInsn(LSTORE, timePos);
//    mv.visitLabel(l0);
//    mv.visitLineNumber(85, l0);
//    mv.visitVarInsn(ALOAD, 0);
//    
//  //mv.visitVarInsn(ALOAD, 1);
//    
//    for (int i = 0; i < argumentTypes.length; i++) {
//      System.out.println("----------------------- "+i+" visitVarInsn "+argumentTypes[i].getOpcode(ILOAD)+" == "+ALOAD);
//
//      mv.visitVarInsn(argumentTypes[i].getOpcode(ILOAD), i+1);
//    }
//    
//    
//    mv.visitMethodInsn(INVOKESPECIAL, superClass, name, desc);
//    if (!returnVoid) {
//      mv.visitVarInsn(returnType.getOpcode(IRETURN), retPos); //??
//    }
//    
//    mv.visitLabel(l1);
//    mv.visitLineNumber(87, l1);
//    mv.visitFieldInsn(GETSTATIC, className, "_$metricP_"+fieldIndex, "Lorg/avaje/metric/TimedMetric;");
//    mv.visitVarInsn(LLOAD, timePos);//2);
//    mv.visitIntInsn(SIPUSH, 176);
//    mv.visitMethodInsn(INVOKEINTERFACE, "org/avaje/metric/TimedMetric", "operationEnd", "(JI)V");
//    
//    Label l6 = new Label();
//    
//    if (!returnVoid) {
//      //mv.visitVarInsn(ALOAD, retPos); //??
//      mv.visitVarInsn(returnType.getOpcode(ILOAD), retPos); //??
//      //mv.visitInsn(ARETURN);
//      mv.visitInsn(returnType.getOpcode(IRETURN));
//    } else {
//      mv.visitJumpInsn(GOTO, l6);
//    }
//
//    
//    mv.visitLabel(l2);
//    Object[] a0 = new Object[nLocal];
//    a0[0] = className;
//    for (int i = 0; i < argumentTypes.length; i++) {
//      a0[i+1] = argumentTypes[i].getDescriptor();
//    }
//    a0[nLocal-1] = Opcodes.LONG;
//    
//    //new Object[]{"org/test/web/api/CustomerResource", "java/lang/Long", "java/lang/String", Opcodes.LONG}
//    mv.visitFrame(Opcodes.F_FULL, nLocal, a0, 1, new Object[]{"java/lang/Throwable"});
//    mv.visitVarInsn(ASTORE, throwPos);
//    
//    mv.visitLabel(l3);
//    mv.visitFieldInsn(GETSTATIC, className, "_$metricP_"+fieldIndex, "Lorg/avaje/metric/TimedMetric;");
//    
//    mv.visitVarInsn(LLOAD, timePos);
//    mv.visitIntInsn(SIPUSH, 176);// not 176
//    mv.visitMethodInsn(INVOKEINTERFACE, "org/avaje/metric/TimedMetric", "operationEnd", "(JI)V");
//    mv.visitVarInsn(ALOAD, throwPos);
//    mv.visitInsn(ATHROW);
//
//    Label l5 = new Label();
//    mv.visitLabel(l5);
//
//    if (returnVoid) {
//      mv.visitLabel(l6);
//      //mv.visitLineNumber(93, l6);
//      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
//      mv.visitInsn(RETURN);
//    }
//    
//    mv.visitLocalVariable("this", "L"+className+";", null, l4, l5, 0);
//    
//    //mv.visitLocalVariable("orderBy", "Ljava/lang/String;", null, l4, l5, 1);
//    for (int i = 0; i < argumentTypes.length; i++) { 
//      String descriptor = argumentTypes[i].getDescriptor();
//      //System.out.println("----------------------- "+i+" visitLocalVariable "+descriptor);
//      mv.visitLocalVariable("a"+i, descriptor, null, l0, l1, i+1);
//    }
//    
//    mv.visitLocalVariable("start", "J", null, l0, l5, timePos);
//    mv.visitMaxs(4, 6);
//    mv.visitEnd();
//
//  }
  
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy