Example usage for org.objectweb.asm ClassVisitor ClassVisitor

List of usage examples for org.objectweb.asm ClassVisitor ClassVisitor

Introduction

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

Prototype

public ClassVisitor(final int api) 

Source Link

Document

Constructs a new ClassVisitor .

Usage

From source file:org.codehaus.mojo.animal_sniffer.ClassListBuilder.java

License:Open Source License

protected void process(String name, InputStream image) throws IOException {
    try {//w w w  .jav a  2 s.c  o  m
        ClassReader cr = new ClassReader(image);
        cr.accept(new ClassVisitor(Opcodes.ASM5) {
            public void visit(int version, int access, String name, String signature, String superName,
                    String[] interfaces) {
                packages.add(name.replace('/', '.'));
            }
        }, 0);
    } catch (ArrayIndexOutOfBoundsException e) {
        logger.error("Bad class file " + name);
        // MANIMALSNIFFER-9 it is a pity that ASM does not throw a nicer error on encountering a malformed
        // class file.
        IOException ioException = new IOException("Bad class file " + name);
        ioException.initCause(e);
        throw ioException;
    }
}

From source file:org.eclipse.ocl.examples.codegen.asm5.ASM5JavaAnnotationReader.java

License:Open Source License

public @Nullable Boolean getIsNonNull(@NonNull Method method) {
    final String className = method.getDeclaringClass().getName();
    final String requiredDesc = getMethodKey(className, method.getName(), Type.getMethodDescriptor(method));
    Map<@NonNull Integer, @Nullable Boolean> typeref2state = desc2typerefValue2state.get(requiredDesc);
    Integer returnTypeReference = TypeReference.newTypeReference(TypeReference.METHOD_RETURN).getValue();
    if (typeref2state != null) {
        return typeref2state.get(returnTypeReference);
    }//from  www . j ava2  s.  c  om
    if (!readClasses.add(className)) {
        return null;
    }
    //      System.out.println("getIsNonNull: " + requiredDesc + " " + Integer.toHexString(returnTypeReference));
    InputStream classStream = null;
    try {
        final int flags = ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE;
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        String classFileName = className.replace('.', '/') + ".class";
        classStream = contextClassLoader.getResourceAsStream(classFileName);
        final ClassReader cr = new ClassReader(classStream) {

            @Override
            public void accept(ClassVisitor classVisitor, int flags) {
                super.accept(classVisitor, flags);
            }

            @Override
            public void accept(ClassVisitor classVisitor, Attribute[] attrs, int flags) {
                super.accept(classVisitor, attrs, flags);
            }

        };
        ClassVisitor cv = new ClassVisitor(Opcodes.ASM5) {
            @Override
            public void visit(int version, int access, String name, String signature, String superName,
                    String[] interfaces) {
            }

            @Override
            public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
                return null;
            }

            @Override
            public void visitAttribute(Attribute attr) {
            }

            @Override
            public void visitEnd() {
            }

            @Override
            public FieldVisitor visitField(int access, String name, String desc, String signature,
                    Object value) {
                return null;
            }

            @Override
            public void visitInnerClass(String name, String outerName, String innerName, int access) {
            }

            @Override
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {
                final String methodDesc = getMethodKey(className, name, desc);// + " " + signature;
                //               System.out.println("  ClassVisitor.visitMethod: " + methodDesc);
                final HashMap<@NonNull Integer, @Nullable Boolean> typerefValue2state = new HashMap<@NonNull Integer, @Nullable Boolean>();
                desc2typerefValue2state.put(methodDesc, typerefValue2state);
                return new MethodVisitor(Opcodes.ASM5) {
                    @Override
                    public AnnotationVisitor visitAnnotation(String annotationDesc, boolean visible) {
                        return null;
                    }

                    @Override
                    public AnnotationVisitor visitAnnotationDefault() {
                        return null;
                    }

                    @Override
                    public void visitAttribute(Attribute attr) {
                    }

                    @Override
                    public void visitCode() {
                    }

                    @Override
                    public void visitEnd() {
                    }

                    @Override
                    public void visitFieldInsn(int opcode, String owner, String name, String desc) {
                    }

                    @Override
                    public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) {
                    }

                    @Override
                    public void visitIincInsn(int var, int increment) {
                    }

                    @Override
                    public void visitInsn(int opcode) {
                    }

                    @Override
                    public AnnotationVisitor visitInsnAnnotation(int typeRef, TypePath typePath, String desc,
                            boolean visible) {
                        return null;
                    }

                    @Override
                    public void visitIntInsn(int opcode, int operand) {
                    }

                    @Override
                    public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
                            Object... bsmArgs) {
                    }

                    @Override
                    public void visitJumpInsn(int opcode, Label label) {
                    }

                    @Override
                    public void visitLabel(Label label) {
                    }

                    @Override
                    public void visitLdcInsn(Object cst) {
                    }

                    @Override
                    public void visitLineNumber(int line, Label start) {
                    }

                    @Override
                    public void visitLocalVariable(String name, String desc, String signature, Label start,
                            Label end, int index) {
                    }

                    @Override
                    public AnnotationVisitor visitLocalVariableAnnotation(int typeRef, TypePath typePath,
                            Label[] start, Label[] end, int[] index, String desc, boolean visible) {
                        return null;
                    }

                    @Override
                    public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
                    }

                    @Override
                    public void visitMaxs(int maxStack, int maxLocals) {
                    }

                    @Override
                    public void visitMethodInsn(int opcode, String owner, String name, String desc) {
                    }

                    @Override
                    public void visitMethodInsn(int opcode, String owner, String name, String desc,
                            boolean itf) {
                    }

                    @Override
                    public void visitMultiANewArrayInsn(String desc, int dims) {
                    }

                    @Override
                    public void visitParameter(String name, int access) {
                    }

                    @Override
                    public AnnotationVisitor visitParameterAnnotation(int parameter, String desc,
                            boolean visible) {
                        return null;
                    }

                    @Override
                    public void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels) {
                    }

                    @Override
                    public AnnotationVisitor visitTryCatchAnnotation(int typeRef, TypePath typePath,
                            String desc, boolean visible) {
                        return null;
                    }

                    @Override
                    public void visitTryCatchBlock(Label start, Label end, Label handler, String type) {
                    }

                    @Override
                    public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc,
                            boolean visible) {
                        //                     System.out.println("    MethodVisitor-TypeAnnotation:" + Integer.toHexString(typeRef) + " " + typePath + " " + desc + " " + visible);
                        //                     TypeReference typeReference = new TypeReference(typeRef);
                        //                     System.out.println("    : " + Integer.toHexString(typeReference.getValue()) + ":" + typeReference.getSort() + ":" + typeReference.getTypeParameterIndex());
                        if (desc.equals(nonNullDesc)) {
                            //                        System.out.println("    MethodVisitor-TypeAnnotation:" + Integer.toHexString(typeRef) + " " + typePath + " " + desc);
                            typerefValue2state.put(typeRef, true);
                        } else if (desc.equals(nullableDesc)) {
                            //                        System.out.println("    MethodVisitor-TypeAnnotation:" + Integer.toHexString(typeRef) + " " + typePath + " " + desc);
                            typerefValue2state.put(typeRef, false);
                        }
                        return null;
                    }

                    @Override
                    public void visitTypeInsn(int opcode, String type) {
                    }

                    @Override
                    public void visitVarInsn(int opcode, int var) {
                    }
                };
            }

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

            @Override
            public void visitSource(String source, String debug) {
            }

            @Override
            public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc,
                    boolean visible) {
                //               System.out.println("  ClassVisitor-TypeAnnotation:" + typeRef + " " + typePath + " " + desc + " " + visible);
                return null;
            }
        };
        cr.accept(cv, flags);
    } catch (IOException e) {
        logger.error("Failed to read '" + className + "'", e);
    } finally {
        if (classStream != null) {
            try {
                classStream.close();
            } catch (IOException e) {
            }
        }
    }
    typeref2state = desc2typerefValue2state.get(requiredDesc);
    if (typeref2state == null) {
        return null;
    }
    Boolean state = typeref2state.get(returnTypeReference);
    //      System.out.println("  => " + state);
    return state;
}

