Example usage for org.objectweb.asm Opcodes ACC_SYNCHRONIZED

List of usage examples for org.objectweb.asm Opcodes ACC_SYNCHRONIZED

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes ACC_SYNCHRONIZED.

Prototype

int ACC_SYNCHRONIZED

To view the source code for org.objectweb.asm Opcodes ACC_SYNCHRONIZED.

Click Source Link

Usage

From source file:com.mogujie.instantrun.IncrementalChangeVisitor.java

License:Apache License

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {

    if (instantRunDisabled || !isAccessCompatibleWithInstantRun(access)) {
        // Nothing to generate.
        return null;
    }/*from w w w .  ja  va  2s  . c o m*/
    if (name.equals("<clinit>")) {
        // we skip the class init as it can reset static fields which we don't support right now
        return null;
    }
    Log.v("visit method " + name + "  " + desc);
    boolean isStatic = (access & Opcodes.ACC_STATIC) != 0;
    boolean isPrivate = (access & Opcodes.ACC_PRIVATE) != 0;
    boolean isSync = (access & Opcodes.ACC_SYNCHRONIZED) != 0;

    String newDesc = computeOverrideMethodDesc(desc, isStatic);

    // Do not carry on any access flags from the original method. For example synchronized
    // on the original method would translate into a static synchronized method here.
    access = Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC;

    //        MethodNode method = getMethodByNameInClass(name, desc, classNode);
    if (name.equals("<init>")) {
        return null;
    } else {
        String newName = isStatic ? computeOverrideMethodName(name, desc) : name;
        MethodVisitor original = super.visitMethod(access, newName, newDesc, signature, exceptions);
        for (MethodNode methodNode : methodNodes) {
            if (desc.equals(methodNode.desc) && name.equals(methodNode.name)) {
                processNew(methodNode);
            }
        }

        return new ISVisitor(original, access, newName, newDesc, IncrementalTool.getMtdSig(name, desc),
                isStatic, false /* isConstructor */);
    }
}

From source file:com.poolik.classfinder.info.ClassInfo.java

License:BSD License

/**
 * Convert an ASM access mask to a reflection Modifier mask.
 *
 * @param asmAccessMask the ASM access mask
 * @return the Modifier mask//from  w  w w  .  j  a  v  a2 s  .  c o  m
 */
private int convertAccessMaskToModifierMask(int asmAccessMask) {
    int modifier = 0;

    // Convert the ASM access info into Reflection API modifiers.

    if ((asmAccessMask & Opcodes.ACC_FINAL) != 0)
        modifier |= Modifier.FINAL;

    if ((asmAccessMask & Opcodes.ACC_NATIVE) != 0)
        modifier |= Modifier.NATIVE;

    if ((asmAccessMask & Opcodes.ACC_INTERFACE) != 0)
        modifier |= Modifier.INTERFACE;

    if ((asmAccessMask & Opcodes.ACC_ABSTRACT) != 0)
        modifier |= Modifier.ABSTRACT;

    if ((asmAccessMask & Opcodes.ACC_PRIVATE) != 0)
        modifier |= Modifier.PRIVATE;

    if ((asmAccessMask & Opcodes.ACC_PROTECTED) != 0)
        modifier |= Modifier.PROTECTED;

    if ((asmAccessMask & Opcodes.ACC_PUBLIC) != 0)
        modifier |= Modifier.PUBLIC;

    if ((asmAccessMask & Opcodes.ACC_STATIC) != 0)
        modifier |= Modifier.STATIC;

    if ((asmAccessMask & Opcodes.ACC_STRICT) != 0)
        modifier |= Modifier.STRICT;

    if ((asmAccessMask & Opcodes.ACC_SYNCHRONIZED) != 0)
        modifier |= Modifier.SYNCHRONIZED;

    if ((asmAccessMask & Opcodes.ACC_TRANSIENT) != 0)
        modifier |= Modifier.TRANSIENT;

    if ((asmAccessMask & Opcodes.ACC_VOLATILE) != 0)
        modifier |= Modifier.VOLATILE;

    return modifier;
}

