aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
authorEvgeny Mandrikov <Godin@users.noreply.github.com>2017-04-03 09:17:40 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2017-04-03 09:17:40 +0200
commit40035a00a45f6e817d230334a065716827a69c15 (patch)
tree764bec666e6c787b6b4e207cb4f7295f427b3d67 /org.jacoco.core/src/org/jacoco/core/internal/analysis
parentb11b56bdf79babf63a7b87ce16dcb5c73d4b11e5 (diff)
downloadjacoco-40035a00a45f6e817d230334a065716827a69c15.tar.gz
Use new filtering API for existing filter of synthetic methods (#511)
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.java11
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java3
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java30
3 files changed, 36 insertions, 8 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 06e13248..38037be5 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
@@ -16,7 +16,6 @@ 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.FieldVisitor;
-import org.objectweb.asm.Opcodes;
/**
* Analyzes the structure of a class.
@@ -64,8 +63,8 @@ public class ClassAnalyzer extends ClassProbesVisitor {
InstrSupport.assertNotInstrumented(name, coverage.getName());
- if (isMethodFiltered(coverage.getName(), coverage.getSuperName(),
- access, name, desc)) {
+ if (isMethodFiltered(coverage.getName(), coverage.getSuperName(), name,
+ desc)) {
return null;
}
@@ -88,8 +87,7 @@ public class ClassAnalyzer extends ClassProbesVisitor {
*/
// TODO: Use filter hook in future
private boolean isMethodFiltered(final String className,
- final String superClassName, final int access, final String name,
- final String desc) {
+ final String superClassName, final String name, final String desc) {
if ("java/lang/Enum".equals(superClassName)) {
// filter out methods that compiler creates for enums
if ("values".equals(name)
@@ -102,8 +100,7 @@ public class ClassAnalyzer extends ClassProbesVisitor {
return true;
}
}
- return (access & Opcodes.ACC_SYNTHETIC) != 0
- && !name.startsWith("lambda$");
+ return false;
}
@Override
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 6736acae..a912e333 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.ISourceNode;
import org.jacoco.core.internal.analysis.filter.IFilter;
import org.jacoco.core.internal.analysis.filter.IFilterOutput;
import org.jacoco.core.internal.analysis.filter.SynchronizedFilter;
+import org.jacoco.core.internal.analysis.filter.SyntheticFilter;
import org.jacoco.core.internal.flow.IFrame;
import org.jacoco.core.internal.flow.Instruction;
import org.jacoco.core.internal.flow.LabelInfo;
@@ -41,7 +42,7 @@ public class MethodAnalyzer extends MethodProbesVisitor
implements IFilterOutput {
private static final IFilter[] FILTERS = new IFilter[] {
- new SynchronizedFilter() };
+ new SyntheticFilter(), new SynchronizedFilter() };
private final boolean[] probes;
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
new file mode 100644
index 00000000..540909df
--- /dev/null
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2017 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:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.internal.analysis.filter;
+
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Filters synthetic methods unless they represent bodies of lambda expressions.
+ */
+public final class SyntheticFilter implements IFilter {
+
+ public void filter(MethodNode methodNode, IFilterOutput output) {
+ if ((methodNode.access & Opcodes.ACC_SYNTHETIC) != 0
+ && !methodNode.name.startsWith("lambda$")) {
+ output.ignore(methodNode.instructions.getFirst(),
+ methodNode.instructions.getLast());
+ }
+ }
+
+}