org.objectweb.asm.tree.ClassNode.accept()方法的使用及代码示例

x33g5p2x  于2022-01-18 转载在 其他  
字(7.5k)|赞(0)|评价(0)|浏览(160)

本文整理了Java中org.objectweb.asm.tree.ClassNode.accept()方法的一些代码示例,展示了ClassNode.accept()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ClassNode.accept()方法的具体详情如下:
包路径:org.objectweb.asm.tree.ClassNode
类名称:ClassNode
方法名:accept

ClassNode.accept介绍

[英]Makes the given class visitor visit this class.
[中]使给定的类访问者访问此类。

代码示例

代码示例来源:origin: pxb1988/dex2jar

private byte[] toByteArray(ClassNode cn) {
  ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  cn.accept(cw);
  return cw.toByteArray();
}

代码示例来源:origin: pxb1988/dex2jar

public void accept(ClassVisitor cv) throws RecognitionException{
  sFile();
  cn.accept(cv);
}
public ClassNode parse() throws RecognitionException {

代码示例来源:origin: robolectric/robolectric

byte[] instrumentToBytes(MutableClass mutableClass) {
 instrument(mutableClass);
 ClassNode classNode = mutableClass.classNode;
 ClassWriter writer = new InstrumentingClassWriter(mutableClass.classNodeProvider, classNode);
 Remapper remapper =
   new Remapper() {
    @Override
    public String map(final String internalName) {
     return mutableClass.config.mappedTypeName(internalName);
    }
   };
 ClassRemapper visitor = new ClassRemapper(writer, remapper);
 classNode.accept(visitor);
 return writer.toByteArray();
}

代码示例来源:origin: pxb1988/dex2jar

private void assemble1(Path file, Path output) throws IOException {
    try (BufferedReader bufferedReader = Files.newBufferedReader(file, Charset.forName(encoding))) {
      ANTLRStringStream is = new ANTLRReaderStream(bufferedReader);
      is.name = file.toString();
      JasminLexer lexer = new JasminLexer(is);
      CommonTokenStream ts = new CommonTokenStream(lexer);
      JasminParser parser = new JasminParser(ts);
      parser.rebuildLine = autogenLines;
      ClassWriter cw = new ClassWriter(noComputeMax?0:ClassWriter.COMPUTE_MAXS);
      ClassNode cn = parser.parse();
      if (cn.version == 0) {
        cn.version = versions[classVersion];
      }
      if (dump) {
        new JasminDumper(new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8), true)).dump(cn);
      }
      cn.accept(cw);
      Path clzFile = output.resolve(cn.name.replace('.', '/') + ".class");
      createParentDirectories(clzFile);
      Files.write(clzFile, cw.toByteArray());
    } catch (RecognitionException e) {
      System.err.println("Fail to assemble " + file);
      e.printStackTrace();
    }
  }
}

代码示例来源:origin: pxb1988/dex2jar

public static String toStd(ClassNode expected) throws IOException {
  expected.access &= ~Opcodes.ACC_SUPER;
  ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  expected.accept(LdcOptimizeAdapter.wrap(cw));
  ClassReader cr = new ClassReader(cw.toByteArray());
  ClassNode n = new ClassNode(Opcodes.ASM4);
  cr.accept(n, ClassReader.EXPAND_FRAMES | ClassReader.SKIP_FRAMES);
  StringWriter stringWriter = new StringWriter();
  new JasminDumper(new PrintWriter(stringWriter, true)).dump(n);
  return stringWriter.toString();
}

代码示例来源:origin: pxb1988/dex2jar

private void test0(InvocationWeaver iw, String prefix) throws IOException, RecognitionException {
  ClassNode before = Jasmins
      .parse(prefix + "-before.j", getClass().getResourceAsStream("/weave/" + prefix + "-before.j"));
  ClassNode expectedAfter = Jasmins
      .parse(prefix + "-after.j", getClass().getResourceAsStream("/weave/" + prefix + "-after.j"));
  ClassNode expectedGen = Jasmins
      .parse(prefix + "-gen.j", getClass().getResourceAsStream("/weave/" + prefix + "-gen.j"));
  ClassNode after = new ClassNode();
  before.accept(iw.wrapper(after));
  assertEqual(expectedAfter, after);
  ClassNode gen = new ClassNode();
  iw.buildInvocationClz(LdcOptimizeAdapter.wrap(gen));
  assertEqual(expectedGen, gen);
}

代码示例来源:origin: hcoles/pitest

@Override
public String toString() {
 final StringWriter writer = new StringWriter();
 this.rawNode.accept(new TraceClassVisitor(null, new Textifier(), new PrintWriter(
   writer)));
 return writer.toString();
}

代码示例来源:origin: lenskit/lenskit