From source file:com.yahoo.yqlplus.engine.internal.compiler.JoinGenerator.java

public JoinGenerator(TypeWidget programType, GambitScope environment, final int count) {
    this.builder = environment.createObject(JoinTask.class);
    this.builder.addParameter("$program", programType);
    ObjectBuilder.ConstructorBuilder constructor = this.builder.getConstructor();
    constructor.invokeSpecial(JoinTask.class, constructor.constant(count));
    this.execMethod = builder.method("exec");
    execMethod.addModifiers(Opcodes.ACC_SYNCHRONIZED);
    execBody = execMethod.block();//  www. j a va  2 s .c  om
    execMethod.exit();
}

From source file:com.yahoo.yqlplus.engine.internal.compiler.JoinGenerator.java

public BytecodeExpression createRunnable(ScopedBuilder body, BytecodeExpression joinExpr,
        List<OperatorValue> valueList) {
    if (valueList.isEmpty()) {
        return joinExpr;
    }//w  w w .  j  av a2  s .c o m
    final List<String> argNames = Lists.newArrayList();
    final List<TypeWidget> argValues = Lists.newArrayList();
    final List<BytecodeExpression> arguments = Lists.newArrayList();
    for (OperatorValue value : valueList) {
        Preconditions.checkArgument(value.getName() != null, "OperatorValue in valueList not assigned name");
        argNames.add(value.getName());
        argValues.add(parameters.get(value.getName()).getType());
        arguments.add(body.local(value.getName()));
    }
    final String methodName = "send" + Joiner.on("$").join(argNames);
    if (!builder.hasMethod(methodName)) {
        ObjectBuilder.MethodBuilder method = builder.method(methodName);
        method.addModifiers(Opcodes.ACC_SYNCHRONIZED);
        List<BytecodeExpression> args = Lists.newArrayList();
        for (int i = 0; i < argNames.size(); ++i) {
            args.add(method.addArgument(argNames.get(i), argValues.get(i)));
        }
        for (int i = 0; i < valueList.size(); ++i) {
            method.exec(
                    parameters.get(valueList.get(i).getName()).get(method.local("this")).write(args.get(i)));
        }
        method.exit();
    }
    final GambitCreator.Invocable send = builder.methodInvocable(methodName, joinExpr);
    body.exec(body.invoke(Location.NONE, send, arguments));
    return joinExpr;
}

From source file:dimmunix.InstrumentationClassAdapter.java

License:Open Source License

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    MethodVisitor mv;//from  www.j a  v a 2s .com
    boolean sync = ((access & Opcodes.ACC_SYNCHRONIZED) != 0);
    //      boolean stat = ((access & Opcodes.ACC_STATIC) != 0);
    //boolean nat = ((access & Opcodes.ACC_NATIVE) != 0); 

    //remove sync modifier if method is not native
    //      if (sync && clTrans.canRemoveSyncModifier) {
    //         access ^= Opcodes.ACC_SYNCHRONIZED;
    //      }
    mv = cv.visitMethod(access, name, desc, signature, exceptions);
    //      if (name.equals("<init>")) {
    //         return mv;
    //      }
    if (mv != null) {
        mv = new InstrumentationMethodAdapter(mv, className, name, sync);
    }

    return mv;
}

From source file:edu.umd.cs.findbugs.classfile.engine.ClassParserUsingASM.java

License:Open Source License

