aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal/analysis
diff options
context:
space:
mode:
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$");
}