From source file:org.ehcache.impl.internal.store.offheap.AssertingOffHeapValueHolder.java

License:Apache License

private static boolean isLockedInFrame(StackTraceElement ste) {
    try {//from ww  w .j  a v  a 2  s .c om
        ClassReader reader = new ClassReader(ste.getClassName());

        NavigableMap<Integer, Integer> lockLevels = new TreeMap<>();

        reader.accept(new ClassVisitor(ASM6) {
            @Override
            public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
                    String[] exceptions) {
                if (ste.getMethodName().equals(name)) {
                    return new InstructionAdapter(ASM6, new MethodVisitor(ASM6) {
                    }) {

                        private final Map<Label, Integer> levels = new HashMap<>();

                        private int lockLevel;

                        @Override
                        public void invokeinterface(String owner, String name, String descriptor) {
                            if (LOCK_CLASS.equals(getObjectType(owner))) {
                                if (LOCK_METHOD.equals(new Method(name, descriptor))) {
                                    lockLevel++;
                                } else if (UNLOCK_METHOD.equals(new Method(name, descriptor))) {
                                    lockLevel--;
                                }
                            }
                        }

                        @Override
                        public void visitJumpInsn(int opcode, Label label) {
                            levels.merge(label, lockLevel, Integer::max);
                        }

                        @Override
                        public void visitLabel(Label label) {
                            lockLevel = levels.merge(label, lockLevel, Integer::max);
                        }

                        @Override
                        public void visitLineNumber(int line, Label start) {
                            lockLevels.merge(line, levels.get(start), Integer::max);
                        }
                    };
                } else {
                    return null;
                }
            }
        }, 0);

        Map.Entry<Integer, Integer> entry = lockLevels.floorEntry(ste.getLineNumber());

        return entry.getValue() > 0;
    } catch (IOException e) {
        throw new AssertionError(e);
    }
}