@Override
public void parse(final ClassNameAndSuperclassInfo.Builder cBuilder) throws InvalidClassFileFormatException {

    cBuilder.setCodeBaseEntry(codeBaseEntry);

    final TreeSet<ClassDescriptor> calledClassSet = new TreeSet<ClassDescriptor>();

    classReader.accept(new ClassVisitor(FindBugsASM.ASM_VERSION) {

        //            boolean isInnerClass = false;

        @Override//from   w ww.j av a2s .com
        public void visit(int version, int access, String name, String signature, String superName,
                String[] interfaces) {
            ClassParserUsingASM.this.slashedClassName = name;
            cBuilder.setClassfileVersion(version >>> 16, version & 0xffff);
            cBuilder.setAccessFlags(access);
            cBuilder.setClassDescriptor(DescriptorFactory.createClassDescriptor(name));
            cBuilder.setInterfaceDescriptorList(DescriptorFactory.createClassDescriptor(interfaces));
            if (superName != null) {
                cBuilder.setSuperclassDescriptor(DescriptorFactory.createClassDescriptor(superName));
            }
            if (cBuilder instanceof ClassInfo.Builder) {
                ((ClassInfo.Builder) cBuilder).setSourceSignature(signature);
            }
        }

        @Override
        public org.objectweb.asm.AnnotationVisitor visitAnnotation(String desc, boolean isVisible) {
            if (cBuilder instanceof ClassInfo.Builder) {
                AnnotationValue value = new AnnotationValue(desc);
                ((ClassInfo.Builder) cBuilder).addAnnotation(desc, value);
                return value.getAnnotationVisitor();
            }
            return null;
        }

        @Override
        public void visitAttribute(Attribute arg0) {
            //
        }

        @Override
        public void visitEnd() {
            //
        }

        @Override
        public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
            //                if (name.equals("this$0"))
            //                    isInnerClass = true;

            if (desc == null) {
                throw new NullPointerException("Description cannot be null");
            }
            if (cBuilder instanceof ClassInfo.Builder) {
                final ClassInfo.Builder cBuilder2 = (ClassInfo.Builder) cBuilder;
                if ((access & Opcodes.ACC_VOLATILE) != 0 || desc.contains("util/concurrent")) {
                    cBuilder2.setUsesConcurrency();
                }
                final FieldInfo.Builder fBuilder = new FieldInfo.Builder(slashedClassName, name, desc, access);
                fBuilder.setSourceSignature(signature);
                return new AbstractFieldAnnotationVisitor() {

                    @Override
                    public org.objectweb.asm.AnnotationVisitor visitAnnotation(final String desc,
                            boolean visible) {
                        AnnotationValue value = new AnnotationValue(desc);
                        fBuilder.addAnnotation(desc, value);
                        return value.getAnnotationVisitor();
                    }

                    @Override
                    public void visitEnd() {
                        cBuilder2.addFieldDescriptor(fBuilder.build());

                    }

                };

            }
            return null;
        }

        @Override
        public void visitInnerClass(String name, String outerName, String innerName, int access) {
            if (name.equals(slashedClassName) && outerName != null) {
                if (cBuilder instanceof ClassInfo.Builder) {
                    ClassDescriptor outerClassDescriptor = DescriptorFactory.createClassDescriptor(outerName);
                    ((ClassInfo.Builder) cBuilder).setImmediateEnclosingClass(outerClassDescriptor);
                    ((ClassInfo.Builder) cBuilder).setAccessFlags(access);
                }

            }

        }

        @Override
        public MethodVisitor visitMethod(final int access, final String methodName, final String methodDesc,
                String signature, String[] exceptions) {
            if (cBuilder instanceof ClassInfo.Builder) {
                final MethodInfo.Builder mBuilder = new MethodInfo.Builder(slashedClassName, methodName,
                        methodDesc, access);
                mBuilder.setSourceSignature(signature);
                mBuilder.setThrownExceptions(exceptions);
                if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
                    mBuilder.setUsesConcurrency();
                }

                return new ClassParserMethodVisitor(calledClassSet, mBuilder, methodName, access, methodDesc,
                        cBuilder);

            }
            return null;
        }

        @Override
        public void visitOuterClass(String owner, String name, String desc) {

        }

        @Override
        public void visitSource(String arg0, String arg1) {
            if (cBuilder instanceof ClassInfo.Builder) {
                ((ClassInfo.Builder) cBuilder).setSource(arg0);
            }

        }
    }, ClassReader.SKIP_FRAMES);
    HashSet<ClassDescriptor> referencedClassSet = new HashSet<ClassDescriptor>();

    // collect class references

    int constantPoolCount = classReader.readUnsignedShort(8);
    int offset = 10;
    char[] buf = new char[1024];
    // System.out.println("constant pool count: " + constantPoolCount);
    for (int count = 1; count < constantPoolCount; count++) {
        int tag = classReader.readByte(offset);

        int size;
        switch (tag) {
        case Constants.CONSTANT_Methodref:
        case Constants.CONSTANT_InterfaceMethodref:
        case Constants.CONSTANT_Fieldref:
        case Constants.CONSTANT_Integer:
        case Constants.CONSTANT_Float:
        case Constants.CONSTANT_NameAndType:
        case Constants.CONSTANT_InvokeDynamic:
            size = 5;
            break;
        case Constants.CONSTANT_Long:
        case Constants.CONSTANT_Double:
            size = 9;
            count++;
            break;
        case Constants.CONSTANT_Utf8:
            size = 3 + classReader.readUnsignedShort(offset + 1);
            break;
        case Constants.CONSTANT_Class:
            @SlashedClassName
            String className = classReader.readUTF8(offset + 1, buf);
            if (className.indexOf('[') >= 0) {
                ClassParser.extractReferencedClassesFromSignature(referencedClassSet, className);
            } else if (ClassName.isValidClassName(className)) {
                ClassDescriptor classDescriptor = DescriptorFactory.instance().getClassDescriptor(className);
                referencedClassSet.add(classDescriptor);
            }
            size = 3;
            break;
        case Constants.CONSTANT_String:
        case Constants.CONSTANT_MethodType:
            size = 3;
            break;
        case Constants.CONSTANT_MethodHandle:
            size = 4;
            break;
        default:
            throw new IllegalStateException("Unexpected tag of " + tag + " at offset " + offset
                    + " while parsing " + slashedClassName + " from " + codeBaseEntry);
        }
        // System.out.println(count + "@" + offset + " : [" + tag
        // +"] size="+size);
        offset += size;
    }
    cBuilder.setCalledClassDescriptors(calledClassSet);
    cBuilder.setReferencedClassDescriptors(referencedClassSet);
}

