Package org.objectweb.asm

Examples of org.objectweb.asm.ClassVisitor


                && sc.identity.objectidClass != null
                && !sc.identity.oidClassAutoCalculated
                && (sc.getSuperClassName() == null //I have not a parent
                        ||  !sc.identity.objectidClass.equals(sc.getSuper().identity.objectidClass)) ) {
            ClassWriter cw;
            ClassVisitor current;
            //Modifies the User id class
            cw = new ClassWriter(true);
            current = new UserIdEnhancer(cw, sc, log, personality);
            String cn = sc.identity.objectidClass;
            ClassReader cr = loadJavaClass(false, cn, scp.output, true);
View Full Code Here


            }
            enhanced++;
            logger.log(BasicLevel.DEBUG, "Enhancing persistent aware class '"
                    + name + "'");
            ClassWriter cw = new ClassWriter(false);
            ClassVisitor current = cw;
            current = new PersistenceAwareClassModifier(cw, scp.smi, logger, personality);

            ClassReader cr = loadJavaClass(
                    isSrcJar, name, scp.awareFilesDir, false);
            cr.accept(current, Attributes.getDefaultAttributes(), false);
View Full Code Here

        t3 = new Stopwatch().start();
       
       
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);

        ClassVisitor remappingAdapter = new RemappingClassAdapter(cw, remapper);
        MergeAdapter mergingAdapter = new MergeAdapter(oldTemplateSlashName, materializedSlashName, remappingAdapter,
            impl);
        ClassReader tReader = new ClassReader(templateClass);
        tReader.accept(mergingAdapter, ClassReader.EXPAND_FRAMES);
        byte[] outputClass = cw.toByteArray();
