IReportVisitor.java revision 1b885c7bc666c215c3947ad4d12099273a5f533f
1/*******************************************************************************
2 * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 *    Marc R. Hoffmann - initial API and implementation
10 *
11 *******************************************************************************/
12package org.jacoco.report;
13
14import java.io.IOException;
15
16import org.jacoco.core.analysis.ICoverageNode;
17
18/**
19 * Output-Interface for hierarchical coverage data information. To allow data
20 * streaming and to save memory {@link ICoverageNode}s are traversed in a
21 * deep-first fashion. The interface is implemented by the different report
22 * writers.
23 *
24 * @author Marc R. Hoffmann
25 * @version $qualified.bundle.version$
26 */
27public interface IReportVisitor {
28
29	/**
30	 * Visitor without any operation.
31	 */
32	public static final IReportVisitor NOP = new IReportVisitor() {
33
34		public IReportVisitor visitChild(final ICoverageNode node) {
35			return NOP;
36		}
37
38		public void visitEnd(final ISourceFileLocator sourceFileLocator) {
39		}
40
41	};
42
43	/**
44	 * Called for every direct child.
45	 *
46	 * @param node
47	 *            Node for the child in the implementation class specific to
48	 *            this type. The counters are may yet be populated.
49	 *
50	 * @return visitor instance for processing the child node
51	 *
52	 * @throws IOException
53	 *             in case of IO problems with the report writer
54	 */
55	IReportVisitor visitChild(ICoverageNode node) throws IOException;
56
57	/**
58	 * Called at the very end, when all child node have been processed and the
59	 * counters for this node are properly populated.
60	 *
61	 * @param sourceFileLocator
62	 *            source file locator valid for this node
63	 * @throws IOException
64	 *             in case of IO problems with the report writer
65	 */
66	void visitEnd(ISourceFileLocator sourceFileLocator) throws IOException;
67
68}
69