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

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

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

ClassNode.<init>介绍

[英]Constructs a new ClassNode. Subclasses must not use this constructor. Instead, they must use the #ClassNode(int) version.
[中]构造一个新的类节点。子类不能使用此构造函数。相反,它们必须使用#ClassNode(int)版本。

代码示例

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

private void reset0() {
  cn = new ClassNode(ASM4);
  fn = null;
  mn = null;
}

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

private ClassNode readClassNode(byte[] data) {
  ClassReader cr = new ClassReader(data);
  ClassNode cn = new ClassNode();
  cr.accept(cn, ClassReader.EXPAND_FRAMES | ClassReader.SKIP_FRAMES);
  return cn;
}

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

private ClassNode createClassNode(String internalClassName) throws ClassNotFoundException {
 byte[] byteCode = getClassBytes(internalClassName);
 ClassReader classReader = new ClassReader(byteCode);
 ClassNode classNode = new ClassNode();
 classReader.accept(classNode,
   ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
 return classNode;
}

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

private ClassNode loadClassNode(String name) {
 String classFileName = name.replace('.', '/') + ".class";
 ZipEntry entry = jarFile.getEntry(classFileName);
 if (entry == null) {
  return null;
 }
 try (InputStream inputStream = jarFile.getInputStream(entry)) {
  ClassReader classReader = new ClassReader(inputStream);
  ClassNode classNode = new ClassNode();
  classReader.accept(classNode,
    ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
  return classNode;
 } catch (IOException e) {
  throw new RuntimeException("failed to analyze " + classFileName + " in " + path, e);
 }
}

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

private void disassemble1(Path file, Path output) throws IOException {
    ClassReader r = new ClassReader(Files.readAllBytes(file));
    Path jFile = output.resolve(r.getClassName().replace('.', '/') + ".j");
    createParentDirectories(jFile);
    try (BufferedWriter out = Files.newBufferedWriter(jFile, Charset.forName(encoding))) {
      PrintWriter pw = new PrintWriter(out);
      ClassNode node = new ClassNode();
      r.accept(node, (debugInfo ? 0 : ClassReader.SKIP_DEBUG) | ClassReader.EXPAND_FRAMES | ClassReader.SKIP_FRAMES);
      new JasminDumper(pw).dump(node);
      pw.flush();
    }
  }
}

代码示例来源:origin: spring-projects/spring-loaded

protected ClassNode getClassNode(byte[] classdata) {
  ClassNode cn = new ClassNode();
  ClassReader cr = new ClassReader(classdata);
  cr.accept(cn, 0);
  return cn;
}

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

@Override
  public void visitFile(Path file, String relative) throws IOException {
    if (file.getFileName().toString().endsWith(".class")) {
      ClassReader cr = new ClassReader(Files.readAllBytes(file));
      ClassNode cn = new ClassNode();
      cr.accept(new CheckClassAdapter(cn, false),
          ClassReader.SKIP_DEBUG | ClassReader.EXPAND_FRAMES | ClassReader.SKIP_FRAMES);
      for (MethodNode method : cn.methods) {
        BasicVerifier verifier = new BasicVerifier();
        Analyzer<BasicValue> a = new Analyzer<>(verifier);
        try {
          a.analyze(cn.name, method);
        } catch (Exception ex) {
          System.err.println("Error verify method " + cr.getClassName() + "." + method.name + " "
              + method.desc);
          if (detail) {
            ex.printStackTrace(System.err);
            printAnalyzerResult(method, a, new PrintWriter(new OutputStreamWriter(System.err, StandardCharsets.UTF_8)));
          }
        }
      }
    }
  }
});

代码示例来源:origin: Meituan-Dianping/Robust

