List of usage examples for org.objectweb.asm Opcodes ACC_PRIVATE
int ACC_PRIVATE
To view the source code for org.objectweb.asm Opcodes ACC_PRIVATE.
Click Source Link
From source file:org.jacoco.core.runtime.ExecutionDataAccessTest.java
License:Open Source License
@Test public void testGenerateAccessCall() throws Exception { final boolean[] data = store.get(Long.valueOf(1234), "Sample", 5).getData(); final ClassWriter writer = new ClassWriter(0); writer.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "Sample", null, "java/lang/Object", new String[] { Type.getInternalName(Callable.class) }); // Constructor MethodVisitor mv = writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(Ljava/lang/Object;)V", null, new String[0]); mv.visitCode();/*from w w w.j a va 2s .c om*/ mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitFieldInsn(Opcodes.PUTFIELD, "Sample", "access", "Ljava/lang/Object;"); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); // call() mv = writer.visitMethod(Opcodes.ACC_PUBLIC, "call", "()Ljava/lang/Object;", null, new String[0]); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.GETFIELD, "Sample", "access", "Ljava/lang/Object;"); ExecutionDataAccess.generateAccessCall(1234, "Sample", 5, mv); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(6, 1); mv.visitEnd(); writer.visitField(Opcodes.ACC_PRIVATE, "access", "Ljava/lang/Object;", null, null); writer.visitEnd(); final TargetLoader loader = new TargetLoader("Sample", writer.toByteArray()); Callable<?> callable = (Callable<?>) loader.getTargetClass().getConstructor(Object.class) .newInstance(access); assertSame(data, callable.call()); }
From source file:org.jacoco.core.runtime.RuntimeDataTest.java
License:Open Source License
@Test public void testGenerateAccessCall() throws Exception { final boolean[] probes = data.getExecutionData(Long.valueOf(1234), "Sample", 5).getProbes(); final ClassWriter writer = new ClassWriter(0); writer.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "Sample", null, "java/lang/Object", new String[] { Type.getInternalName(Callable.class) }); // Constructor MethodVisitor mv = writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(Ljava/lang/Object;)V", null, new String[0]); mv.visitCode();//w w w . j a v a 2s . c o m mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitFieldInsn(Opcodes.PUTFIELD, "Sample", "access", "Ljava/lang/Object;"); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); // call() mv = writer.visitMethod(Opcodes.ACC_PUBLIC, "call", "()Ljava/lang/Object;", null, new String[0]); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.GETFIELD, "Sample", "access", "Ljava/lang/Object;"); RuntimeData.generateAccessCall(1234, "Sample", 5, mv); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(6, 1); mv.visitEnd(); writer.visitField(Opcodes.ACC_PRIVATE, "access", "Ljava/lang/Object;", null, null); writer.visitEnd(); final TargetLoader loader = new TargetLoader("Sample", writer.toByteArray()); Callable<?> callable = (Callable<?>) loader.getTargetClass().getConstructor(Object.class).newInstance(data); assertSame(probes, callable.call()); }
From source file:org.jacoco.playground.filter.DesignPrivDefCtorFilter.java
License:Open Source License
private boolean isPrivate(MethodNode method) { return (method.access & Opcodes.ACC_PRIVATE) != 0; }
From source file:org.jruby.compiler.impl.StandardInvocationCompiler.java
License:LGPL
public void invokeDynamicSelfNoBlockSpecificArity(String name, ArgumentsCallback argsCallback) { methodCompiler.loadThis();//w w w .j a v a 2 s . c om methodCompiler.loadThreadContext(); methodCompiler.loadSelf(); argsCallback.call(methodCompiler); String thisClass = methodCompiler.getScriptCompiler().getClassname(); String signature1; switch (argsCallback.getArity()) { case 1: signature1 = sig(IRubyObject.class, "L" + thisClass + ";", ThreadContext.class, IRubyObject.class, IRubyObject.class); break; case 2: signature1 = sig(IRubyObject.class, "L" + thisClass + ";", ThreadContext.class, IRubyObject.class, IRubyObject.class, IRubyObject.class); break; case 3: signature1 = sig(IRubyObject.class, "L" + thisClass + ";", ThreadContext.class, IRubyObject.class, IRubyObject.class, IRubyObject.class, IRubyObject.class); break; default: throw new RuntimeException("invalid arity for inline dyncall: " + argsCallback.getArity()); } String synthMethodName = methodCompiler.getNativeMethodName() + "$call" + methodCompiler.getScriptCompiler().getAndIncrementMethodIndex(); SkinnyMethodAdapter m2 = new SkinnyMethodAdapter(methodCompiler.getScriptCompiler().getClassVisitor(), Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC | Opcodes.ACC_SYNTHETIC, synthMethodName, signature1, null, null); method.invokestatic(thisClass, synthMethodName, signature1); SkinnyMethodAdapter oldMethod = methodCompiler.method; methodCompiler.method = m2; m2.start(); methodCompiler.getScriptCompiler().getCacheCompiler().cacheMethod(methodCompiler, name); m2.aload(1); // ThreadContext m2.aload(2); // receiver m2.aload(2); // receiver m2.invokeinterface(p(IRubyObject.class), "getMetaClass", sig(RubyClass.class)); m2.ldc(name); String signature2; switch (argsCallback.getArity()) { case 1: signature2 = sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, RubyModule.class, String.class, IRubyObject.class); m2.aload(3); break; case 2: signature2 = sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, RubyModule.class, String.class, IRubyObject.class, IRubyObject.class); m2.aload(3); m2.aload(4); break; case 3: signature2 = sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, RubyModule.class, String.class, IRubyObject.class, IRubyObject.class, IRubyObject.class); m2.aload(3); m2.aload(4); m2.aload(5); break; default: throw new RuntimeException("invalid arity for inline dyncall: " + argsCallback.getArity()); } m2.invokevirtual(p(DynamicMethod.class), "call", signature2); m2.areturn(); m2.end(); methodCompiler.method = oldMethod; }
From source file:org.jruby.javasupport.proxy.JavaProxyClassFactory.java
License:LGPL
private static ClassWriter beginProxyClass(final String targetClassName, final Class superClass, final Class[] interfaces) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); int access = Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_STATIC; String name = toInternalClassName(targetClassName); String signature = null;/* w ww. j av a 2s .c om*/ String supername = toInternalClassName(superClass); String[] interfaceNames = new String[interfaces.length + 1]; for (int i = 0; i < interfaces.length; i++) { interfaceNames[i] = toInternalClassName(interfaces[i]); } interfaceNames[interfaces.length] = toInternalClassName(InternalJavaProxy.class); // start class cw.visit(Opcodes.V1_3, access, name, signature, supername, interfaceNames); cw.visitField(Opcodes.ACC_PRIVATE, INVOCATION_HANDLER_FIELD_NAME, INVOCATION_HANDLER_TYPE.getDescriptor(), null, null).visitEnd(); cw.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, PROXY_CLASS_FIELD_NAME, PROXY_CLASS_TYPE.getDescriptor(), null, null).visitEnd(); return cw; }
From source file:org.jruby.javasupport.proxy.JavaProxyClassFactory.java
License:LGPL
private static GeneratorAdapter createClassInitializer(Type selfType, ClassVisitor cw) { GeneratorAdapter clazzInit;// ww w . jav a 2 s. co m clazzInit = new GeneratorAdapter(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, new org.objectweb.asm.commons.Method("<clinit>", Type.VOID_TYPE, EMPTY_TYPE_ARR), null, EMPTY_TYPE_ARR, cw); clazzInit.visitLdcInsn(selfType.getClassName()); clazzInit.invokeStatic(JAVA_LANG_CLASS_TYPE, CLASS_FORNAME_METHOD); clazzInit.invokeStatic(PROXY_HELPER_TYPE, HELPER_GET_PROXY_CLASS_METHOD); clazzInit.dup(); clazzInit.putStatic(selfType, PROXY_CLASS_FIELD_NAME, PROXY_CLASS_TYPE); return clazzInit; }
From source file:org.jruby.javasupport.proxy.JavaProxyClassFactory.java
License:LGPL
private static void generateProxyMethod(Type selfType, Type superType, ClassVisitor cw, GeneratorAdapter clazzInit, MethodData md) { if (!md.generateProxyMethod()) { return;/*w ww .j a v a 2 s . c o m*/ } org.objectweb.asm.commons.Method m = md.getMethod(); Type[] ex = toType(md.getExceptions()); String field_name = "__mth$" + md.getName() + md.scrambledSignature(); // create static private method field FieldVisitor fv = cw.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, field_name, PROXY_METHOD_TYPE.getDescriptor(), null, null); fv.visitEnd(); clazzInit.dup(); clazzInit.push(m.getName()); clazzInit.push(m.getDescriptor()); clazzInit.push(md.isImplemented()); clazzInit.invokeStatic(PROXY_HELPER_TYPE, PROXY_HELPER_GET_METHOD); clazzInit.putStatic(selfType, field_name, PROXY_METHOD_TYPE); org.objectweb.asm.commons.Method sm = new org.objectweb.asm.commons.Method("__super$" + m.getName(), m.getReturnType(), m.getArgumentTypes()); // // construct the proxy method // GeneratorAdapter ga = new GeneratorAdapter(Opcodes.ACC_PUBLIC, m, null, ex, cw); ga.loadThis(); ga.getField(selfType, INVOCATION_HANDLER_FIELD_NAME, INVOCATION_HANDLER_TYPE); // if the method is extending something, then we have // to test if the handler is initialized... if (md.isImplemented()) { ga.dup(); Label ok = ga.newLabel(); ga.ifNonNull(ok); ga.loadThis(); ga.loadArgs(); ga.invokeConstructor(superType, m); ga.returnValue(); ga.mark(ok); } ga.loadThis(); ga.getStatic(selfType, field_name, PROXY_METHOD_TYPE); if (m.getArgumentTypes().length == 0) { // load static empty array ga.getStatic(JAVA_PROXY_TYPE, "NO_ARGS", Type.getType(Object[].class)); } else { // box arguments ga.loadArgArray(); } Label before = ga.mark(); ga.invokeInterface(INVOCATION_HANDLER_TYPE, INVOCATION_HANDLER_INVOKE_METHOD); Label after = ga.mark(); ga.unbox(m.getReturnType()); ga.returnValue(); // this is a simple rethrow handler Label rethrow = ga.mark(); ga.visitInsn(Opcodes.ATHROW); for (int i = 0; i < ex.length; i++) { ga.visitTryCatchBlock(before, after, rethrow, ex[i].getInternalName()); } ga.visitTryCatchBlock(before, after, rethrow, "java/lang/Error"); ga.visitTryCatchBlock(before, after, rethrow, "java/lang/RuntimeException"); Type thr = Type.getType(Throwable.class); Label handler = ga.mark(); Type udt = Type.getType(UndeclaredThrowableException.class); int loc = ga.newLocal(thr); ga.storeLocal(loc, thr); ga.newInstance(udt); ga.dup(); ga.loadLocal(loc, thr); ga.invokeConstructor(udt, org.objectweb.asm.commons.Method.getMethod("void <init>(java.lang.Throwable)")); ga.throwException(); ga.visitTryCatchBlock(before, after, handler, "java/lang/Throwable"); ga.endMethod(); // // construct the super-proxy method // if (md.isImplemented()) { GeneratorAdapter ga2 = new GeneratorAdapter(Opcodes.ACC_PUBLIC, sm, null, ex, cw); ga2.loadThis(); ga2.loadArgs(); ga2.invokeConstructor(superType, m); ga2.returnValue(); ga2.endMethod(); } }
From source file:org.kantega.notsoserial.ReadObjectClassVisitor.java
License:Apache License
@Override public void visitEnd() { if (!isInterface() && isSerializable() && !hasReadObject) { MethodVisitor mv = super.visitMethod(Opcodes.ACC_PRIVATE, "readObject", readObjectDescription, null, readObjectExceptions);/* ww w . j a v a 2 s. c om*/ mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLdcInsn(className); mv.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getType(NotSoSerialClassFileTransformer.class).getInternalName(), onReadObjectCallbackMethod, "(Ljava/lang/String;)V", false); Label l1 = new Label(); mv.visitLabel(l1); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/ObjectInputStream", "defaultReadObject", "()V", false); Label l2 = new Label(); mv.visitLabel(l2); mv.visitInsn(Opcodes.RETURN); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLocalVariable("this", Type.getObjectType(className).getDescriptor(), classSignature, l0, l3, 0); mv.visitLocalVariable("stream", Type.getType(ObjectInputStream.class).getDescriptor(), null, l0, l3, 1); mv.visitMaxs(1, 2); mv.visitEnd(); } super.visitEnd(); }
From source file:org.mbte.groovypp.compiler.AccessibilityCheck.java
License:Apache License
public static boolean isAccessible(int modifiers, ClassNode declaringClass, ClassNode placeClass, ClassNode accessType) {/* ww w . j a va 2 s.co m*/ if (accessType != null && !isAccessible(accessType.getModifiers(), accessType.getOuterClass(), placeClass, null)) return false; if (declaringClass == null) return true; if ((modifiers & Opcodes.ACC_PRIVATE) != 0) { return getToplevelClass(declaringClass).equals(getToplevelClass(placeClass)); } else if ((modifiers & Opcodes.ACC_PROTECTED) != 0) { if (samePackage(declaringClass, placeClass)) return true; while (placeClass != null) { if (placeClass.isDerivedFrom(declaringClass)) { return accessType == null || accessType.isDerivedFrom(placeClass); } if ((placeClass.getModifiers() & Opcodes.ACC_STATIC) != 0) break; placeClass = placeClass.getOuterClass(); } return false; } else if ((modifiers & Opcodes.ACC_PUBLIC) != 0) { return true; } // package local if (!samePackage(declaringClass, placeClass)) return false; // check the entire inheritance chain. ClassNode clazz = null; if (accessType != null) { clazz = accessType; } else { while (placeClass != null) { if (placeClass.isDerivedFrom(declaringClass)) { clazz = placeClass; break; } if ((placeClass.getModifiers() & Opcodes.ACC_STATIC) != 0) break; placeClass = placeClass.getOuterClass(); } } while (clazz != null && !clazz.equals(declaringClass)) { if (!samePackage(declaringClass, clazz)) return false; clazz = clazz.getSuperClass(); } return true; }
From source file:org.mbte.groovypp.compiler.bytecode.PropertyUtil.java
License:Apache License
public static BytecodeExpr createGetProperty(final PropertyExpression exp, final CompilerTransformer compiler, String propName, ClassNode type, final BytecodeExpr object, Object prop) { if (prop instanceof MethodNode) { MethodNode method = (MethodNode) prop; if ((method.getModifiers() & Opcodes.ACC_PRIVATE) != 0 && method.getDeclaringClass() != compiler.classNode) { MethodNode delegate = compiler.context.getMethodDelegate(method); new ResolvedGetterBytecodeExpr(exp, delegate, object, compiler, propName, type); }/*from www . ja v a 2s.co m*/ return new ResolvedGetterBytecodeExpr(exp, method, object, compiler, propName, type); } if (prop instanceof PropertyNode) { return new ResolvedPropertyBytecodeExpr(exp, (PropertyNode) prop, object, null, compiler); } if (prop instanceof FieldNode) { FieldNode field = (FieldNode) prop; if ((field.getModifiers() & Opcodes.ACC_PRIVATE) != 0 && field.getDeclaringClass() != compiler.classNode && AccessibilityCheck.isAccessible(field.getModifiers(), field.getDeclaringClass(), compiler.classNode, null)) { MethodNode getter = compiler.context.getFieldGetter(field); return new ResolvedGetterBytecodeExpr.Accessor(field, exp, getter, object, compiler, type); } return new ResolvedFieldBytecodeExpr(exp, field, object, null, compiler); } if (object == null && "this".equals(propName)) { ClassNode curr = compiler.classNode; while (curr != null) { final FieldNode field = curr.getDeclaredField("this$0"); if (field == null) break; compiler.context.setOuterClassInstanceUsed(curr); curr = field.getType(); if (curr.equals(exp.getObjectExpression().getType())) { return new BytecodeExpr(exp, curr) { protected void compile(MethodVisitor mv) { ClassNode cur = compiler.classNode; mv.visitVarInsn(ALOAD, 0); while (!cur.equals(exp.getObjectExpression().getType())) { final FieldNode field = cur.getDeclaredField("this$0"); mv.visitFieldInsn(GETFIELD, BytecodeHelper.getClassInternalName(cur), "this$0", BytecodeHelper.getTypeDescription(field.getType())); cur = field.getType(); } } }; } } return null; } if (object != null && object.getType().isArray() && "length".equals(propName)) { return new BytecodeExpr(exp, ClassHelper.int_TYPE) { protected void compile(MethodVisitor mv) { object.visit(mv); mv.visitInsn(ARRAYLENGTH); } }; } if (prop == GET_MAP) { return new ResolvedLeftMapExpr(exp, object, propName); } if (prop instanceof GetUnresolved) { return new ResolvedLeftUnresolvedPropExpr(exp, object, propName, compiler, (GetUnresolved) prop); } final Expression anchor = exp.isImplicitThis() ? exp : exp.getProperty(); return dynamicOrFail(anchor, compiler, propName, type, object, null, "find"); }