| /******************************************************************************* |
| * 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: |
| * Marc R. Hoffmann - initial API and implementation |
| * |
| *******************************************************************************/ |
| package org.jacoco.report.internal; |
| |
| import java.io.IOException; |
| |
| import org.jacoco.core.analysis.CoverageNodeImpl; |
| import org.jacoco.core.analysis.IBundleCoverage; |
| import org.jacoco.core.analysis.ICoverageNode.ElementType; |
| import org.jacoco.report.IReportGroupVisitor; |
| import org.jacoco.report.ISourceFileLocator; |
| |
| /** |
| * Internal base visitor to calculate group counter summaries for hierarchical |
| * reports. |
| */ |
| public abstract class AbstractGroupVisitor implements IReportGroupVisitor { |
| |
| /** coverage node for this group to total counters */ |
| protected final CoverageNodeImpl total; |
| |
| private AbstractGroupVisitor lastChild; |
| |
| /** |
| * Creates a new group with the given name. |
| * |
| * @param name |
| * name for the coverage node created internally |
| */ |
| protected AbstractGroupVisitor(final String name) { |
| total = new CoverageNodeImpl(ElementType.GROUP, name); |
| } |
| |
| public final void visitBundle(final IBundleCoverage bundle, |
| final ISourceFileLocator locator) throws IOException { |
| finalizeLastChild(); |
| total.increment(bundle); |
| handleBundle(bundle, locator); |
| } |
| |
| /** |
| * Called to handle the given bundle in a specific way. |
| * |
| * @param bundle |
| * analyzed bundle |
| * @param locator |
| * source locator |
| * @throws IOException |
| * if the report can't be written |
| */ |
| protected abstract void handleBundle(IBundleCoverage bundle, |
| ISourceFileLocator locator) throws IOException; |
| |
| public final IReportGroupVisitor visitGroup(final String name) |
| throws IOException { |
| finalizeLastChild(); |
| lastChild = handleGroup(name); |
| return lastChild; |
| } |
| |
| /** |
| * Called to handle a group with the given name in a specific way. |
| * |
| * @param name |
| * name of the group |
| * @return created child group |
| * @throws IOException |
| * if the report can't be written |
| */ |
| protected abstract AbstractGroupVisitor handleGroup(final String name) |
| throws IOException; |
| |
| /** |
| * Must be called at the end of every group. |
| * |
| * @throws IOException |
| * if the report can't be written |
| */ |
| public final void visitEnd() throws IOException { |
| finalizeLastChild(); |
| handleEnd(); |
| } |
| |
| /** |
| * Called to handle the end of this group in a specific way. |
| * |
| * @throws IOException |
| * if the report can't be written |
| */ |
| protected abstract void handleEnd() throws IOException; |
| |
| private void finalizeLastChild() throws IOException { |
| if (lastChild != null) { |
| lastChild.visitEnd(); |
| total.increment(lastChild.total); |
| lastChild = null; |
| } |
| } |
| |
| } |