Java 类org.objectweb.asm.commons.LocalVariablesSorter 实例源码

项目:allocation-instrumenter    文件:AllocationClassAdapter.java   
/**
 * For each method in the class being instrumented, <code>visitMethod</code>
 * is called and the returned MethodVisitor is used to visit the method.
 * Note that a new MethodVisitor is constructed for each method.
 */
@Override
public MethodVisitor visitMethod(int access, String base, String desc,
    String signature, String[] exceptions) {
  MethodVisitor mv =
    cv.visitMethod(access, base, desc, signature, exceptions);

  if (mv != null) {
    // We need to compute stackmaps (see
    // AllocationInstrumenter#instrument).  This can't really be
    // done for old bytecode that contains JSR and RET instructions.
    // So, we remove JSRs and RETs.
    JSRInlinerAdapter jsria = new JSRInlinerAdapter(
        mv, access, base, desc, signature, exceptions);
    AllocationMethodAdapter aimv =
      new AllocationMethodAdapter(jsria, recorderClass, recorderMethod);
    LocalVariablesSorter lvs = new LocalVariablesSorter(access, desc, aimv);
    aimv.lvs = lvs;
    mv = lvs;
  }
  return mv;
}
项目:rubah    文件:AddTraverseMethod.java   
private void generateTraverseMethod() {
    LocalVariablesSorter mv = new LocalVariablesSorter(
            TRAVERSE_METHOD_ACC_FLAGS,
            TRAVERSE_METHOD_DESC,
            this.visitMethod(
                    this.getTraverseMethodAccess(),
                    this.getTraverseMethodName(),
                    TRAVERSE_METHOD_DESC,
                    null,
                    null));
    mv.visitCode();

    if (isAllowed(this.thisClass.getFqn())) {
        this.generateTraverseMethodPreamble(mv);

        if (!this.fields.isEmpty()) {
            for (Pair<String, String> field : this.fields) {
                this.generateFieldAccess(mv, field);
            }
        }
    }
    mv.visitInsn(RETURN);
    mv.visitMaxs(0, 0);
    mv.visitEnd();
}
项目:allocation-instrumenter    文件:ConstructorInstrumenter.java   
/**
 * For each method in the class being instrumented,
 * <code>visitMethod</code> is called and the returned
 * MethodVisitor is used to visit the method.  Note that a new
 * MethodVisitor is constructed for each method.
 */
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
    String signature, String[] exceptions) {
  MethodVisitor mv =
    cv.visitMethod(access, name, desc, signature, exceptions);

  if ((mv != null) && "<init>".equals(name)){
    ConstructorMethodAdapter aimv = new ConstructorMethodAdapter(mv, cl);
    LocalVariablesSorter lvs = new LocalVariablesSorter(access, desc, aimv);
    aimv.lvs = lvs;
    mv = lvs;
  }
  return mv;
}
项目:java-thread-sanitizer    文件:LocalVarsSaver.java   
private static ArrayList<Integer> newLocalVarsFromTypes(
    ArrayList<Type> types, LocalVariablesSorter lvs) {
  ArrayList<Integer> vars = new ArrayList<Integer>();
  for (Type type : types) {
    vars.add(lvs.newLocal(type));
  }
  return vars;
}
项目:rubah    文件:AddTraverseMethod.java   
protected void generateFieldAccess(LocalVariablesSorter mv, Pair<String, String> field) {
    Type fieldType = Type.getType(field.getValue1());

    if (!isAllowed(fieldType.getClassName())) {
        return;
    }

    this.getFieldOwner(mv);
    mv.visitInsn(DUP);

    mv.visitFieldInsn(
            GETFIELD,
            this.thisClass.getASMType().getInternalName(),
            field.getValue0(),
            field.getValue1());
    mv.visitMethodInsn(
            INVOKESTATIC,
            REGISTER_METHOD_OWNER_NAME,
            REGISTER_METHOD_NAME,
            REGISTER_METHOD_SIMPLE_DESC,
            false);
    if (this.version != null) {
        mv.visitTypeInsn(CHECKCAST, this.version.eraseUpdatableType(this.namespace.getClass(fieldType)).getASMType().getInternalName());
    } else {
        mv.visitTypeInsn(CHECKCAST, fieldType.getInternalName());
    }
    mv.visitFieldInsn(
            PUTFIELD,
            this.thisClass.getASMType().getInternalName(),
            field.getValue0(),
            field.getValue1());
}
项目:4Space-5    文件:LocalVariablesSorterVisitor.java   
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
    return methods == null || methods.contains(new ObfMapping(owner, name, desc)) ? new LocalVariablesSorter(access, desc, mv) : mv;
}
项目:lambda-peg-parser    文件:InliningAdapter.java   
public InliningAdapter(LocalVariablesSorter mv, int access, String desc, Label end) {
    super(Opcodes.ASM5, access, desc, mv);
    this.end = end;
    this.lvs = mv;
}
项目:lambda-peg-parser    文件:InliningAdapter.java   
public InliningAdapter(LocalVariablesSorter mv, int access, String desc, Label end) {
    super(Opcodes.ASM5, access, desc, mv);
    this.end = end;
    this.lvs = mv;
}
项目:java-thread-sanitizer    文件:LocalVarsSaver.java   
public LocalVarsSaver(MethodVisitor mv, LocalVariablesSorter lvs) {
  this.mv = mv;
  this.lvs = lvs;
}
项目:java-thread-sanitizer    文件:MethodTransformer.java   
public void setLocalVarsSorter(LocalVariablesSorter lvs) {
  localVarsSorter = lvs;
}
项目:rubah    文件:ProxyGenerator.java   
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
        String signature, String[] exceptions) {

    if (name.equals(ProcessUpdateClass.METHOD_NAME) || name.equals(ProcessUpdateClass.METHOD_NAME_STATIC))
        return this.cv.visitMethod(access, name, desc, signature, exceptions);

    MethodVisitor ret = new MethodVisitor(ASM5) { };

    if (Modifier.isStatic(access))
        return ret;

    LocalVariablesSorter mv = new LocalVariablesSorter(
            access,
            desc,
            this.cv.visitMethod(METHOD_ACCESS, name, desc, signature, exceptions));

    String ownerName = this.owner.getASMType().getInternalName();

    int newObjectVar = mv.newLocal(OBJECT_TYPE.getASMType());

    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(
            INVOKESTATIC,
            RUBAH_TYPE.getInternalName(),
            "getConverted",
            Type.getMethodDescriptor(OBJECT_TYPE, OBJECT_TYPE),
            false);
    mv.visitTypeInsn(CHECKCAST, ownerName);

    int arg = 1;

    for (Type t : Type.getArgumentTypes(desc)) {
        mv.visitVarInsn(t.getOpcode(ILOAD), arg);
        arg += t.getSize();
    }

    mv.visitMethodInsn(
            INVOKEVIRTUAL,
            ownerName,
            name,
            desc,
            false);
    mv.visitInsn(Type.getReturnType(desc).getOpcode(IRETURN));

    mv.visitMaxs(0, 0);
    mv.visitEnd();

    return ret;
}
项目:byte-buddy    文件:AbstractDynamicTypeBuilderForInliningTest.java   
@Test
@SuppressWarnings("unchecked")
public void testReaderHint() throws Exception {
    AsmVisitorWrapper asmVisitorWrapper = mock(AsmVisitorWrapper.class);
    when(asmVisitorWrapper.wrap(any(TypeDescription.class),
            any(ClassVisitor.class),
            any(Implementation.Context.class),
            any(TypePool.class),
            any(FieldList.class),
            any(MethodList.class),
            anyInt(),
            anyInt())).then(new Answer<ClassVisitor>() {
        @Override
        public ClassVisitor answer(InvocationOnMock invocationOnMock) throws Throwable {
            return new ClassVisitor(Opcodes.ASM6, (ClassVisitor) invocationOnMock.getArguments()[1]) {
                @Override
                public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
                    return new LocalVariablesSorter(access, desc, super.visitMethod(access, name, desc, signature, exceptions));
                }
            };
        }
    });
    when(asmVisitorWrapper.mergeWriter(0)).thenReturn(ClassWriter.COMPUTE_MAXS);
    when(asmVisitorWrapper.mergeReader(0)).thenReturn(ClassReader.EXPAND_FRAMES);
    Class<?> type = create(StackMapFrames.class)
            .visit(asmVisitorWrapper)
            .make()
            .load(ClassLoadingStrategy.BOOTSTRAP_LOADER, ClassLoadingStrategy.Default.WRAPPER)
            .getLoaded();
    assertThat(type.getDeclaredMethod(FOO).invoke(type.getDeclaredConstructor().newInstance()), is((Object) BAR));
    verify(asmVisitorWrapper).mergeWriter(0);
    verify(asmVisitorWrapper).mergeReader(0);
    verify(asmVisitorWrapper).wrap(any(TypeDescription.class),
            any(ClassVisitor.class),
            any(Implementation.Context.class),
            any(TypePool.class),
            any(FieldList.class),
            any(MethodList.class),
            anyInt(),
            anyInt());
    verifyNoMoreInteractions(asmVisitorWrapper);
}