List of usage examples for org.objectweb.asm Opcodes ACC_SYNCHRONIZED
int ACC_SYNCHRONIZED
To view the source code for org.objectweb.asm Opcodes ACC_SYNCHRONIZED.
Click Source Link
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 }