From source file:org.fluidity.composition.maven.AbstractAnnotationProcessorMojo.java

License:Apache License

@SuppressWarnings({ "ResultOfMethodCallIgnored", "MismatchedQueryAndUpdateOfCollection" })
private void processClasses(final Logger log, final ClassLoader loader, final File classesDirectory,
        final Map<String, Map<String, Collection<String>>> serviceProviderMap,
        final Map<String, Collection<String>> componentMap,
        final Map<String, Collection<String>> componentGroupMap)
        throws IOException, ClassNotFoundException, MojoExecutionException {
    final DirectoryScanner scanner = new DirectoryScanner();

    scanner.setBasedir(classesDirectory);
    scanner.setIncludes(new String[] { "**/*.class" });

    scanner.addDefaultExcludes();/*from   www.java  2 s  .  c om*/
    scanner.scan();

    final ClassRepository repository = new ClassRepository(loader);

    final Set<String> publicApis = new HashSet<>();
    final Map<String, Collection<String>> serviceProviders = new HashMap<>();

    for (final String fileName : scanner.getIncludedFiles()) {
        final String className = fileName.substring(0, fileName.length() - ClassLoaders.CLASS_SUFFIX.length())
                .replace(File.separatorChar, '.');
        final String componentPackage = className.substring(0, className.lastIndexOf(".") + 1);
        final String bindingClassName = componentPackage + GENERATED_PACKAGE_BINDINGS + projectName;

        if (className.equals(bindingClassName)) {
            new File(classesDirectory, fileName).delete();
        } else {
            final ClassReader classData = repository.reader(className);
            assert classData != null : className;

            final Map<String, Set<String>> serviceProviderApis = new HashMap<>();

            class ClassFlags {
                boolean ignored;
                boolean component;
                boolean group;
                boolean dependent;
                Type scope;
            }

            final ClassFlags flags = new ClassFlags();

            final ClassProcessor processor = new ClassProcessor() {
                public ClassVisitor visitor(final ClassReader reader) {
                    return new ClassVisitor(ASM5) {
                        private final Type serviceProviderType = Type.getType(ServiceProvider.class);
                        private final Type componentType = Type.getType(Component.class);
                        private final Type componentGroupType = Type.getType(ComponentGroup.class);

                        private final String name = ClassReaders.internalName(className);
                        private boolean original;

                        @Override
                        public void visit(final int version, final int access, final String name,
                                final String signature, final String superName, final String[] interfaces) {
                            original = this.name.equals(name);
                            super.visit(version, access, name, signature, superName, interfaces);
                        }

                        @Override
                        public FieldVisitor visitField(final int access, final String name, final String desc,
                                final String signature, final Object value) {
                            if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
                                flags.dependent = name.startsWith("this$");
                            }

                            return super.visitField(access, name, desc, signature, value);
                        }

                        @Override
                        public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
                            final Type type = Type.getType(desc);

                            if (serviceProviderType.equals(type)) {
                                return new ServiceProviderProcessor(repository, reader, processor -> {
                                    final String _type = processor.type();

                                    Set<String> list = serviceProviderApis.get(_type);
                                    if (list == null) {
                                        serviceProviderApis.put(_type, list = new HashSet<>());
                                    }

                                    list.addAll(processor.apiSet());

                                    if (_type.equals(ServiceProviders.TYPE)) {
                                        publicApis.addAll(list);
                                    }
                                });
                            } else if (componentType.equals(type)) {
                                return new ComponentProcessor(processor -> {
                                    if (original) {
                                        flags.ignored = !processor.isAutomatic();
                                        flags.scope = processor.scope();
                                    }

                                    flags.component = !ClassReaders.isAbstract(classData)
                                            && !ClassReaders.isInterface(classData);
                                });
                            } else if (componentGroupType.equals(type)) {
                                return new ComponentProcessor(processor -> flags.group = !flags.dependent);
                            } else {
                                return null;
                            }
                        }
                    };
                }

                public boolean run(final ClassReader classData) throws IOException, MojoExecutionException {
                    try {
                        classData.accept(visitor(classData),
                                ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE);

                        // components and service providers are always concrete classes that can be instantiated on their own
                        final boolean instantiable = !ClassReaders.isAbstract(classData);

                        if (instantiable) {
                            processAncestry(this, classData, repository);
                        }

                        return instantiable;
                    } catch (final Exceptions.Wrapper e) {
                        throw e.rethrow(IOException.class).rethrow(MojoExecutionException.class);
                    }
                }
            };

            if (processClass(classData, processor)) {
                final Map<String, Collection<String>> providerMap = providerMap(PackageBindings.SERVICE_TYPE,
                        serviceProviderMap);
                final String externalName = ClassReaders.externalName(classData);

                if (flags.scope != null) {
                    if (flags.ignored) {
                        log.warn("Superfluous 'automatic = false' setting for scoped component %s",
                                externalName);
                    }

                    addServiceProvider(providerMap(Component.SCOPE, serviceProviderMap),
                            flags.scope.getClassName(), externalName);
                } else if (!flags.ignored) {
                    if (flags.component) {
                        addBinding(bindingClassName, externalName, providerMap, componentMap);
                    }

                    if (flags.group) {
                        addBinding(bindingClassName, externalName, providerMap, componentGroupMap);
                    }
                }

                if (!flags.dependent) {
                    for (final Map.Entry<String, Set<String>> entry : serviceProviderApis.entrySet()) {
                        final Set<String> providerNames = entry.getValue();

                        addServiceProviders(className, providerNames,
                                providerMap(entry.getKey(), serviceProviderMap));

                        for (final String api : providerNames) {
                            addServiceProvider(serviceProviders, api, className);
                        }
                    }
                }
            }
        }
    }

    for (final String className : publicApis) {
        final Collection<String> providers = serviceProviders.get(className);

        if (providers != null) {
            for (final String provider : providers) {
                makePublic(provider, classesDirectory, repository);
            }
        } else {
            assert ClassReaders.isAbstract(repository.reader(ClassReaders.externalName(className))) : className;
        }
    }
}

