aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2012-09-09 22:08:58 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2012-09-09 22:08:58 +0200
commit32e3a05444847ecde19cef575e57fec51c85d085 (patch)
treeee7d032bbaa2347ac253f02d6fde63a55db093a3 /org.jacoco.core/src/org/jacoco/core/internal/analysis
parentb5f62d692bea12eea4ef449598a73b5b7cff8d3d (diff)
downloadjacoco-32e3a05444847ecde19cef575e57fec51c85d085.tar.gz
Migrate to ASM 4.0, support INVOKEDYNAMIC.
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis')
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java48
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java83
2 files changed, 41 insertions, 90 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java
index ce008f2f..b1c231c7 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java
@@ -12,17 +12,14 @@
package org.jacoco.core.internal.analysis;
import org.jacoco.core.analysis.IMethodCoverage;
-import org.jacoco.core.internal.flow.IClassProbesVisitor;
-import org.jacoco.core.internal.flow.IMethodProbesVisitor;
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
+import org.jacoco.core.internal.flow.ClassProbesVisitor;
+import org.jacoco.core.internal.flow.MethodProbesVisitor;
import org.objectweb.asm.Opcodes;
/**
* Analyzes the structure of a class.
*/
-public class ClassAnalyzer implements IClassProbesVisitor {
+public class ClassAnalyzer extends ClassProbesVisitor {
private final long classid;
private final boolean executionData[];
@@ -57,6 +54,7 @@ public class ClassAnalyzer implements IClassProbesVisitor {
return coverage;
}
+ @Override
public void visit(final int version, final int access, final String name,
final String signature, final String superName,
final String[] interfaces) {
@@ -65,13 +63,14 @@ public class ClassAnalyzer implements IClassProbesVisitor {
stringPool.get(interfaces));
}
+ @Override
public void visitSource(final String source, final String debug) {
this.coverage.setSourceFileName(stringPool.get(source));
}
- public IMethodProbesVisitor visitMethod(final int access,
- final String name, final String desc, final String signature,
- final String[] exceptions) {
+ @Override
+ public MethodProbesVisitor visitMethod(final int access, final String name,
+ final String desc, final String signature, final String[] exceptions) {
// TODO: Use filter hook
if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
@@ -92,38 +91,9 @@ public class ClassAnalyzer implements IClassProbesVisitor {
};
}
+ @Override
public void visitTotalProbeCount(final int count) {
// nothing to do
}
- public AnnotationVisitor visitAnnotation(final String desc,
- final boolean visible) {
- // nothing to do
- return null;
- }
-
- public void visitAttribute(final Attribute attr) {
- // nothing to do
- }
-
- public FieldVisitor visitField(final int access, final String name,
- final String desc, final String signature, final Object value) {
- // nothing to do
- return null;
- }
-
- public void visitInnerClass(final String name, final String outerName,
- final String innerName, final int access) {
- // nothing to do
- }
-
- public void visitOuterClass(final String owner, final String name,
- final String desc) {
- // nothing to do
- }
-
- public void visitEnd() {
- // nothing to do
- }
-
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
index b2fc6d03..839a2fd7 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
@@ -17,18 +17,17 @@ import java.util.List;
import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.analysis.IMethodCoverage;
import org.jacoco.core.analysis.ISourceNode;
-import org.jacoco.core.internal.flow.IMethodProbesVisitor;
import org.jacoco.core.internal.flow.Instruction;
import org.jacoco.core.internal.flow.LabelInfo;
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
+import org.jacoco.core.internal.flow.MethodProbesVisitor;
+import org.objectweb.asm.Handle;
import org.objectweb.asm.Label;
/**
- * A {@link IMethodProbesVisitor} that analyzes which statements and branches of
+ * A {@link MethodProbesVisitor} that analyzes which statements and branches of
* a method has been executed based on given probe data.
*/
-public class MethodAnalyzer implements IMethodProbesVisitor {
+public class MethodAnalyzer extends MethodProbesVisitor {
private final boolean[] executionData;
@@ -71,6 +70,7 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
*/
public MethodAnalyzer(final String name, final String desc,
final String signature, final boolean[] executionData) {
+ super();
this.executionData = executionData;
this.coverage = new MethodCoverageImpl(name, desc, signature);
}
@@ -85,6 +85,7 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
return coverage;
}
+ @Override
public void visitLabel(final Label label) {
currentLabel.add(label);
if (!LabelInfo.isSuccessor(label)) {
@@ -92,6 +93,7 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
}
}
+ @Override
public void visitLineNumber(final int line, final Label start) {
currentLine = line;
if (firstLine > line || lastLine == ISourceNode.UNKNOWN_LINE) {
@@ -118,50 +120,67 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
lastInsn = insn;
}
+ @Override
public void visitInsn(final int opcode) {
visitInsn();
}
+ @Override
public void visitIntInsn(final int opcode, final int operand) {
visitInsn();
}
+ @Override
public void visitVarInsn(final int opcode, final int var) {
visitInsn();
}
+ @Override
public void visitTypeInsn(final int opcode, final String type) {
visitInsn();
}
+ @Override
public void visitFieldInsn(final int opcode, final String owner,
final String name, final String desc) {
visitInsn();
}
+ @Override
public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc) {
visitInsn();
}
+ @Override
+ public void visitInvokeDynamicInsn(final String name, final String desc,
+ final Handle bsm, final Object... bsmArgs) {
+ visitInsn();
+ }
+
+ @Override
public void visitJumpInsn(final int opcode, final Label label) {
visitInsn();
jumps.add(new Jump(lastInsn, label));
}
+ @Override
public void visitLdcInsn(final Object cst) {
visitInsn();
}
+ @Override
public void visitIincInsn(final int var, final int increment) {
visitInsn();
}
+ @Override
public void visitTableSwitchInsn(final int min, final int max,
- final Label dflt, final Label[] labels) {
+ final Label dflt, final Label... labels) {
visitSwitchInsn(dflt, labels);
}
+ @Override
public void visitLookupSwitchInsn(final Label dflt, final int[] keys,
final Label[] labels) {
visitSwitchInsn(dflt, labels);
@@ -180,31 +199,37 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
}
}
+ @Override
public void visitMultiANewArrayInsn(final String desc, final int dims) {
visitInsn();
}
+ @Override
public void visitProbe(final int probeId) {
addProbe(probeId);
lastInsn = null;
}
+ @Override
public void visitJumpInsnWithProbe(final int opcode, final Label label,
final int probeId) {
visitInsn();
addProbe(probeId);
}
+ @Override
public void visitInsnWithProbe(final int opcode, final int probeId) {
visitInsn();
addProbe(probeId);
}
+ @Override
public void visitTableSwitchInsnWithProbes(final int min, final int max,
final Label dflt, final Label[] labels) {
visitSwitchInsnWithProbes(dflt, labels);
}
+ @Override
public void visitLookupSwitchInsnWithProbes(final Label dflt,
final int[] keys, final Label[] labels) {
visitSwitchInsnWithProbes(dflt, labels);
@@ -233,6 +258,7 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
}
}
+ @Override
public void visitEnd() {
// Wire jumps:
for (final Jump j : jumps) {
@@ -256,51 +282,6 @@ public class MethodAnalyzer implements IMethodProbesVisitor {
coverage.incrementMethodCounter();
}
- public AnnotationVisitor visitAnnotationDefault() {
- // nothing to do
- return null;
- }
-
- public AnnotationVisitor visitAnnotation(final String desc,
- final boolean visible) {
- // nothing to do
- return null;
- }
-
- public AnnotationVisitor visitParameterAnnotation(final int parameter,
- final String desc, final boolean visible) {
- // nothing to do
- return null;
- }
-
- public void visitAttribute(final Attribute attr) {
- // nothing to do
- }
-
- public void visitCode() {
- // nothing to do
- }
-
- public void visitTryCatchBlock(final Label start, final Label end,
- final Label handler, final String type) {
- // nothing to do
- }
-
- public void visitFrame(final int type, final int nLocal,
- final Object[] local, final int nStack, final Object[] stack) {
- // nothing to do
- }
-
- public void visitLocalVariable(final String name, final String desc,
- final String signature, final Label start, final Label end,
- final int index) {
- // nothing to do
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- // nothing to do
- }
-
private void addProbe(final int probeId) {
lastInsn.addBranch();
if (executionData != null && executionData[probeId]) {