ICoverageNode.java

    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.core.analysis;
   13
   14/**
   15 * Interface for hierarchical coverage data nodes with different coverage
   16 * counters.
   17 * 
   18 * @author Marc R. Hoffmann
   19 * @version 0.4.1.20101007204400
   20 */
   21public interface ICoverageNode {
   22
   23    /**
   24     * Type of a Java element represented by a {@link ICoverageNode} instance.
   25     */
   26    public enum ElementType {
   27
   28        /** Method */
   29        METHOD,
   30
   31        /** Class */
   32        CLASS,
   33
   34        /** Source File */
   35        SOURCEFILE,
   36
   37        /** Java Package */
   38        PACKAGE,
   39
   40        /** Bundle of Packages */
   41        BUNDLE,
   42
   43        /** Logical Group of Bundles */
   44        GROUP,
   45
   46    }
   47
   48    /**
   49     * Parameter type for generic counter access.
   50     */
   51    public enum CounterEntity {
   52
   53        /** Counter for instructions */
   54        INSTRUCTION,
   55
   56        /** Counter for basic blocks */
   57        BLOCK,
   58
   59        /** Counter for source lines */
   60        LINE,
   61
   62        /** Counter for methods */
   63        METHOD,
   64
   65        /** Counter for classes */
   66        CLASS
   67    }
   68
   69    /**
   70     * Returns the type of element represented by this node.
   71     * 
   72     * @return type of this node
   73     */
   74    public abstract ElementType getElementType();
   75
   76    /**
   77     * Returns the name of this node.
   78     * 
   79     * @return name of this node
   80     */
   81    public String getName();
   82
   83    /**
   84     * Returns the counter for byte code instructions.
   85     * 
   86     * @return counter for instructions
   87     */
   88    public abstract ICounter getInstructionCounter();
   89
   90    /**
   91     * Returns the counter for blocks.
   92     * 
   93     * @return counter for blocks
   94     */
   95    public ICounter getBlockCounter();
   96
   97    /**
   98     * Returns the counter for lines.
   99     * 
  100     * @return counter for lines
  101     */
  102    public ICounter getLineCounter();
  103
  104    /**
  105     * Returns the counter for methods.
  106     * 
  107     * @return counter for methods
  108     */
  109    public ICounter getMethodCounter();
  110
  111    /**
  112     * Returns the counter for classes.
  113     * 
  114     * @return counter for classes
  115     */
  116    public ICounter getClassCounter();
  117
  118    /**
  119     * Generic access to the the counters.
  120     * 
  121     * @param entity
  122     *            entity we're we want to have the counter for
  123     * @return counter for the given entity
  124     */
  125    public ICounter getCounter(CounterEntity entity);
  126
  127    /**
  128     * Returns the line coverage information if this node represents a source
  129     * file or a part of a source file.
  130     * 
  131     * @return line coverage or <code>null</code>
  132     */
  133    public ILines getLines();
  134
  135    /**
  136     * Creates a plain copy of this node. While {@link ICoverageNode}
  137     * implementations may contain heavy data structures, the copy returned by
  138     * this method is reduced to the counters only. This helps tp save memory
  139     * while processing huge structures.
  140     * 
  141     * @return copy with counters only
  142     */
  143    public ICoverageNode getPlainCopy();
  144
  145}