From source file:org.gradle.language.base.internal.tasks.apigen.ApiStubGenerator.java

License:Apache License

private boolean belongsToApi(ClassReader cr) {
    final AtomicBoolean isAPI = new AtomicBoolean();
    cr.accept(new ClassVisitor(Opcodes.ASM5) {
        @Override//  w  w  w .  j  av a 2s  .  c o  m
        public void visit(int version, int access, String name, String signature, String superName,
                String[] interfaces) {
            String className = toClassName(name);
            isAPI.set(memberOfApiChecker.belongsToApi(className) && isPublicAPI(access)
                    && !AIC_LOCAL_CLASS_PATTERN.matcher(name).matches());
        }
    }, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG);
    return isAPI.get();
}

From source file:org.gridgain.grid.kernal.processors.hadoop.GridHadoopClassLoader.java

License:Open Source License

/**
 * @param clsName Class name.//w  ww.  jav a  2  s.com
 * @return {@code true} If the class has external dependencies.
 */
boolean hasExternalDependencies(final String clsName, final Set<String> visited) {
    if (isHadoop(clsName)) // Hadoop must not be in classpath but Idea sucks, so filtering explicitly as external.
        return true;

    // Try to get from parent to check if the type accessible.
    InputStream in = loadClassBytes(getParent(), clsName);

    if (in == null) // The class is external itself, it must be loaded from this class loader.
        return true;

    if (!isGgfsOrGgHadoop(clsName)) // Other classes should not have external dependencies.
        return false;

    final ClassReader rdr;

    try {
        rdr = new ClassReader(in);
    } catch (IOException e) {
        throw new RuntimeException("Failed to read class: " + clsName, e);
    }

    visited.add(clsName);

    final AtomicBoolean hasDeps = new AtomicBoolean();

    rdr.accept(new ClassVisitor(Opcodes.ASM4) {
        AnnotationVisitor av = new AnnotationVisitor(Opcodes.ASM4) {
            // TODO
        };

        FieldVisitor fv = new FieldVisitor(Opcodes.ASM4) {
            @Override
            public AnnotationVisitor visitAnnotation(String desc, boolean b) {
                onType(desc);

                return av;
            }
        };

        MethodVisitor mv = new MethodVisitor(Opcodes.ASM4) {
            @Override
            public AnnotationVisitor visitAnnotation(String desc, boolean b) {
                onType(desc);

                return av;
            }

            @Override
            public AnnotationVisitor visitParameterAnnotation(int i, String desc, boolean b) {
                onType(desc);

                return av;
            }

            @Override
            public AnnotationVisitor visitAnnotationDefault() {
                return av;
            }

            @Override
            public void visitFieldInsn(int i, String owner, String name, String desc) {
                onType(owner);
                onType(desc);
            }

            @Override
            public void visitFrame(int i, int i2, Object[] locTypes, int i3, Object[] stackTypes) {
                for (Object o : locTypes) {
                    if (o instanceof String)
                        onType((String) o);
                }

                for (Object o : stackTypes) {
                    if (o instanceof String)
                        onType((String) o);
                }
            }

            @Override
            public void visitLocalVariable(String name, String desc, String signature, Label lb, Label lb2,
                    int i) {
                onType(desc);
            }

            @Override
            public void visitMethodInsn(int i, String owner, String name, String desc) {
                onType(owner);
            }

            @Override
            public void visitMultiANewArrayInsn(String desc, int dim) {
                onType(desc);
            }

            @Override
            public void visitTryCatchBlock(Label lb, Label lb2, Label lb3, String e) {
                onType(e);
            }
        };

        void onClass(String depCls) {
            assert validateClassName(depCls) : depCls;

            if (depCls.startsWith("java.")) // Filter out platform classes.
                return;

            if (visited.contains(depCls))
                return;

            Boolean res = cache.get(depCls);

            if (res == Boolean.TRUE || (res == null && hasExternalDependencies(depCls, visited)))
                hasDeps.set(true);
        }

        void onType(String type) {
            if (type == null)
                return;

            int off = 0;

            while (type.charAt(off) == '[')
                off++; // Handle arrays.

            if (off != 0)
                type = type.substring(off);

            if (type.length() == 1)
                return; // Get rid of primitives.

            if (type.charAt(type.length() - 1) == ';') {
                assert type.charAt(0) == 'L' : type;

                type = type.substring(1, type.length() - 1);
            }

            type = type.replace('/', '.');

            onClass(type);
        }

        @Override
        public void visit(int i, int i2, String name, String signature, String superName, String[] ifaces) {
            onType(superName);

            if (ifaces != null) {
                for (String iface : ifaces)
                    onType(iface);
            }
        }

        @Override
        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
            onType(desc);

            return av;
        }

        @Override
        public void visitInnerClass(String name, String outerName, String innerName, int i) {
            onType(name);
        }

        @Override
        public FieldVisitor visitField(int i, String name, String desc, String signature, Object val) {
            onType(desc);

            return fv;
        }

        @Override
        public MethodVisitor visitMethod(int i, String name, String desc, String signature,
                String[] exceptions) {
            if (exceptions != null) {
                for (String e : exceptions)
                    onType(e);
            }

            return mv;
        }
    }, 0);

    if (hasDeps.get()) // We already know that we have dependencies, no need to check parent.
        return true;

    // Here we are known to not have any dependencies but possibly we have a parent which have them.
    int idx = clsName.lastIndexOf('$');

    if (idx == -1) // No parent class.
        return false;

    String parentCls = clsName.substring(0, idx);

    if (visited.contains(parentCls))
        return false;

    Boolean res = cache.get(parentCls);

    if (res == null)
        res = hasExternalDependencies(parentCls, visited);

    return res;
}

