Example usage for org.objectweb.asm Opcodes ACC_PRIVATE

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

Introduction

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

Prototype

int ACC_PRIVATE

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

Click Source Link

Usage

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");
}