public byte[] transformCode(byte[] b1, String className) throws IOException {
  ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  ClassReader cr = new ClassReader(b1);
  ClassNode classNode = new ClassNode();
  Map<String, Boolean> methodInstructionTypeMap = new HashMap<>();
  cr.accept(classNode, 0);
  final List<MethodNode> methods = classNode.methods;
  for (MethodNode m : methods) {
    InsnList inList = m.instructions;
    boolean isMethodInvoke = false;
    for (int i = 0; i < inList.size(); i++) {
      if (inList.get(i).getType() == AbstractInsnNode.METHOD_INSN) {
        isMethodInvoke = true;
      }
    }
    methodInstructionTypeMap.put(m.name + m.desc, isMethodInvoke);
  }
  InsertMethodBodyAdapter insertMethodBodyAdapter = new InsertMethodBodyAdapter(cw, className, methodInstructionTypeMap);
  cr.accept(insertMethodBodyAdapter, ClassReader.EXPAND_FRAMES);
  return cw.toByteArray();
}

代码示例来源:origin: konsoletyper/teavm

@Override
  public ClassHolder map(String name) {
    ClassNode clsNode = new ClassNode();
    String resourceName = name.replace('.', '/') + ".class";
    if (!resourceReader.hasResource(resourceName)) {
      return null;
    }
    try (InputStream input = resourceReader.openResource(resourceName)) {
      ClassReader reader = new ClassReader(input);
      reader.accept(clsNode, 0);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return parser.parseClass(clsNode);
  }
}

代码示例来源:origin: spring-projects/spring-loaded