public Class<?> defineClass(ClassNode def) {
    ClassWriter cw = new ClassWriter(0);
    def.accept(cw);
    byte[] bytes = cw.toByteArray();
    if (DEBUG_DIR != null) {
      logger.debug("writing class {}", def.name);
      try {
        Path fn = DEBUG_DIR.resolve(def.name + ".class");
        Files.createDirectories(fn.getParent());
        Files.write(fn, bytes);
      } catch (IOException e) {
        logger.error("error writing class file " + def.name, e);
      }
    }
    String name = def.name.replace('/', '.');
    logger.debug("defining class {} (internal name {})", name, def.name);
    try {
      Class<?> cls = defineClass(name, bytes, 0, bytes.length);
      logger.debug("defined class {}", cls);
      return cls;
    } catch (ClassFormatError e) {
      throw new IllegalArgumentException("Format error in class " + name, e);
    }
  }
}

代码示例来源:origin: AppliedEnergistics/Applied-Energistics-2

remapper.inputOutput.put( "appeng/api/parts/LayerBase", n.superName );
remapper.inputOutput.put( originalName, n.name );
n.accept( new RemappingClassAdapter( cw, remapper ) );

代码示例来源:origin: jphp-group/jphp

node.accept(cw);

代码示例来源:origin: tterrag1098/BON2

public static byte[] writeClassToBytes(ClassNode classNode) {
  ClassWriter classWriter = new ClassWriter(0);
  classNode.accept(classWriter);
  return classWriter.toByteArray();
}

代码示例来源:origin: org.multiverse/multiverse-instrumentation

public static byte[] toBytecode(ClassNode classNode) {
  if (classNode == null) {
    throw new NullPointerException();
  }
  ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
  classNode.accept(cw);
  return cw.toByteArray();
}

代码示例来源:origin: usethesource/rascal

void serialize(IConstructor c,OutputStream output) throws IOException {
  ClassNode cn = buildClass(c);
  ClassWriter cw = new ClassWriter(COMPUTE_FRAMES);
  cn.accept(cw);
  output.write(cw.toByteArray());
  output.close();
}

代码示例来源:origin: copper-engine/copper-engine

private static void traceClassNode(String message, ClassNode cn) {
  if (logger.isTraceEnabled()) {
    ClassWriter cw = new ClassWriter(0);
    cn.accept(cw);
    traceBytes(message, cw.toByteArray());
  }
}

代码示例来源:origin: CoffeePartner/capt

public static ClassNode clone(ClassNode node) {
  ClassNode cloned = new ClassNode();
  node.accept(cloned);
  return cloned;
}

代码示例来源:origin: dragome/dragome-sdk

public static byte[] transform(byte[] bytecode)
{
  ClassNode classNode= new ClassNode(Opcodes.ASM5);
  InvokeDynamicConverter invokeDynamicConverter= new InvokeDynamicConverter(classNode);
  new ClassReader(bytecode).accept(invokeDynamicConverter, 0);
  ClassWriter cw= new ClassWriter(ClassWriter.COMPUTE_MAXS);
  classNode.accept(cw);
  return cw.toByteArray();
}

代码示例来源:origin: ru.yandex.qatools.allure/allure-java-inject

public byte[] inject(ClassReader cr) {
  ClassNode cn = new ClassNode(ASM4);
  cr.accept(cn, 0);
  if (shouldInject(cn)) {
    inject(cn);
  }
  ClassWriter classWriter = new ClassWriter(ASM4);
  cn.accept(classWriter);
  return classWriter.toByteArray();
}

代码示例来源:origin: MinecraftForge/ForgeGradle

public byte[] processClass(byte[] cIn, byte[] sIn)
{
  ClassNode cClassNode = getClassNode(cIn);
  ClassNode sClassNode = getClassNode(sIn);
  processFields(cClassNode, sClassNode);
  processMethods(cClassNode, sClassNode);
  processInners(cClassNode, sClassNode);
  ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  cClassNode.accept(writer);
  return writer.toByteArray();
}

代码示例来源:origin: com.github.bingoohuang/blackcat-instrument

public Tuple<Boolean, byte[]> modifyClass() {
  val ok = interceptor.interceptClass(classNode, className);
  if (!ok) return new Tuple(false, classFileBuffer);
  int count = modifyMethodCount(classNode.methods);
  if (count == 0) return new Tuple(false, classFileBuffer);
  val cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
  classNode.accept(cw);
  val bytes = cw.toByteArray();
  Debugs.writeClassFile(classNode, className, bytes);
  return new Tuple(true, bytes);
}

代码示例来源:origin: org.robolectric/robolectric-sandbox

private byte[] getInstrumentedBytes(ClassNode classNode, boolean containsStubs) throws ClassNotFoundException {
 if (InvokeDynamic.ENABLED) {
  new InvokeDynamicClassInstrumentor(classNode, containsStubs).instrument();
 } else {
  new OldClassInstrumentor(classNode, containsStubs).instrument();
 }
 ClassWriter writer = new InstrumentingClassWriter(classNode);
 classNode.accept(writer);
 return writer.toByteArray();
}

相关文章