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-02-27 15:03:44 +0100
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2017-02-27 15:03:44 +0100
commit296f992a80fb545bb3447c8882cf213f56a765bd (patch)
tree1c0e28a70e92dfd8cce5f24feef27f26f3e230eb /org.jacoco.core/src/org/jacoco/core/internal/analysis
parent274577d8ff30202c14868923fc75370510e4e0df (diff)
downloadjacoco-296f992a80fb545bb3447c8882cf213f56a765bd.tar.gz
Exclude enum methods "values" and "valueOf" from reports (#491)
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.java22
1 files changed, 20 insertions, 2 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 f32ef8db..06e13248 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
@@ -64,7 +64,8 @@ public class ClassAnalyzer extends ClassProbesVisitor {
InstrSupport.assertNotInstrumented(name, coverage.getName());
- if (isMethodFiltered(access, name)) {
+ if (isMethodFiltered(coverage.getName(), coverage.getSuperName(),
+ access, name, desc)) {
return null;
}
@@ -82,8 +83,25 @@ public class ClassAnalyzer extends ClassProbesVisitor {
};
}
+ /**
+ * @return <code>true</code> if method should not be analyzed
+ */
// TODO: Use filter hook in future
- private boolean isMethodFiltered(final int access, final String name) {
+ private boolean isMethodFiltered(final String className,
+ final String superClassName, final int access, final String name,
+ final String desc) {
+ if ("java/lang/Enum".equals(superClassName)) {
+ // filter out methods that compiler creates for enums
+ if ("values".equals(name)
+ && ("()[L" + className + ";").equals(desc)) {
+ return true;
+ }
+ if ("valueOf".equals(name)
+ && ("(Ljava/lang/String;)L" + className + ";")
+ .equals(desc)) {
+ return true;
+ }
+ }
return (access & Opcodes.ACC_SYNTHETIC) != 0
&& !name.startsWith("lambda$");
}