@SuppressWarnings("unchecked")
private MethodNode getMethod(byte[] classbytes, String methodName) {
  ClassReader super_cr = new ClassReader(classbytes);
  ClassNode cn = new ClassNode();
  super_cr.accept(cn, 0);
  List<MethodNode> methods = cn.methods;
  if (methods != null) {
    for (MethodNode mn : methods) {
      if (mn.name.equals(methodName)) {
        return mn;
      }
    }
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-loaded

@SuppressWarnings("unchecked")
private FieldNode getField(byte[] classbytes, String fieldName) {
  ClassReader super_cr = new ClassReader(classbytes);
  ClassNode cn = new ClassNode();
  super_cr.accept(cn, 0);
  List<FieldNode> fields = cn.fields;
  if (fields != null) {
    for (FieldNode fn : fields) {
      if (fn.name.equals(fieldName)) {
        return fn;
      }
    }
  }
  return null;
}

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

public static int getPausableStatus(String className, String methodName,
    String desc, Detector detector) 
{
  try {
    ClassCache classCache = classCacheMap.get(className);
    if (classCache == null) {
      ClassReader cr = new ClassReader(className);
      ClassNode cn = new ClassNode();
      cr.accept(cn, /*flags*/ 0);
      classCache = cache(className, cn);
    }
    int status = classCache.getPausableStatus(methodName, desc);
    if (status == Detector.METHOD_NOT_FOUND_OR_PAUSABLE) {
      // check super classes
      for (String superName: classCache.superClasses) {
        status = detector.getPausableStatus(superName, methodName, desc);
        if (status != Detector.METHOD_NOT_FOUND_OR_PAUSABLE) 
          break;
      }
    }
    return status;
  } catch (IOException ioe) {
    System.err.println("***Error reading " + className + ": " + ioe.getMessage());
    return Detector.METHOD_NOT_FOUND_OR_PAUSABLE;
  }
}
private static ClassCache cache(String className, ClassNode cn) {

代码示例来源:origin: groovy/groovy-core

protected Class createClass(byte[] code, ClassNode classNode) {
    ClassReader cr = new ClassReader(code);
    GenericsTester classVisitor = new GenericsTester(new org.objectweb.asm.tree.ClassNode());
    cr.accept(classVisitor, ClassWriter.COMPUTE_MAXS);
    return super.createClass(code,classNode);
  }        
}

代码示例来源:origin: konsoletyper/teavm

public String submitClassFile(byte[] data) {
  ClassNode node = new ClassNode();
  org.objectweb.asm.ClassReader reader = new org.objectweb.asm.ClassReader(data);
  reader.accept(node, 0);
  submitClass(new Parser(new ReferenceCache()).parseClass(node));
  return node.name;
}

代码示例来源: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: spotbugs/spotbugs

@Override
public ClassNode analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException {
  ClassReader classReader = analysisCache.getClassAnalysis(ClassReader.class, descriptor);
  ICodeBaseEntry entry = analysisCache.getClassPath().lookupResource(descriptor.toResourceName());
  // One of the less-than-ideal features of ASM is that
  // invalid classfile format is indicated by a
  // random runtime exception rather than something
  // indicative of the real problem.
  try {
    ClassNode cn = new ClassNode();
    classReader.accept(cn, 0);
    return cn;
  } catch (RuntimeException e) {
    throw new InvalidClassFileFormatException(descriptor, entry, e);
  }
}

代码示例来源: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: spring-projects/spring-loaded

@SuppressWarnings("unchecked")
protected void checkLocalVariables(byte[] bytes, String methodNameAndDescriptor, String... expected) {
  ClassNode cn = new ClassNode();
  ClassReader cr = new ClassReader(bytes);
  cr.accept(cn, 0);
  boolean checked = false;
  List<MethodNode> methods = cn.methods;
  for (MethodNode mn : methods) {
    if (methodNameAndDescriptor.equals(mn.name + mn.desc)) {
      List<LocalVariableNode> localVariables = mn.localVariables;
      Assert.assertEquals(expected.length, localVariables.size());
      for (int i = 0; i < expected.length; i++) {
        StringTokenizer tokenizer = new StringTokenizer(expected[i], ":");
        String expectedName = tokenizer.nextToken();
        String expectedDesc = tokenizer.nextToken();
        LocalVariableNode localVariable = localVariables.get(i);
        Assert.assertEquals(i, localVariable.index);
        Assert.assertEquals(expectedName, localVariable.name);
        Assert.assertEquals(expectedDesc, localVariable.desc);
      }
      checked = true;
    }
  }
  if (!checked) {
    for (MethodNode mn : methods) {
      System.out.println(mn.name + mn.desc);
    }
    Assert.fail("Unable to find method " + methodNameAndDescriptor);
  }
}

代码示例来源:origin: spring-projects/spring-loaded

@SuppressWarnings("unchecked")
protected void checkAnnotations(byte[] bytes, String methodNameAndDescriptor, String... expected) {
  ClassNode cn = new ClassNode();
  ClassReader cr = new ClassReader(bytes);
  cr.accept(cn, 0);

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

@SuppressWarnings("rawtypes")
public static void verify(final ClassReader cr, PrintWriter out) throws AnalyzerException,
    IllegalArgumentException, IllegalAccessException {
  ClassNode cn = new ClassNode();
  cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
  List methods = cn.methods;
  for (int i = 0; i < methods.size(); ++i) {
    MethodNode method = (MethodNode) methods.get(i);
    List tryCatchBlocks = method.tryCatchBlocks;
    for (int j = 0; j < tryCatchBlocks.size(); j++) {
      TryCatchBlockNode tcn = (TryCatchBlockNode) tryCatchBlocks.get(j);
      if (tcn.start.equals(tcn.end)) {
        throw new DexException("try/catch block %d in %s has same start(%s) and end(%s)", j, method.name,
            tcn.start.getLabel(), tcn.end.getLabel());
      }
    }
    BasicVerifier verifier = new BasicVerifier();
    Analyzer a = new Analyzer(verifier);
    try {
      a.analyze(cn.name, method);
    } catch (Exception e) {
      out.println(cr.getClassName() + "." + method.name + method.desc);
      printAnalyzerResult(method, a, out);
      e.printStackTrace(out);
      out.flush();
      throw new DexException("method " + method.name + " " + method.desc, e);
    }
  }
}

相关文章