Ejemplo n.º 1
0
  private ClassType defineClasses(
      Collection<OutputFileObject> classes,
      EvaluationContext context,
      DebugProcess process,
      ClassLoaderReference classLoader)
      throws EvaluateException, InvalidTypeException, ClassNotLoadedException {

    VirtualMachineProxyImpl proxy = (VirtualMachineProxyImpl) process.getVirtualMachineProxy();
    for (OutputFileObject cls : classes) {
      if (cls.getName().contains(GEN_CLASS_NAME)) {
        Method defineMethod =
            ((ClassType) classLoader.referenceType())
                .concreteMethodByName("defineClass", "(Ljava/lang/String;[BII)Ljava/lang/Class;");
        byte[] bytes = changeSuperToMagicAccessor(cls.toByteArray());
        ArrayList<Value> args = new ArrayList<Value>();
        StringReference name = proxy.mirrorOf(cls.myOrigName);
        keep(name, context);
        args.add(name);
        args.add(mirrorOf(bytes, context, process));
        args.add(proxy.mirrorOf(0));
        args.add(proxy.mirrorOf(bytes.length));
        process.invokeMethod(context, classLoader, defineMethod, args);
      }
    }
    return (ClassType) process.findClass(context, getGenClassQName(), classLoader);
  }
Ejemplo n.º 2
0
  public static void defineClass(
      @NotNull String className,
      byte[] bytecodes,
      @NotNull EvaluationContext context,
      @NotNull DebugProcess process,
      @NotNull ClassLoaderReference classLoader)
      throws ClassNotLoadedException, EvaluateException, InvalidTypeException {
    VirtualMachineProxyImpl proxy = (VirtualMachineProxyImpl) process.getVirtualMachineProxy();

    Method defineMethod =
        ((ClassType) classLoader.referenceType())
            .concreteMethodByName("defineClass", "(Ljava/lang/String;[BII)Ljava/lang/Class;");
    byte[] bytes = changeSuperToMagicAccessor(bytecodes);
    ArrayList<Value> args = new ArrayList<Value>();
    StringReference name = proxy.mirrorOf(className);
    keep(name, context);
    args.add(name);
    args.add(mirrorOf(bytes, context, process));
    args.add(proxy.mirrorOf(0));
    args.add(proxy.mirrorOf(bytes.length));
    process.invokeMethod(context, classLoader, defineMethod, args);
  }