aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
authorNikolay Krasko <goodwinnk@gmail.com>2018-06-07 03:39:28 +0300
committerEvgeny Mandrikov <Godin@users.noreply.github.com>2018-06-07 02:39:28 +0200
commit281538bc74d9f09f5b0d83250a4435b5c2732e21 (patch)
tree7a0eef00d9e8fa644a97f65ccd1a31f010a57371 /org.jacoco.core/src/org/jacoco/core/internal/analysis
parent1a56c9619e03ee3e4e1b539e592e7d8b51f53a7b (diff)
downloadjacoco-281538bc74d9f09f5b0d83250a4435b5c2732e21.tar.gz
Add filter for methods that Kotlin compiler generates (#689)
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.java46
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java28
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java4
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java15
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java7
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java9
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java4
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java9
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java42
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java57
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java8
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java4
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java8
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java4
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java6
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java11
16 files changed, 196 insertions, 66 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 afcf387e..e40b66dc 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
@@ -11,22 +11,30 @@
*******************************************************************************/
package org.jacoco.core.internal.analysis;
+import java.util.HashSet;
+import java.util.Set;
+
import org.jacoco.core.analysis.IMethodCoverage;
import org.jacoco.core.internal.analysis.filter.Filters;
+import org.jacoco.core.internal.analysis.filter.IFilterContext;
import org.jacoco.core.internal.flow.ClassProbesVisitor;
import org.jacoco.core.internal.flow.MethodProbesVisitor;
import org.jacoco.core.internal.instr.InstrSupport;
+import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.FieldVisitor;
/**
* Analyzes the structure of a class.
*/
-public class ClassAnalyzer extends ClassProbesVisitor {
+public class ClassAnalyzer extends ClassProbesVisitor
+ implements IFilterContext {
private final ClassCoverageImpl coverage;
private final boolean[] probes;
private final StringPool stringPool;
+ private final Set<String> classAnnotations = new HashSet<String>();
+
/**
* Creates a new analyzer that builds coverage data for a class.
*
@@ -54,24 +62,32 @@ public class ClassAnalyzer extends ClassProbesVisitor {
}
@Override
+ public AnnotationVisitor visitAnnotation(final String desc,
+ final boolean visible) {
+ classAnnotations.add(desc);
+ return super.visitAnnotation(desc, visible);
+ }
+
+ @Override
public void visitSource(final String source, final String debug) {
coverage.setSourceFileName(stringPool.get(source));
}
@Override
public MethodProbesVisitor visitMethod(final int access, final String name,
- final String desc, final String signature, final String[] exceptions) {
+ final String desc, final String signature,
+ final String[] exceptions) {
InstrSupport.assertNotInstrumented(name, coverage.getName());
- return new MethodAnalyzer(coverage.getName(), coverage.getSuperName(),
- stringPool.get(name), stringPool.get(desc),
- stringPool.get(signature), probes, Filters.ALL) {
+ return new MethodAnalyzer(stringPool.get(name), stringPool.get(desc),
+ stringPool.get(signature), probes, Filters.ALL, this) {
@Override
public void visitEnd() {
super.visitEnd();
final IMethodCoverage methodCoverage = getCoverage();
- if (methodCoverage.getInstructionCounter().getTotalCount() > 0) {
+ if (methodCoverage.getInstructionCounter()
+ .getTotalCount() > 0) {
// Only consider methods that actually contain code
coverage.addMethod(methodCoverage);
}
@@ -91,4 +107,22 @@ public class ClassAnalyzer extends ClassProbesVisitor {
// nothing to do
}
+ // IFilterContext implementation
+
+ public String getClassName() {
+ return coverage.getName();
+ }
+
+ public String getSuperClassName() {
+ return coverage.getSuperName();
+ }
+
+ public Set<String> getClassAnnotations() {
+ return classAnnotations;
+ }
+
+ public String getSourceFileName() {
+ return coverage.getSourceFileName();
+ }
+
}
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 e10e5d9f..ba862adc 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
@@ -22,6 +22,7 @@ import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.analysis.IMethodCoverage;
import org.jacoco.core.analysis.ISourceNode;
import org.jacoco.core.internal.analysis.filter.IFilter;
+import org.jacoco.core.internal.analysis.filter.IFilterContext;
import org.jacoco.core.internal.analysis.filter.IFilterOutput;
import org.jacoco.core.internal.flow.IFrame;
import org.jacoco.core.internal.flow.Instruction;
@@ -41,14 +42,12 @@ import org.objectweb.asm.tree.TryCatchBlockNode;
public class MethodAnalyzer extends MethodProbesVisitor
implements IFilterOutput {
- private final String className;
-
- private final String superClassName;
-
private final boolean[] probes;
private final IFilter filter;
+ private final IFilterContext filterContext;
+
private final MethodCoverageImpl coverage;
private int currentLine = ISourceNode.UNKNOWN_LINE;
@@ -74,11 +73,7 @@ public class MethodAnalyzer extends MethodProbesVisitor
/**
* New Method analyzer for the given probe data.
- *
- * @param className
- * class name
- * @param superClassName
- * superclass name
+ *
* @param name
* method name
* @param desc
@@ -89,16 +84,17 @@ public class MethodAnalyzer extends MethodProbesVisitor
* recorded probe date of the containing class or
* <code>null</code> if the class is not executed at all
* @param filter
- * filter
+ * filter which should be applied
+ * @param filterContext
+ * class context information for the filter
*/
- MethodAnalyzer(final String className, final String superClassName,
- final String name, final String desc, final String signature,
- final boolean[] probes, final IFilter filter) {
+ MethodAnalyzer(final String name, final String desc, final String signature,
+ final boolean[] probes, final IFilter filter,
+ final IFilterContext filterContext) {
super();
- this.className = className;
- this.superClassName = superClassName;
this.probes = probes;
this.filter = filter;
+ this.filterContext = filterContext;
this.coverage = new MethodCoverageImpl(name, desc, signature);
}
@@ -118,7 +114,7 @@ public class MethodAnalyzer extends MethodProbesVisitor
@Override
public void accept(final MethodNode methodNode,
final MethodVisitor methodVisitor) {
- filter.filter(className, superClassName, methodNode, this);
+ filter.filter(methodNode, filterContext, this);
methodVisitor.visitCode();
for (final TryCatchBlockNode n : methodNode.tryCatchBlocks) {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java
index 76b6b2f9..7981bc6a 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java
@@ -32,8 +32,8 @@ abstract class AbstractAnnotatedMethodFilter implements IFilter {
this.descType = "L" + annotationType + ";";
}
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
if (hasAnnotation(methodNode)) {
output.ignore(methodNode.instructions.getFirst(),
methodNode.instructions.getLast());
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
index 9bdc5077..be79e328 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
@@ -33,24 +33,25 @@ public final class EnumEmptyConstructorFilter implements IFilter {
private static final String CONSTRUCTOR_NAME = "<init>";
private static final String CONSTRUCTOR_DESC = "(Ljava/lang/String;I)V";
- public void filter(String className, String superClassName,
- MethodNode methodNode, IFilterOutput output) {
- if ("java/lang/Enum".equals(superClassName)
+ private static final String ENUM_TYPE = "java/lang/Enum";
+
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
+ if (ENUM_TYPE.equals(context.getSuperClassName())
&& CONSTRUCTOR_NAME.equals(methodNode.name)
&& CONSTRUCTOR_DESC.equals(methodNode.desc)
- && new Matcher().match(methodNode, superClassName)) {
+ && new Matcher().match(methodNode)) {
output.ignore(methodNode.instructions.getFirst(),
methodNode.instructions.getLast());
}
}
private static class Matcher extends AbstractMatcher {
- private boolean match(final MethodNode methodNode,
- final String superClassName) {
+ private boolean match(final MethodNode methodNode) {
firstIsALoad0(methodNode);
nextIs(Opcodes.ALOAD);
nextIs(Opcodes.ILOAD);
- nextIsInvokeSuper(superClassName, CONSTRUCTOR_DESC);
+ nextIsInvokeSuper(ENUM_TYPE, CONSTRUCTOR_DESC);
nextIs(Opcodes.RETURN);
return cursor != null;
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java
index c5f1784c..e36376be 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java
@@ -19,9 +19,10 @@ import org.objectweb.asm.tree.MethodNode;
*/
public final class EnumFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
- if (isMethodFiltered(className, superClassName, methodNode.name,
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
+ if (isMethodFiltered(context.getClassName(),
+ context.getSuperClassName(), methodNode.name,
methodNode.desc)) {
output.ignore(methodNode.instructions.getFirst(),
methodNode.instructions.getLast());
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java
index 40c0dfc3..cafb1f77 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java
@@ -31,7 +31,8 @@ public final class Filters implements IFilter {
new TryWithResourcesJavacFilter(), new TryWithResourcesEcjFilter(),
new FinallyFilter(), new PrivateEmptyNoArgConstructorFilter(),
new StringSwitchJavacFilter(), new LombokGeneratedFilter(),
- new GroovyGeneratedFilter(), new EnumEmptyConstructorFilter());
+ new GroovyGeneratedFilter(), new EnumEmptyConstructorFilter(),
+ new KotlinGeneratedFilter());
private final IFilter[] filters;
@@ -39,10 +40,10 @@ public final class Filters implements IFilter {
this.filters = filters;
}
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
for (final IFilter filter : filters) {
- filter.filter(className, superClassName, methodNode, output);
+ filter.filter(methodNode, context, output);
}
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java
index 830d0c28..50cb5703 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java
@@ -67,8 +67,8 @@ import org.objectweb.asm.tree.VarInsnNode;
*/
public final class FinallyFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
for (final TryCatchBlockNode tryCatchBlock : methodNode.tryCatchBlocks) {
if (tryCatchBlock.type == null) {
filter(output, methodNode.tryCatchBlocks, tryCatchBlock);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java
index 82b7959a..2c64da1e 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java
@@ -24,16 +24,13 @@ public interface IFilter {
* expected to inspect the provided method and report its result to the
* given {@link IFilterOutput} instance.
*
- * @param className
- * class name
- * @param superClassName
- * superclass name
* @param methodNode
* method to inspect
+ * @param context
+ * context information for the method
* @param output
* callback to report filtering results to
*/
- void filter(String className, String superClassName, MethodNode methodNode,
+ void filter(MethodNode methodNode, IFilterContext context,
IFilterOutput output);
-
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java
new file mode 100644
index 00000000..88c46483
--- /dev/null
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marc R. Hoffmann - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.internal.analysis.filter;
+
+import java.util.Set;
+
+/**
+ * Context information provided to filters.
+ */
+public interface IFilterContext {
+
+ /**
+ * @return vm name of the enclosing class
+ */
+ String getClassName();
+
+ /**
+ * @return vm name of the super class of the enclosing class
+ */
+ String getSuperClassName();
+
+ /**
+ * @return vm names of the class annotations of the enclosing class
+ */
+ Set<String> getClassAnnotations();
+
+ /**
+ * @return file name of the corresponding source file or <code>null</code>
+ * if not available
+ */
+ String getSourceFileName();
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java
new file mode 100644
index 00000000..68331492
--- /dev/null
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nikolay Krasko - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.internal.analysis.filter;
+
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Filters methods generated by the Kotlin compiler. Kotlin classes are
+ * identified by the <code>@kotlin.Metadata</code> annotations. In such classes
+ * generated methods do not have line numbers.
+ */
+public class KotlinGeneratedFilter implements IFilter {
+
+ static final String KOTLIN_METADATA_DESC = "Lkotlin/Metadata;";
+
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
+
+ if (context.getSourceFileName() == null) {
+ // probably full debug information is missing
+ // disabled filtering as all methods might be erroneously skipped
+ return;
+ }
+
+ if (!context.getClassAnnotations().contains(KOTLIN_METADATA_DESC)) {
+ return;
+ }
+
+ if (hasLineNumber(methodNode)) {
+ return;
+ }
+
+ output.ignore(methodNode.instructions.getFirst(),
+ methodNode.instructions.getLast());
+ }
+
+ private boolean hasLineNumber(final MethodNode methodNode) {
+ for (AbstractInsnNode i = methodNode.instructions
+ .getFirst(); i != null; i = i.getNext()) {
+ if (AbstractInsnNode.LINE == i.getType()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
index 29214c5b..9634c149 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
@@ -22,12 +22,12 @@ public final class PrivateEmptyNoArgConstructorFilter implements IFilter {
private static final String CONSTRUCTOR_NAME = "<init>";
private static final String CONSTRUCTOR_DESC = "()V";
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
if ((methodNode.access & Opcodes.ACC_PRIVATE) != 0
&& CONSTRUCTOR_NAME.equals(methodNode.name)
- && CONSTRUCTOR_DESC.equals(methodNode.desc)
- && new Matcher().match(methodNode, superClassName)) {
+ && CONSTRUCTOR_DESC.equals(methodNode.desc) && new Matcher()
+ .match(methodNode, context.getSuperClassName())) {
output.ignore(methodNode.instructions.getFirst(),
methodNode.instructions.getLast());
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java
index e1d7a1cc..c61bc752 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java
@@ -24,8 +24,8 @@ import org.objectweb.asm.tree.TableSwitchInsnNode;
*/
public final class StringSwitchJavacFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
AbstractInsnNode i = methodNode.instructions.getFirst();
while (i != null) {
filter(i, output);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
index 71ce0cfe..c3b5caa1 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
@@ -21,9 +21,9 @@ import org.objectweb.asm.tree.TryCatchBlockNode;
*/
public final class SynchronizedFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
- for (TryCatchBlockNode tryCatch : methodNode.tryCatchBlocks) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
+ for (final TryCatchBlockNode tryCatch : methodNode.tryCatchBlocks) {
if (tryCatch.type != null) {
continue;
}
@@ -67,7 +67,7 @@ public final class SynchronizedFilter implements IFilter {
nextIs(Opcodes.ALOAD);
nextIs(Opcodes.MONITOREXIT);
nextIs(Opcodes.ATHROW);
- return cursor != null;
+ return cursor != null;
}
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
index afba0f00..52d38bd2 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
@@ -19,8 +19,8 @@ import org.objectweb.asm.tree.MethodNode;
*/
public final class SyntheticFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
if ((methodNode.access & Opcodes.ACC_SYNTHETIC) != 0
&& !methodNode.name.startsWith("lambda$")) {
output.ignore(methodNode.instructions.getFirst(),
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
index c25d61ff..1ead24b9 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
@@ -27,13 +27,13 @@ import org.objectweb.asm.tree.TryCatchBlockNode;
*/
public final class TryWithResourcesEcjFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
if (methodNode.tryCatchBlocks.isEmpty()) {
return;
}
final Matcher matcher = new Matcher(output);
- for (TryCatchBlockNode t : methodNode.tryCatchBlocks) {
+ for (final TryCatchBlockNode t : methodNode.tryCatchBlocks) {
if (t.type == null) {
matcher.start(t.handler);
if (!matcher.matchEcj()) {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
index f3b33bc9..fea477f6 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
@@ -22,15 +22,16 @@ import org.objectweb.asm.tree.TryCatchBlockNode;
*/
public final class TryWithResourcesJavacFilter implements IFilter {
- public void filter(final String className, final String superClassName,
- final MethodNode methodNode, final IFilterOutput output) {
+ public void filter(final MethodNode methodNode,
+ final IFilterContext context, final IFilterOutput output) {
if (methodNode.tryCatchBlocks.isEmpty()) {
return;
}
final Matcher matcher = new Matcher(output);
- for (TryCatchBlockNode t : methodNode.tryCatchBlocks) {
+ for (final TryCatchBlockNode t : methodNode.tryCatchBlocks) {
if ("java/lang/Throwable".equals(t.type)) {
- for (Matcher.JavacPattern p : Matcher.JavacPattern.values()) {
+ for (final Matcher.JavacPattern p : Matcher.JavacPattern
+ .values()) {
matcher.start(t.handler);
if (matcher.matchJavac(p)) {
break;
@@ -195,7 +196,7 @@ public final class TryWithResourcesJavacFilter implements IFilter {
final MethodInsnNode m = (MethodInsnNode) cursor;
if ("$closeResource".equals(m.name)
&& "(Ljava/lang/Throwable;Ljava/lang/AutoCloseable;)V"
- .equals(m.desc)) {
+ .equals(m.desc)) {
return true;
}
cursor = null;