1eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov/*******************************************************************************
2eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
3eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * All rights reserved. This program and the accompanying materials
4eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0
5eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * which accompanies this distribution, and is available at
6eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html
7eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *
8eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * Contributors:
9eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *    Evgeny Mandrikov - initial API and implementation
10eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *
11eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov *******************************************************************************/
12eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovpackage org.jacoco.core.internal.analysis.filter;
13eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
14eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovimport org.objectweb.asm.tree.MethodNode;
15eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
16eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov/**
17eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * Interface for filter implementations. Instances of filters are reused and so
18eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov * must be stateless.
19eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov */
20eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovpublic interface IFilter {
21eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
221f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	/**
231f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 * This method is called for every method. The filter implementation is
241f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 * expected to inspect the provided method and report its result to the
251f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 * given {@link IFilterOutput} instance.
26e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov	 *
27e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov	 * @param className
28e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov	 *            class name
29e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov	 * @param superClassName
30e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov	 *            superclass name
311f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 * @param methodNode
321f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 *            method to inspect
331f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 * @param output
341f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 *            callback to report filtering results to
351f34a6a6f07af31c40deb4f4cb7d19ae09c375e0Marc R. Hoffmann	 */
36e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov	void filter(String className, String superClassName, MethodNode methodNode,
37e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov			IFilterOutput output);
38eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov
39eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov}
40