/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.whip.coveragedata;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/**
* @author Shuyang Zhou
*/
public class ClassData
extends CoverageDataContainer<Integer, LineData, ClassData> {
public ClassData(String name) {
_name = name;
}
public LineData addLine(int lineNumber) {
LineData lineData = new LineData(_name, lineNumber);
LineData previousLineData = children.putIfAbsent(
lineData.getLineNumber(), lineData);
if (previousLineData == null) {
return lineData;
}
return previousLineData;
}
public void addLineJump(int lineNumber, int branchNumber) {
LineData lineData = _getLineData(lineNumber);
lineData.addJump(new JumpData(_name, lineNumber, branchNumber));
}
public void addLineSwitch(
int lineNumber, int switchNumber, int min, int max) {
LineData lineData = _getLineData(lineNumber);
lineData.addSwitch(
new SwitchData(_name, lineNumber, switchNumber, max - min + 1));
}
public void addLineSwitch(int lineNumber, int switchNumber, int[] keys) {
LineData lineData = _getLineData(lineNumber);
lineData.addSwitch(
new SwitchData(_name, lineNumber, switchNumber, keys.length));
}
public Set<LineData> getLines() {
Set<LineData> set = new TreeSet<>(
new Comparator<LineData>() {
@Override
public int compare(LineData lineData1, LineData lineData2) {
return lineData1.getLineNumber() -
lineData2.getLineNumber();
}
});
set.addAll(children.values());
return set;
}
public String getName() {
return _name;
}
@Override
public int getNumberOfCoveredBranches() {
int numberOfCoveredBranches = 0;
for (LineData lineData : children.values()) {
numberOfCoveredBranches += lineData.getNumberOfCoveredBranches();
}
return numberOfCoveredBranches;
}
@Override
public int getNumberOfValidBranches() {
int numberOfValidBranches = 0;
for (LineData lineData : children.values()) {
numberOfValidBranches += lineData.getNumberOfValidBranches();
}
return numberOfValidBranches;
}
@Override
public void merge(ClassData classData) {
if (!_name.equals(classData._name)) {
throw new IllegalArgumentException(
"Class data mismatch, left : " + _name + ", right : " +
classData._name);
}
super.merge(classData);
}
public void touch(int lineNumber) {
LineData lineData = _getLineData(lineNumber);
lineData.touch();
}
public void touchJump(int lineNumber, int branchNumber, boolean branch) {
LineData lineData = _getLineData(lineNumber);
lineData.touchJump(branchNumber, branch);
}
public void touchSwitch(int lineNumber, int switchNumber, int branch) {
LineData lineData = _getLineData(lineNumber);
lineData.touchSwitch(switchNumber, branch);
}
private LineData _getLineData(int lineNumber) {
LineData lineData = children.get(lineNumber);
if (lineData == null) {
throw new IllegalStateException(
"No instrument data for class " + _name + " line " +
lineNumber);
}
return lineData;
}
private static final long serialVersionUID = 1;
private final String _name;
}