// Path: cobertura/src/main/java/net/sourceforge/cobertura/util/StringUtil.java
// public abstract class StringUtil {
// 
// 	/**
// 	 * <p>
// 	 * Replaces all instances of "replace" with "with" from the "original"
// 	 * string.
// 	 * </p>
// 	 * <p/>
// 	 * <p>
// 	 * NOTE: it is known that a similar function is included in jdk 1.4 as replaceAll(),
// 	 * but is written here so as to allow backward compatibility to users using SDK's
// 	 * prior to 1.4
// 	 * </p>
// 	 *
// 	 * @param original The original string to do replacement on.
// 	 * @param replace  The string to replace.
// 	 * @param with     The string to replace "replace" with.
// 	 *
// 	 * @return The replaced string.
// 	 */
// 	public static String replaceAll(String original, String replace, String with) {
// 		if (original == null) {
// 			return original;
// 		}
// 
// 		final int len = replace.length();
// 		StringBuffer sb = new StringBuffer(original.length());
// 		int start = 0;
// 		int found = -1;
// 
// 		while ((found = original.indexOf(replace, start)) != -1) {
// 			sb.append(original.substring(start, found));
// 			sb.append(with);
// 			start = found + len;
// 		}
// 
// 		sb.append(original.substring(start));
// 		return sb.toString();
// 	}
// 
// 	/**
// 	 * Takes a double and turns it into a percent string.
// 	 * Ex.  0.5 turns into 50%
// 	 *
// 	 * @param value
// 	 *
// 	 * @return corresponding percent string
// 	 */
// 	public static String getPercentValue(double value) {
// 		//moved from HTMLReport.getPercentValue()
// 		value = Math.floor(value * 100) / 100; //to represent 199 covered lines from 200 as 99% covered, not 100 %
// 		return NumberFormat.getPercentInstance().format(value);
// 	}
// 
// }


import net.sourceforge.cobertura.CoverageIgnore;
import net.sourceforge.cobertura.util.StringUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
		return this.lineNumber - ((LineData) o).lineNumber;
	}

	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if ((obj == null) || !(obj.getClass().equals(this.getClass())))
			return false;

		LineData lineData = (LineData) obj;
		return (this.hits == lineData.hits)
				&& ((this.jumps == lineData.jumps) || ((this.jumps != null) && (this.jumps
						.equals(lineData.jumps))))
				&& ((this.switches == lineData.switches) || ((this.switches != null) && (this.switches
						.equals(lineData.switches))))
				&& (this.lineNumber == lineData.lineNumber)
				&& (this.methodDescriptor.equals(lineData.methodDescriptor))
				&& (this.methodName.equals(lineData.methodName));
	}

	public double getBranchCoverageRate() {
		if (getNumberOfValidBranches() == 0)
			return 1d;
		return ((double) getNumberOfCoveredBranches())
				/ getNumberOfValidBranches();
	}

	public String getConditionCoverage() {
		StringBuffer ret = new StringBuffer();
		if (getNumberOfValidBranches() == 0) {
// Path: cobertura/src/main/java/net/sourceforge/cobertura/util/StringUtil.java
// public abstract class StringUtil {
// 
// 	/**
// 	 * <p>
// 	 * Replaces all instances of "replace" with "with" from the "original"
// 	 * string.
// 	 * </p>
// 	 * <p/>
// 	 * <p>
// 	 * NOTE: it is known that a similar function is included in jdk 1.4 as replaceAll(),
// 	 * but is written here so as to allow backward compatibility to users using SDK's
// 	 * prior to 1.4
// 	 * </p>
// 	 *
// 	 * @param original The original string to do replacement on.
// 	 * @param replace  The string to replace.
// 	 * @param with     The string to replace "replace" with.
// 	 *
// 	 * @return The replaced string.
// 	 */
// 	public static String replaceAll(String original, String replace, String with) {
// 		if (original == null) {
// 			return original;
// 		}
// 
// 		final int len = replace.length();
// 		StringBuffer sb = new StringBuffer(original.length());
// 		int start = 0;
// 		int found = -1;
// 
// 		while ((found = original.indexOf(replace, start)) != -1) {
// 			sb.append(original.substring(start, found));
// 			sb.append(with);
// 			start = found + len;
// 		}
// 
// 		sb.append(original.substring(start));
// 		return sb.toString();
// 	}
// 
// 	/**
// 	 * Takes a double and turns it into a percent string.
// 	 * Ex.  0.5 turns into 50%
// 	 *
// 	 * @param value
// 	 *
// 	 * @return corresponding percent string
// 	 */
// 	public static String getPercentValue(double value) {
// 		//moved from HTMLReport.getPercentValue()
// 		value = Math.floor(value * 100) / 100; //to represent 199 covered lines from 200 as 99% covered, not 100 %
// 		return NumberFormat.getPercentInstance().format(value);
// 	}
// 
// }


// Path: cobertura/src/main/java/net/sourceforge/cobertura/coveragedata/LineData.java
import net.sourceforge.cobertura.CoverageIgnore;
import net.sourceforge.cobertura.util.StringUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

		return this.lineNumber - ((LineData) o).lineNumber;
	}

	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if ((obj == null) || !(obj.getClass().equals(this.getClass())))
			return false;

		LineData lineData = (LineData) obj;
		return (this.hits == lineData.hits)
				&& ((this.jumps == lineData.jumps) || ((this.jumps != null) && (this.jumps
						.equals(lineData.jumps))))
				&& ((this.switches == lineData.switches) || ((this.switches != null) && (this.switches
						.equals(lineData.switches))))
				&& (this.lineNumber == lineData.lineNumber)
				&& (this.methodDescriptor.equals(lineData.methodDescriptor))
				&& (this.methodName.equals(lineData.methodName));
	}

	public double getBranchCoverageRate() {
		if (getNumberOfValidBranches() == 0)
			return 1d;
		return ((double) getNumberOfCoveredBranches())
				/ getNumberOfValidBranches();
	}

	public String getConditionCoverage() {
		StringBuffer ret = new StringBuffer();
		if (getNumberOfValidBranches() == 0) {
			ret.append(StringUtil.getPercentValue(1.0));