From source file:org.h2.test.unit.TestKeywords.java

License:Mozilla Public License

@Override
public void test() throws Exception {
    final HashSet<String> set = new HashSet<>();
    ClassReader r = new ClassReader(Parser.class.getResourceAsStream("Parser.class"));
    r.accept(new ClassVisitor(Opcodes.ASM6) {
        @Override/*from   w w w.ja v a 2  s . co  m*/
        public FieldVisitor visitField(int access, String name, String descriptor, String signature,
                Object value) {
            add(set, value);
            return null;
        }

        @Override
        public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
                String[] exceptions) {
            return new MethodVisitor(Opcodes.ASM6) {
                @Override
                public void visitLdcInsn(Object value) {
                    add(set, value);
                }
            };
        }

        void add(HashSet<String> set, Object value) {
            if (!(value instanceof String)) {
                return;
            }
            String s = (String) value;
            int l = s.length();
            if (l == 0 || ParserUtil.getSaveTokenType(s, false, 0, l, true) != ParserUtil.IDENTIFIER) {
                return;
            }
            for (int i = 0; i < l; i++) {
                char ch = s.charAt(i);
                if ((ch < 'A' || ch > 'Z') && ch != '_') {
                    return;
                }
            }
            set.add(s);
        }
    }, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
    try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:keywords")) {
        Statement stat = conn.createStatement();
        for (String s : set) {
            // _ROWID_ is a special virtual column
            String column = s.equals("_ROWID_") ? "C" : s;
            try {
                stat.execute("CREATE TABLE " + s + '(' + column + " INT)");
                stat.execute("INSERT INTO " + s + '(' + column + ") VALUES (10)");
                try (ResultSet rs = stat.executeQuery("SELECT " + column + " FROM " + s)) {
                    assertTrue(rs.next());
                    assertEquals(10, rs.getInt(1));
                    assertFalse(rs.next());
                }
            } catch (Throwable t) {
                throw new AssertionError(s + " cannot be used as identifier.", t);
            }
        }
    }
}