//        Files.write(outputClass, new File(String.format("/tmp/%d-output.class", fileNum)));
        outputClass = cw.toByteArray();

        // Load the class
        classLoader.injectByteCode(materializedClassName, outputClass);
      }
      t3.stop();
      Stopwatch t4 = new Stopwatch().start();
      int i = 0;
      for (String s : remapper.getSubclasses()) {
        logger.debug("Setting up sub class {}", s);
        // for each sub class, remap them into the new class.
        String subclassPath = FileUtils.separator + s + ".class";
        final byte[] bytecode = getClassByteCodeFromPath(subclassPath);
        RemapClasses localRemapper = new RemapClasses(oldTemplateSlashName, materializedSlashName);
        Preconditions.checkArgument(localRemapper.getSubclasses().isEmpty(), "Class transformations are only supported for classes that have a single level of inner classes.");
        ClassWriter subcw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
        ClassVisitor remap = new RemappingClassAdapter(subcw, localRemapper);
        ClassReader reader = new ClassReader(bytecode);
        reader.accept(remap, ClassReader.EXPAND_FRAMES);
        byte[] newByteCode = subcw.toByteArray();
        classLoader.injectByteCode(s.replace(oldTemplateSlashName, materializedSlashName).replace(FileUtils.separatorChar, '.'), newByteCode);
//        Files.write(subcw.toByteArray(), new File(String.format("/tmp/%d-sub-%d.class", fileNum, i)));
View Full Code Here

  }
 
  /** Parses a class and checks for valid method invocations */
  private int checkClass(final ClassReader reader) {
    final int[] violations = new int[1];
    reader.accept(new ClassVisitor(Opcodes.ASM5) {
      final String className = Type.getObjectType(reader.getClassName()).getClassName();
      String source = null;
     
      ClassSignatureLookup lookupRelatedClass(String internalName) {
        final Type type = Type.getObjectType(internalName);
View Full Code Here

    this.className = classReader.getClassName();
    this.superName = classReader.getSuperName();
    this.interfaces = classReader.getInterfaces();
    final Set<Method> methods = new HashSet<Method>();
    final Set<String> fields = new HashSet<String>();
    classReader.accept(new ClassVisitor(Opcodes.ASM5) {
      @Override
      public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
        final Method m = new Method(name, desc);
        methods.add(m);
        return null;
View Full Code Here

    // Note: reader.getAccess() does no indicate if class is deprecated, as this is a special
    // attribute or annotation (both is handled later), we have to parse the class - this is just early exit!
    if ((reader.getAccess() & ACC_PUBLIC) == 0 || isInternalClass(className)) {
      return;
    }
    reader.accept(new ClassVisitor(ASM5) {
      boolean classDeprecated = false;
   
      @Override
      public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
        if (isDeprecated(access)) {
View Full Code Here

        if( node.version > 50 ) {
          opts = ClassWriter.COMPUTE_FRAMES;
        }
        ClassWriter cw = new ClassWriter( opts );

        node.accept(new ClassVisitor( Opcodes.ASM4, cw) {});
        byte[] result = cw.toByteArray();
//        String postCheck = verify( result );
//        if ( postCheck.trim().length() > 0 ) {
//            log( "Class " + node.name + " failed postcheck:\n " + postCheck );
//            throw new Exception( "Class " + node.name + " failed postcheck:\n" + postCheck );
View Full Code Here

  private byte[] rewrite(String className, byte[] classBuffer,
      boolean stripLocalVars, boolean isUserCode, ProtectionDomain domain) throws IOException {
    ClassReader cr = new ClassReader(new ByteArrayInputStream(classBuffer));
    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
    ClassVisitor visitor = cw;
    visitor = new ObjectAccessVisitor(visitor, isUserCode,
        treatRestrictedClassListViolationsAsErrors,
        className, domain.getCodeSource().getLocation());
    visitor = new ReflectionVisitor(visitor);
    visitor = new ClassLoaderVisitor(visitor);
View Full Code Here

    }

    public static byte[] createHandleBytes(Method method, String name) {
        Class returnType = method.getReturnType();
        Class[] paramTypes = method.getParameterTypes();
        ClassVisitor cv = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        cv.visit(ACC_PUBLIC | ACC_FINAL | ACC_SUPER, V1_5, name, null, p(Handle.class), null);

        SkinnyMethodAdapter m;
        String signature;
        boolean needsArgsVersion = true;
        switch (paramTypes.length) {
        case 0:
            signature = sig(Object.class, Object.class);
            break;
        case 1:
            signature = sig(Object.class, Object.class, Object.class);
            break;
        case 2:
            signature = sig(Object.class, Object.class, Object.class, Object.class);
            break;
        case 3:
            signature = sig(Object.class, Object.class, Object.class, Object.class, Object.class);
            break;
//        case 4:
//            signature = sig(Object.class, Object.class, Object.class, Object.class, Object.class);
//            break;
//        case 5:
//            signature = sig(Object.class, Object.class, Object.class, Object.class, Object.class, Object.class);
//            break;
        default:
            needsArgsVersion = false;
            signature = sig(Object.class, Object.class, Object[].class);
            break;
        }
        m = new SkinnyMethodAdapter(cv, ACC_PUBLIC | ACC_FINAL | ACC_SYNTHETIC, "invoke", signature, null, null);

        m.start();

        // load receiver
        if (!Modifier.isStatic(method.getModifiers())) {
            m.aload(1); // receiver
            if (method.getDeclaringClass() != Object.class) {
                m.checkcast(p(method.getDeclaringClass()));
            }
        }

        // load arguments
        switch (paramTypes.length) {
        case 0:
        case 1:
        case 2:
        case 3:
//        case 4:
//        case 5:
            for (int i = 0; i < paramTypes.length; i++) {
                loadUnboxedArgument(m, i + 2, paramTypes[i]);
            }
            break;
        default:
            for (int i = 0; i < paramTypes.length; i++) {
                m.aload(2); // Object[] args
                m.pushInt(i);
                m.aaload();
                Class paramClass = paramTypes[i];
                if (paramClass.isPrimitive()) {
                    Class boxType = getBoxType(paramClass);
                    m.checkcast(p(boxType));
                    m.invokevirtual(p(boxType), paramClass.toString() + "Value", sig(paramClass));
                } else if (paramClass != Object.class) {
                    m.checkcast(p(paramClass));
                }
            }
            break;
        }

        if (Modifier.isStatic(method.getModifiers())) {
            m.invokestatic(p(method.getDeclaringClass()), method.getName(), sig(returnType, paramTypes));
        } else if (Modifier.isInterface(method.getDeclaringClass().getModifiers())) {
            m.invokeinterface(p(method.getDeclaringClass()), method.getName(), sig(returnType, paramTypes));
        } else {
            m.invokevirtual(p(method.getDeclaringClass()), method.getName(), sig(returnType, paramTypes));
        }

        if (returnType == void.class) {
            m.aconst_null();
        } else if (returnType.isPrimitive()) {
            Class boxType = getBoxType(returnType);
            m.invokestatic(p(boxType), "valueOf", sig(boxType, returnType));
        }
        m.areturn();
        m.end();

        if (needsArgsVersion) {
            m = new SkinnyMethodAdapter(cv, ACC_PUBLIC | ACC_FINAL | ACC_SYNTHETIC, "invoke", sig(Object.class, Object.class, Object[].class), null, null);

            m.start();

            // load handle
            m.aload(0);

            // load receiver
            m.aload(1);

            // load arguments
            for (int i = 0; i < paramTypes.length; i++) {
                m.aload(2); // args array
                m.ldc(i);
                m.aaload(); // i'th argument
            }

            // invoke specific arity version
            m.invokevirtual(name, "invoke", sig(Object.class, params(Object.class, Object.class, paramTypes.length)));

            // return result
            m.areturn();
            m.end();
        }

        // constructor
        m = new SkinnyMethodAdapter(cv, ACC_PUBLIC, "<init>", sig(void.class), null, null);
        m.start();
        m.aload(0);
        m.invokespecial(p(Handle.class), "<init>", sig(void.class));
        m.voidreturn();
        m.end();

        cv.visitEnd();

        byte[] bytes = ((ClassWriter)cv).toByteArray();

        return bytes;
    }
View Full Code Here

    public static String buildStaticScopeNames(StaticScope scope) {
        return RuntimeHelpers.encodeScope(scope);
    }

    private void beginInit() {
        ClassVisitor cv = getClassVisitor();

        initMethod = new SkinnyMethodAdapter(cv, ACC_PUBLIC, "<init>", sig(Void.TYPE), null, null);
        initMethod.start();
        initMethod.aload(THIS);
        initMethod.invokespecial(p(AbstractScript.class), "<init>", sig(Void.TYPE));
View Full Code Here

TOP

Related Classes of org.objectweb.asm.ClassVisitor

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.