diff options
author | Evgeny Mandrikov <Godin@users.noreply.github.com> | 2017-04-03 09:17:40 +0200 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2017-04-03 09:17:40 +0200 |
commit | 40035a00a45f6e817d230334a065716827a69c15 (patch) | |
tree | 764bec666e6c787b6b4e207cb4f7295f427b3d67 /org.jacoco.core/src/org/jacoco/core/internal/analysis | |
parent | b11b56bdf79babf63a7b87ce16dcb5c73d4b11e5 (diff) | |
download | jacoco-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')
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()); + } + } + +} |