blob: 9ebbdd691b6b418968904fa11167cd82cc65736f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2019 STMicroelectronics and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.gcov.parser;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.SortedSet;
import java.util.TreeSet;
public class SourceFile implements Serializable {
/**
*
*/
private static final long serialVersionUID = -9182882194956475711L;
private final String name;
private final int index;
private final ArrayList<Line> lines = new ArrayList<>();
private final TreeSet<GcnoFunction> fnctns = new TreeSet<>();
private int numLines = 1;
private final CoverageInfo cvrge = new CoverageInfo();
private long maxCount = -1;
/**
* Constructor
*/
public SourceFile(String name, int index) {
this.name = name;
this.index = index;
}
public void accumulateLineCounts() {
for (Line line : lines) {
if (line.exists()) {
cvrge.incLinesInstrumented();
if (line.getCount() != 0) {
cvrge.incLinesExecuted();
}
}
}
}
public long getmaxLineCount() {
if (maxCount < 0) {
for (Line line : lines) {
if (line.getCount() > maxCount) {
maxCount = line.getCount();
}
}
}
return maxCount;
}
/* getters & setters */
public int getLinesExecuted() {
return cvrge.getLinesExecuted();
}
public int getLinesInstrumented() {
return cvrge.getLinesInstrumented();
}
public String getName() {
return name;
}
public ArrayList<Line> getLines() {
return lines;
}
public SortedSet<GcnoFunction> getFnctns() {
return fnctns;
}
public void addFnctn(GcnoFunction fnctn) {
this.fnctns.add(fnctn);
}
public int getNumLines() {
return numLines;
}
public void setNumLines(int numLines) {
this.numLines = numLines;
}
public int getIndex() {
return index;
}
public void createLines() {
int n = getNumLines();
lines.ensureCapacity(n);
for (int j = 0; j < n; j++) {
lines.add(new Line());
}
for (GcnoFunction fn : getFnctns()) {
for (Block b : fn.getFunctionBlocks()) {
long[] blockLines = b.getEncoding();
if (blockLines == null) {
continue;
}
for (int i = 2; i < blockLines.length; ++i) {
long lineno = blockLines[i];
if (lineno == 0)
break;
Line line = lines.get((int) lineno);
line.addBlock(b);
}
}
}
}
}