Package org.objectweb.asm

Examples of org.objectweb.asm.ClassReader


      listener.displaySummary(warningCount);
    }
  }

  private ClassReader getClassReader(String className) throws ClassNotFoundException {
    ClassReader reader = null;
    SoftReference<ClassReader> ref = classReaderCache.get(className);
    if (ref != null) {
      reader = ref.get();
    }

    if (reader == null) {
      byte b[] = classLoader.getClassData(className);

      reader = new ClassReader(b);

      classReaderCache.put(className, new SoftReference<ClassReader>(reader));

      // class file version should not be higher than target
      int version = reader.readShort(6); // get major number only
      if (version > target) {
        invalidClassVersion(className.replace('/', '.'), target, version);
      }
    }
    return reader;   
View Full Code Here


    }

  private boolean findField(String owner, final String name, final String c) throws ClassNotFoundException {
    String javaClassName = owner;
    while (true) {
      ClassReader reader = getClassReader(javaClassName);
      FindFieldOrMethodClassVisitor visitor = new FindFieldOrMethodClassVisitor(false, name, c);
   
      try {
        reader.accept(visitor, 0);
      } catch (Success s) {
        return true;
      }
      String[] is = visitor.classInterfaces;
      for (String i : is) {
View Full Code Here

  }

  private boolean findMethod(final String owner, final String name, final String desc) throws ClassNotFoundException {
    String javaClassName = owner;
    while (true) {
      ClassReader reader = getClassReader(javaClassName);
      FindFieldOrMethodClassVisitor visitor = new FindFieldOrMethodClassVisitor(true, name, desc);
      try {
        reader.accept(visitor, 0);
      } catch (Success s) {
        return true;
      }

      if (visitor.isInterface || visitor.isAbstract) {
View Full Code Here

  };

  protected boolean weave(InputStream sourceStream, String fileName, ByteArrayOutputStream bos)
      throws IOException {

        ClassReader cr = new ClassReader(sourceStream);
        ClassWriter cw = new ClassWriter(true);

        try {
          NameTranslatorClassVisitor translator;
          ConstantPool cp;
            if (COMPACT_CONSTANTS) {
                cp = new ConstantPool();
                ClassConstantsCollector ccc = new ClassConstantsCollector(cw, cp);
                translator = new NameTranslatorClassVisitor(ccc);
            } else {
              translator = new NameTranslatorClassVisitor(cw);
            }
            ClassWeaver classWeaver = new ClassWeaver(translator, lazy, stripAttributes, target, listener);
            ClassVisitor v;
            if (stripSignatures) {
                v = new SignatureStripper(classWeaver);
            } else {
              v = classWeaver;
            }
            cr.accept(v, CUSTOM_ATTRIBUTES, false);       

            if (COMPACT_CONSTANTS) {
              Set<Constant> constants = new TreeSet<Constant>(new ConstantComparator());
              constants.addAll(cp.values());

              cr = new ClassReader(cw.toByteArray());
                cw = new ClassWriter(false);
                for(Constant c: constants)
                  c.write(cw);
                cr.accept(cw, false);
            }

          bos.write(cw.toByteArray());
          return true;
        } catch (TranslationException te) {
View Full Code Here

            System.err.println("Prints the ASM code to generate the given class.");
            System.err.println("Usage: RetroweaverASMifier [-debug] "
                    + "<fully qualified class name or class file name>");
            return;
        }
        ClassReader cr;
        if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1
                || args[i].indexOf('/') > -1) {
            cr = new ClassReader(new FileInputStream(args[i]));
        } else {
            cr = new ClassReader(args[i]);
        }
        cr.accept(new ASMifier(new PrintWriter(System.out)),
                getDefaultAttributes(),
                skipDebug);
        }
View Full Code Here

  private void verifyClass(InputStream sourceStream, String classFileName)
      throws IOException {

    failedClasses = new HashSet<String>();

        ClassReader cr = new ClassReader(sourceStream);
        cr.accept(this, false);
  }
View Full Code Here

    if (warningCount != 0)
      listener.displaySummary(warningCount);
  }

  private ClassReader getClassReader(String className) throws ClassNotFoundException {
    ClassReader reader = null;
    SoftReference<ClassReader> ref = classReaderCache.get(className);
    if (ref != null)
      reader = ref.get();

    if (reader == null) {
      byte b[] = classLoader.getClassData(className);

      reader = new ClassReader(b);

      classReaderCache.put(className, new SoftReference<ClassReader>(reader));

      // class file version should not be higher than target
      int version = reader.readShort(6); // get major number only
      if (version > target) {
        invalidClassVersion(className.replace('/', '.'), target, version);
      }
    }
    return reader;   
View Full Code Here

    }

  private boolean findField(String owner, final String name, final String c) throws ClassNotFoundException {
    String javaClassName = owner;
    while (true) {
      ClassReader reader = getClassReader(javaClassName);
      FindFieldOrMethodClassVisitor visitor = new FindFieldOrMethodClassVisitor(false, name, c);
   
      try {
        reader.accept(visitor, false);
      } catch (Success s) {
        return true;
      }
      String[] is = visitor.classInterfaces;
      for (String i : is)
View Full Code Here

  }

  private boolean findMethod(final String owner, final String name, final String desc) throws ClassNotFoundException {
    String javaClassName = owner;
    while (true) {
      ClassReader reader = getClassReader(javaClassName);
      FindFieldOrMethodClassVisitor visitor = new FindFieldOrMethodClassVisitor(true, name, desc);
      try {
        reader.accept(visitor, false);
      } catch (Success s) {
        return true;
      }

      if (visitor.isInterface || visitor.isAbstract) {
View Full Code Here

      FileInputStream classInStream = null;
      ClassWriter writer = null;
      try {
        //read in the class
        classInStream = new FileInputStream(arg);
        ClassReader reader = new ClassReader(classInStream);
        //make a ClassWriter constructed with the reader for speed
        //since we are mostly just copying
        //we just need to override the visit method so we can add
        //the synthetic modifier, otherwise we use the methods in
        //a standard writer
        writer = new ClassWriter(reader, 0) {
          @Override
          public void visit(int version, int access, String name, String signature,
              String superName, String[] interfaces)
          {
            super.visit(version, access | Opcodes.ACC_SYNTHETIC, name, signature, superName,
                interfaces);
          }
        };
        //call accept on the reader to start the visits
        //using the writer we created as the visitor
        reader.accept(writer, 0);
      } finally {
        //close the InputStream if it is hanging around
        if (classInStream != null) classInStream.close();
      }
      FileOutputStream classOutStream = null;
View Full Code Here

TOP

Related Classes of org.objectweb.asm.ClassReader

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.