From source file:graph.Modifier.java

License:Apache License

/**
 * Returns an integer bit field for the EnumSet, where the bit values are
 * defined as in the class file format./*from ww w.j  a  v  a2 s  .  c  o m*/
 *
 * @param  set   Set of modifiers to convert to a bit field.
 * @return       Integer bit field.
 */
public static int getBitField(EnumSet<Modifier> set) {
    int access = 0;

    if (set.contains(PUBLIC)) {
        access |= Opcodes.ACC_PUBLIC;
    }

    if (set.contains(PROTECTED)) {
        access |= Opcodes.ACC_PROTECTED;
    }

    if (set.contains(PRIVATE)) {
        access |= Opcodes.ACC_PRIVATE;
    }

    if (set.contains(STATIC)) {
        access |= Opcodes.ACC_STATIC;
    }

    if (set.contains(FINAL)) {
        access |= Opcodes.ACC_FINAL;
    }

    if (set.contains(SUPER)) {
        access |= Opcodes.ACC_SUPER;
    }

    if (set.contains(INTERFACE)) {
        access |= Opcodes.ACC_INTERFACE;
    }

    if (set.contains(ABSTRACT)) {
        access |= Opcodes.ACC_ABSTRACT;
    }

    if (set.contains(SYNTHETIC)) {
        access |= Opcodes.ACC_SYNTHETIC;
    }

    if (set.contains(ANNOTATION)) {
        access |= Opcodes.ACC_ANNOTATION;
    }

    if (set.contains(ENUM)) {
        access |= Opcodes.ACC_ENUM;
    }

    if (set.contains(VOLATILE)) {
        access |= Opcodes.ACC_VOLATILE;
    }

    if (set.contains(TRANSIENT)) {
        access |= Opcodes.ACC_TRANSIENT;
    }

    if (set.contains(SYNCHRONIZED)) {
        access |= Opcodes.ACC_SYNCHRONIZED;
    }

    if (set.contains(BRIDGE)) {
        access |= Opcodes.ACC_BRIDGE;
    }

    if (set.contains(VARARGS)) {
        access |= Opcodes.ACC_VARARGS;
    }

    if (set.contains(NATIVE)) {
        access |= Opcodes.ACC_NATIVE;
    }

    return access;
}

