diff options
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java')
-rw-r--r-- | org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java | 48 |
1 files changed, 48 insertions, 0 deletions
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 new file mode 100644 index 00000000..852008e5 --- /dev/null +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * 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.tree.MethodNode; + +/** + * Filters methods <code>values</code> and <code>valueOf</code> that compiler + * creates for enums. + */ +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, + methodNode.desc)) { + output.ignore(methodNode.instructions.getFirst(), + methodNode.instructions.getLast()); + } + } + + private boolean isMethodFiltered(final String className, + final String superClassName, final String methodName, + final String methodDesc) { + if ("java/lang/Enum".equals(superClassName)) { + if ("values".equals(methodName) + && ("()[L" + className + ";").equals(methodDesc)) { + return true; + } + if ("valueOf".equals(methodName) + && ("(Ljava/lang/String;)L" + className + ";") + .equals(methodDesc)) { + return true; + } + } + return false; + } + +} |