From source file:org.jacoco.cli.internal.commands.InstrumentTest.java

License:Open Source License

private void assertInstrumented(File classfile) throws IOException {
    InputStream in = new FileInputStream(classfile);
    final ClassReader reader = InstrSupport.classReaderFor(InputStreams.readFully(in));
    in.close();/*from w  w  w . j  a v  a 2  s .c  o  m*/
    final Set<String> methods = new HashSet<String>();
    reader.accept(new ClassVisitor(InstrSupport.ASM_API_VERSION) {
        @Override
        public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
                String[] exceptions) {
            methods.add(name);
            return null;
        }
    }, 0);
    assertTrue(methods.contains("$jacocoInit"));
}

From source file:org.jacoco.core.instr.ClassFileVersionsTest.java

License:Open Source License

private void assertFrames(byte[] source, final boolean expected) {
    InstrSupport.classReaderFor(source).accept(new ClassVisitor(InstrSupport.ASM_API_VERSION) {

        @Override/*from w w w .j  av  a2 s  .c  o m*/
        public MethodVisitor visitMethod(int access, String name, final String desc, String signature,
                String[] exceptions) {
            return new MethodVisitor(InstrSupport.ASM_API_VERSION) {
                boolean frames = false;

                @Override
                public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) {
                    frames = true;
                }

                @Override
                public void visitEnd() {
                    if (CondyProbeArrayStrategy.B_DESC.equals(desc)) {
                        assertFalse("CondyProbeArrayStrategy does not need frames", frames);
                    } else {
                        assertEquals(Boolean.valueOf(expected), Boolean.valueOf(frames));
                    }
                }
            };
        }
    }, 0);
}

From source file:org.jacoco.core.internal.instr.ClassInstrumenterTest.java

License:Open Source License

@Before
public void setup() {
    runtime = new LoggerRuntime();
    instrumenter = new ClassInstrumenter(123, runtime, new ClassVisitor(Opcodes.ASM4) {
    });//w  w w.j  av a 2s .  co m
}