ClassAnalyzer.java
1/*******************************************************************************
2 * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Marc R. Hoffmann - initial API and implementation
10 *
11 *******************************************************************************/
12package org.jacoco.core.instr;
13
14import org.jacoco.core.data.IClassStructureVisitor;
15import org.objectweb.asm.AnnotationVisitor;
16import org.objectweb.asm.Attribute;
17import org.objectweb.asm.FieldVisitor;
18import org.objectweb.asm.Opcodes;
19
20/**
21 * Analyzes the structure of a class.
22 *
23 * @author Marc R. Hoffmann
24 * @version 0.4.1.20101007204400
25 */
26class ClassAnalyzer implements IBlockClassVisitor {
27
28 private final IClassStructureVisitor structureVisitor;
29
30 /**
31 * Creates a new analyzer that reports to the given
32 * {@link IClassStructureVisitor} instance.
33 *
34 * @param structureVisitor
35 * consumer for class structure output
36 */
37 public ClassAnalyzer(final IClassStructureVisitor structureVisitor) {
38 this.structureVisitor = structureVisitor;
39 }
40
41 public void visit(final int version, final int access, final String name,
42 final String signature, final String superName,
43 final String[] interfaces) {
44 structureVisitor.visit(name, signature, superName, interfaces);
45 }
46
47 public void visitSource(final String source, final String debug) {
48 if (source != null) {
49 structureVisitor.visitSourceFile(source);
50 }
51 }
52
53 public IBlockMethodVisitor visitMethod(final int access, final String name,
54 final String desc, final String signature, final String[] exceptions) {
55
56 // TODO: Use filter hook
57 if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
58 return null;
59 }
60
61 return new MethodAnalyzer(structureVisitor.visitMethodStructure(name,
62 desc, signature));
63 }
64
65 public void visitEnd() {
66 structureVisitor.visitEnd();
67 }
68
69 // Nothing to do here:
70
71 public void visitTotalProbeCount(final int count) {
72 }
73
74 public AnnotationVisitor visitAnnotation(final String desc,
75 final boolean visible) {
76 return null;
77 }
78
79 public void visitAttribute(final Attribute attr) {
80 }
81
82 public FieldVisitor visitField(final int access, final String name,
83 final String desc, final String signature, final Object value) {
84 return null;
85 }
86
87 public void visitInnerClass(final String name, final String outerName,
88 final String innerName, final int access) {
89 }
90
91 public void visitOuterClass(final String owner, final String name,
92 final String desc) {
93 }
94
95}