• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright (c) 2009, 2018 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  *******************************************************************************/
12 package org.jacoco.core.analysis;
13 
14 /**
15  * Interface for hierarchical coverage data nodes with different coverage
16  * counters.
17  */
18 public interface ICoverageNode {
19 
20 	/**
21 	 * Type of a Java element represented by a {@link ICoverageNode} instance.
22 	 */
23 	public enum ElementType {
24 
25 		/** Method */
26 		METHOD,
27 
28 		/** Class */
29 		CLASS,
30 
31 		/** Source File */
32 		SOURCEFILE,
33 
34 		/** Java Package */
35 		PACKAGE,
36 
37 		/** Bundle of Packages */
38 		BUNDLE,
39 
40 		/** Logical Group of Bundles */
41 		GROUP,
42 
43 	}
44 
45 	/**
46 	 * Different counter types supported by JaCoCo.
47 	 */
48 	public enum CounterEntity {
49 
50 		/** Counter for instructions */
51 		INSTRUCTION,
52 
53 		/** Counter for branches */
54 		BRANCH,
55 
56 		/** Counter for source lines */
57 		LINE,
58 
59 		/** Counter for cyclomatic complexity */
60 		COMPLEXITY,
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 	 */
getElementType()74 	public abstract ElementType getElementType();
75 
76 	/**
77 	 * Returns the name of this node.
78 	 *
79 	 * @return name of this node
80 	 */
getName()81 	public String getName();
82 
83 	/**
84 	 * Returns the counter for byte code instructions.
85 	 *
86 	 * @return counter for instructions
87 	 */
getInstructionCounter()88 	public abstract ICounter getInstructionCounter();
89 
90 	/**
91 	 * Returns the counter for branches.
92 	 *
93 	 * @return counter for branches
94 	 */
getBranchCounter()95 	public ICounter getBranchCounter();
96 
97 	/**
98 	 * Returns the counter for lines.
99 	 *
100 	 * @return counter for lines
101 	 */
getLineCounter()102 	public ICounter getLineCounter();
103 
104 	/**
105 	 * Returns the counter for cyclomatic complexity.
106 	 *
107 	 * @return counter for complexity
108 	 */
getComplexityCounter()109 	public ICounter getComplexityCounter();
110 
111 	/**
112 	 * Returns the counter for methods.
113 	 *
114 	 * @return counter for methods
115 	 */
getMethodCounter()116 	public ICounter getMethodCounter();
117 
118 	/**
119 	 * Returns the counter for classes.
120 	 *
121 	 * @return counter for classes
122 	 */
getClassCounter()123 	public ICounter getClassCounter();
124 
125 	/**
126 	 * Generic access to the the counters.
127 	 *
128 	 * @param entity
129 	 *            entity we're we want to have the counter for
130 	 * @return counter for the given entity
131 	 */
getCounter(CounterEntity entity)132 	public ICounter getCounter(CounterEntity entity);
133 
134 	/**
135 	 * Creates a plain copy of this node. While {@link ICoverageNode}
136 	 * implementations may contain heavy data structures, the copy returned by
137 	 * this method is reduced to the counters only. This helps to save memory
138 	 * while processing huge structures.
139 	 *
140 	 * @return copy with counters only
141 	 */
getPlainCopy()142 	public ICoverageNode getPlainCopy();
143 
144 }