From source file:graph.Modifier.java

License:Apache License

/**
 * Returns an EnumSet of the modifiers, based on the given bit field (where
 * the bit values are defined as in the class file format).
 *
 * @param access Integer bit field giving access modifiers.
 * @return       Set of modifiers./*ww w  . ja  v a  2  s  .co  m*/
 */
public static EnumSet<Modifier> getSet(int access) {
    EnumSet<Modifier> modifiers = EnumSet.noneOf(Modifier.class);

    if ((access & Opcodes.ACC_PUBLIC) != 0) {
        modifiers.add(Modifier.PUBLIC);
    }

    if ((access & Opcodes.ACC_PROTECTED) != 0) {
        modifiers.add(Modifier.PROTECTED);
    }

    if ((access & Opcodes.ACC_PRIVATE) != 0) {
        modifiers.add(Modifier.PRIVATE);
    }

    if ((access & Opcodes.ACC_STATIC) != 0) {
        modifiers.add(Modifier.STATIC);
    }

    if ((access & Opcodes.ACC_FINAL) != 0) {
        modifiers.add(Modifier.FINAL);
    }

    if ((access & Opcodes.ACC_SUPER) != 0) {
        modifiers.add(Modifier.SUPER);
    }

    if ((access & Opcodes.ACC_INTERFACE) != 0) {
        modifiers.add(Modifier.INTERFACE);
    }

    if ((access & Opcodes.ACC_ABSTRACT) != 0) {
        modifiers.add(Modifier.ABSTRACT);
    }

    if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
        modifiers.add(Modifier.SYNTHETIC);
    }

    if ((access & Opcodes.ACC_ANNOTATION) != 0) {
        modifiers.add(Modifier.ANNOTATION);
    }

    if ((access & Opcodes.ACC_ENUM) != 0) {
        modifiers.add(Modifier.ENUM);
    }

    if ((access & Opcodes.ACC_VOLATILE) != 0) {
        modifiers.add(Modifier.VOLATILE);
    }

    if ((access & Opcodes.ACC_TRANSIENT) != 0) {
        modifiers.add(Modifier.TRANSIENT);
    }

    if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
        modifiers.add(Modifier.SYNCHRONIZED);
    }

    if ((access & Opcodes.ACC_BRIDGE) != 0) {
        modifiers.add(Modifier.BRIDGE);
    }

    if ((access & Opcodes.ACC_VARARGS) != 0) {
        modifiers.add(Modifier.VARARGS);
    }

    if ((access & Opcodes.ACC_NATIVE) != 0) {
        modifiers.add(Modifier.NATIVE);
    }

    if ((access & Opcodes.ACC_STRICT) != 0) {
        modifiers.add(Modifier.STRICT);
    }

    return modifiers;
}

From source file:instrumentation.InstrumentationClassAdapter.java

License:Open Source License

public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    MethodVisitor mv;//from  w  w w.  j  av  a  2  s.  c o m
    boolean sync = ((access & Opcodes.ACC_SYNCHRONIZED) != 0);
    boolean stat = ((access & Opcodes.ACC_STATIC) != 0);
    //boolean nat = ((access & Opcodes.ACC_NATIVE) != 0); 

    //remove sync modifier if method is not native
    if (sync && clTrans.canRemoveSyncModifier) {
        access ^= Opcodes.ACC_SYNCHRONIZED;
    }
    mv = cv.visitMethod(access, name, desc, signature, exceptions);
    if (name.equals("<init>")) {
        return mv;
    }
    if (mv != null) {
        mv = new InstrumentationMethodAdapter(mv, sync, stat);
    }

    return mv;
}

From source file:jaspex.transactifier.RemoveSyncClassVisitor.java

License:Open Source License

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    return cv.visitMethod(Options.REMOVESYNC ? access & ~Opcodes.ACC_SYNCHRONIZED : access, name, desc,
            signature, exceptions);//from   www .j a v  a  2s  .co m
}