From 281538bc74d9f09f5b0d83250a4435b5c2732e21 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 7 Jun 2018 03:39:28 +0300 Subject: Add filter for methods that Kotlin compiler generates (#689) --- .../core/internal/analysis/ClassAnalyzer.java | 46 ++++++++++++++--- .../core/internal/analysis/MethodAnalyzer.java | 28 +++++------ .../filter/AbstractAnnotatedMethodFilter.java | 4 +- .../filter/EnumEmptyConstructorFilter.java | 15 +++--- .../core/internal/analysis/filter/EnumFilter.java | 7 +-- .../core/internal/analysis/filter/Filters.java | 9 ++-- .../internal/analysis/filter/FinallyFilter.java | 4 +- .../core/internal/analysis/filter/IFilter.java | 9 ++-- .../internal/analysis/filter/IFilterContext.java | 42 ++++++++++++++++ .../analysis/filter/KotlinGeneratedFilter.java | 57 ++++++++++++++++++++++ .../filter/PrivateEmptyNoArgConstructorFilter.java | 8 +-- .../analysis/filter/StringSwitchJavacFilter.java | 4 +- .../analysis/filter/SynchronizedFilter.java | 8 +-- .../internal/analysis/filter/SyntheticFilter.java | 4 +- .../analysis/filter/TryWithResourcesEcjFilter.java | 6 +-- .../filter/TryWithResourcesJavacFilter.java | 11 +++-- 16 files changed, 196 insertions(+), 66 deletions(-) create mode 100644 org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java create mode 100644 org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java (limited to 'org.jacoco.core/src/org/jacoco/core/internal') 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 afcf387e..e40b66dc 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 @@ -11,22 +11,30 @@ *******************************************************************************/ package org.jacoco.core.internal.analysis; +import java.util.HashSet; +import java.util.Set; + import org.jacoco.core.analysis.IMethodCoverage; import org.jacoco.core.internal.analysis.filter.Filters; +import org.jacoco.core.internal.analysis.filter.IFilterContext; 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.AnnotationVisitor; import org.objectweb.asm.FieldVisitor; /** * Analyzes the structure of a class. */ -public class ClassAnalyzer extends ClassProbesVisitor { +public class ClassAnalyzer extends ClassProbesVisitor + implements IFilterContext { private final ClassCoverageImpl coverage; private final boolean[] probes; private final StringPool stringPool; + private final Set classAnnotations = new HashSet(); + /** * Creates a new analyzer that builds coverage data for a class. * @@ -53,6 +61,13 @@ public class ClassAnalyzer extends ClassProbesVisitor { coverage.setInterfaces(stringPool.get(interfaces)); } + @Override + public AnnotationVisitor visitAnnotation(final String desc, + final boolean visible) { + classAnnotations.add(desc); + return super.visitAnnotation(desc, visible); + } + @Override public void visitSource(final String source, final String debug) { coverage.setSourceFileName(stringPool.get(source)); @@ -60,18 +75,19 @@ public class ClassAnalyzer extends ClassProbesVisitor { @Override public MethodProbesVisitor visitMethod(final int access, final String name, - final String desc, final String signature, final String[] exceptions) { + final String desc, final String signature, + final String[] exceptions) { InstrSupport.assertNotInstrumented(name, coverage.getName()); - return new MethodAnalyzer(coverage.getName(), coverage.getSuperName(), - stringPool.get(name), stringPool.get(desc), - stringPool.get(signature), probes, Filters.ALL) { + return new MethodAnalyzer(stringPool.get(name), stringPool.get(desc), + stringPool.get(signature), probes, Filters.ALL, this) { @Override public void visitEnd() { super.visitEnd(); final IMethodCoverage methodCoverage = getCoverage(); - if (methodCoverage.getInstructionCounter().getTotalCount() > 0) { + if (methodCoverage.getInstructionCounter() + .getTotalCount() > 0) { // Only consider methods that actually contain code coverage.addMethod(methodCoverage); } @@ -91,4 +107,22 @@ public class ClassAnalyzer extends ClassProbesVisitor { // nothing to do } + // IFilterContext implementation + + public String getClassName() { + return coverage.getName(); + } + + public String getSuperClassName() { + return coverage.getSuperName(); + } + + public Set getClassAnnotations() { + return classAnnotations; + } + + public String getSourceFileName() { + return coverage.getSourceFileName(); + } + } 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 e10e5d9f..ba862adc 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.ICounter; import org.jacoco.core.analysis.IMethodCoverage; import org.jacoco.core.analysis.ISourceNode; import org.jacoco.core.internal.analysis.filter.IFilter; +import org.jacoco.core.internal.analysis.filter.IFilterContext; import org.jacoco.core.internal.analysis.filter.IFilterOutput; import org.jacoco.core.internal.flow.IFrame; import org.jacoco.core.internal.flow.Instruction; @@ -41,14 +42,12 @@ import org.objectweb.asm.tree.TryCatchBlockNode; public class MethodAnalyzer extends MethodProbesVisitor implements IFilterOutput { - private final String className; - - private final String superClassName; - private final boolean[] probes; private final IFilter filter; + private final IFilterContext filterContext; + private final MethodCoverageImpl coverage; private int currentLine = ISourceNode.UNKNOWN_LINE; @@ -74,11 +73,7 @@ public class MethodAnalyzer extends MethodProbesVisitor /** * New Method analyzer for the given probe data. - * - * @param className - * class name - * @param superClassName - * superclass name + * * @param name * method name * @param desc @@ -89,16 +84,17 @@ public class MethodAnalyzer extends MethodProbesVisitor * recorded probe date of the containing class or * null if the class is not executed at all * @param filter - * filter + * filter which should be applied + * @param filterContext + * class context information for the filter */ - MethodAnalyzer(final String className, final String superClassName, - final String name, final String desc, final String signature, - final boolean[] probes, final IFilter filter) { + MethodAnalyzer(final String name, final String desc, final String signature, + final boolean[] probes, final IFilter filter, + final IFilterContext filterContext) { super(); - this.className = className; - this.superClassName = superClassName; this.probes = probes; this.filter = filter; + this.filterContext = filterContext; this.coverage = new MethodCoverageImpl(name, desc, signature); } @@ -118,7 +114,7 @@ public class MethodAnalyzer extends MethodProbesVisitor @Override public void accept(final MethodNode methodNode, final MethodVisitor methodVisitor) { - filter.filter(className, superClassName, methodNode, this); + filter.filter(methodNode, filterContext, this); methodVisitor.visitCode(); for (final TryCatchBlockNode n : methodNode.tryCatchBlocks) { diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java index 76b6b2f9..7981bc6a 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractAnnotatedMethodFilter.java @@ -32,8 +32,8 @@ abstract class AbstractAnnotatedMethodFilter implements IFilter { this.descType = "L" + annotationType + ";"; } - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { if (hasAnnotation(methodNode)) { output.ignore(methodNode.instructions.getFirst(), methodNode.instructions.getLast()); diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java index 9bdc5077..be79e328 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java @@ -33,24 +33,25 @@ public final class EnumEmptyConstructorFilter implements IFilter { private static final String CONSTRUCTOR_NAME = ""; private static final String CONSTRUCTOR_DESC = "(Ljava/lang/String;I)V"; - public void filter(String className, String superClassName, - MethodNode methodNode, IFilterOutput output) { - if ("java/lang/Enum".equals(superClassName) + private static final String ENUM_TYPE = "java/lang/Enum"; + + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { + if (ENUM_TYPE.equals(context.getSuperClassName()) && CONSTRUCTOR_NAME.equals(methodNode.name) && CONSTRUCTOR_DESC.equals(methodNode.desc) - && new Matcher().match(methodNode, superClassName)) { + && new Matcher().match(methodNode)) { output.ignore(methodNode.instructions.getFirst(), methodNode.instructions.getLast()); } } private static class Matcher extends AbstractMatcher { - private boolean match(final MethodNode methodNode, - final String superClassName) { + private boolean match(final MethodNode methodNode) { firstIsALoad0(methodNode); nextIs(Opcodes.ALOAD); nextIs(Opcodes.ILOAD); - nextIsInvokeSuper(superClassName, CONSTRUCTOR_DESC); + nextIsInvokeSuper(ENUM_TYPE, CONSTRUCTOR_DESC); nextIs(Opcodes.RETURN); return cursor != null; } 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 index c5f1784c..e36376be 100644 --- 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 @@ -19,9 +19,10 @@ import org.objectweb.asm.tree.MethodNode; */ 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, + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { + if (isMethodFiltered(context.getClassName(), + context.getSuperClassName(), methodNode.name, methodNode.desc)) { output.ignore(methodNode.instructions.getFirst(), methodNode.instructions.getLast()); diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java index 40c0dfc3..cafb1f77 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java @@ -31,7 +31,8 @@ public final class Filters implements IFilter { new TryWithResourcesJavacFilter(), new TryWithResourcesEcjFilter(), new FinallyFilter(), new PrivateEmptyNoArgConstructorFilter(), new StringSwitchJavacFilter(), new LombokGeneratedFilter(), - new GroovyGeneratedFilter(), new EnumEmptyConstructorFilter()); + new GroovyGeneratedFilter(), new EnumEmptyConstructorFilter(), + new KotlinGeneratedFilter()); private final IFilter[] filters; @@ -39,10 +40,10 @@ public final class Filters implements IFilter { this.filters = filters; } - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { for (final IFilter filter : filters) { - filter.filter(className, superClassName, methodNode, output); + filter.filter(methodNode, context, output); } } diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java index 830d0c28..50cb5703 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java @@ -67,8 +67,8 @@ import org.objectweb.asm.tree.VarInsnNode; */ public final class FinallyFilter implements IFilter { - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { for (final TryCatchBlockNode tryCatchBlock : methodNode.tryCatchBlocks) { if (tryCatchBlock.type == null) { filter(output, methodNode.tryCatchBlocks, tryCatchBlock); diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java index 82b7959a..2c64da1e 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java @@ -24,16 +24,13 @@ public interface IFilter { * expected to inspect the provided method and report its result to the * given {@link IFilterOutput} instance. * - * @param className - * class name - * @param superClassName - * superclass name * @param methodNode * method to inspect + * @param context + * context information for the method * @param output * callback to report filtering results to */ - void filter(String className, String superClassName, MethodNode methodNode, + void filter(MethodNode methodNode, IFilterContext context, IFilterOutput output); - } diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java new file mode 100644 index 00000000..88c46483 --- /dev/null +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2009, 2018 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: + * Marc R. Hoffmann - initial API and implementation + * + *******************************************************************************/ +package org.jacoco.core.internal.analysis.filter; + +import java.util.Set; + +/** + * Context information provided to filters. + */ +public interface IFilterContext { + + /** + * @return vm name of the enclosing class + */ + String getClassName(); + + /** + * @return vm name of the super class of the enclosing class + */ + String getSuperClassName(); + + /** + * @return vm names of the class annotations of the enclosing class + */ + Set getClassAnnotations(); + + /** + * @return file name of the corresponding source file or null + * if not available + */ + String getSourceFileName(); + +} diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java new file mode 100644 index 00000000..68331492 --- /dev/null +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2009, 2018 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: + * Nikolay Krasko - initial API and implementation + * + *******************************************************************************/ +package org.jacoco.core.internal.analysis.filter; + +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.MethodNode; + +/** + * Filters methods generated by the Kotlin compiler. Kotlin classes are + * identified by the @kotlin.Metadata annotations. In such classes + * generated methods do not have line numbers. + */ +public class KotlinGeneratedFilter implements IFilter { + + static final String KOTLIN_METADATA_DESC = "Lkotlin/Metadata;"; + + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { + + if (context.getSourceFileName() == null) { + // probably full debug information is missing + // disabled filtering as all methods might be erroneously skipped + return; + } + + if (!context.getClassAnnotations().contains(KOTLIN_METADATA_DESC)) { + return; + } + + if (hasLineNumber(methodNode)) { + return; + } + + output.ignore(methodNode.instructions.getFirst(), + methodNode.instructions.getLast()); + } + + private boolean hasLineNumber(final MethodNode methodNode) { + for (AbstractInsnNode i = methodNode.instructions + .getFirst(); i != null; i = i.getNext()) { + if (AbstractInsnNode.LINE == i.getType()) { + return true; + } + } + return false; + } + +} diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java index 29214c5b..9634c149 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java @@ -22,12 +22,12 @@ public final class PrivateEmptyNoArgConstructorFilter implements IFilter { private static final String CONSTRUCTOR_NAME = ""; private static final String CONSTRUCTOR_DESC = "()V"; - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { if ((methodNode.access & Opcodes.ACC_PRIVATE) != 0 && CONSTRUCTOR_NAME.equals(methodNode.name) - && CONSTRUCTOR_DESC.equals(methodNode.desc) - && new Matcher().match(methodNode, superClassName)) { + && CONSTRUCTOR_DESC.equals(methodNode.desc) && new Matcher() + .match(methodNode, context.getSuperClassName())) { output.ignore(methodNode.instructions.getFirst(), methodNode.instructions.getLast()); } diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java index e1d7a1cc..c61bc752 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java @@ -24,8 +24,8 @@ import org.objectweb.asm.tree.TableSwitchInsnNode; */ public final class StringSwitchJavacFilter implements IFilter { - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { AbstractInsnNode i = methodNode.instructions.getFirst(); while (i != null) { filter(i, output); diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java index 71ce0cfe..c3b5caa1 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java @@ -21,9 +21,9 @@ import org.objectweb.asm.tree.TryCatchBlockNode; */ public final class SynchronizedFilter implements IFilter { - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { - for (TryCatchBlockNode tryCatch : methodNode.tryCatchBlocks) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { + for (final TryCatchBlockNode tryCatch : methodNode.tryCatchBlocks) { if (tryCatch.type != null) { continue; } @@ -67,7 +67,7 @@ public final class SynchronizedFilter implements IFilter { nextIs(Opcodes.ALOAD); nextIs(Opcodes.MONITOREXIT); nextIs(Opcodes.ATHROW); - return cursor != null; + return cursor != null; } } 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 index afba0f00..52d38bd2 100644 --- 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 @@ -19,8 +19,8 @@ import org.objectweb.asm.tree.MethodNode; */ public final class SyntheticFilter implements IFilter { - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { if ((methodNode.access & Opcodes.ACC_SYNTHETIC) != 0 && !methodNode.name.startsWith("lambda$")) { output.ignore(methodNode.instructions.getFirst(), diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java index c25d61ff..1ead24b9 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java @@ -27,13 +27,13 @@ import org.objectweb.asm.tree.TryCatchBlockNode; */ public final class TryWithResourcesEcjFilter implements IFilter { - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { if (methodNode.tryCatchBlocks.isEmpty()) { return; } final Matcher matcher = new Matcher(output); - for (TryCatchBlockNode t : methodNode.tryCatchBlocks) { + for (final TryCatchBlockNode t : methodNode.tryCatchBlocks) { if (t.type == null) { matcher.start(t.handler); if (!matcher.matchEcj()) { diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java index f3b33bc9..fea477f6 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java @@ -22,15 +22,16 @@ import org.objectweb.asm.tree.TryCatchBlockNode; */ public final class TryWithResourcesJavacFilter implements IFilter { - public void filter(final String className, final String superClassName, - final MethodNode methodNode, final IFilterOutput output) { + public void filter(final MethodNode methodNode, + final IFilterContext context, final IFilterOutput output) { if (methodNode.tryCatchBlocks.isEmpty()) { return; } final Matcher matcher = new Matcher(output); - for (TryCatchBlockNode t : methodNode.tryCatchBlocks) { + for (final TryCatchBlockNode t : methodNode.tryCatchBlocks) { if ("java/lang/Throwable".equals(t.type)) { - for (Matcher.JavacPattern p : Matcher.JavacPattern.values()) { + for (final Matcher.JavacPattern p : Matcher.JavacPattern + .values()) { matcher.start(t.handler); if (matcher.matchJavac(p)) { break; @@ -195,7 +196,7 @@ public final class TryWithResourcesJavacFilter implements IFilter { final MethodInsnNode m = (MethodInsnNode) cursor; if ("$closeResource".equals(m.name) && "(Ljava/lang/Throwable;Ljava/lang/AutoCloseable;)V" - .equals(m.desc)) { + .equals(m.desc)) { return true; } cursor = null; -- cgit v1.2.3