001 /* 002 * Cobertura - http://cobertura.sourceforge.net/ 003 * 004 * Copyright (C) 2006 Jiri Mares 005 * 006 * Cobertura is free software; you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published 008 * by the Free Software Foundation; either version 2 of the License, 009 * or (at your option) any later version. 010 * 011 * Cobertura is distributed in the hope that it will be useful, but 012 * WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Cobertura; if not, write to the Free Software 018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 019 * USA 020 */ 021 022 package net.sourceforge.cobertura.coveragedata; 023 024 import java.io.Serializable; 025 026 /** 027 * <p> 028 * This class implements HasBeenInstrumented so that when cobertura instruments 029 * itself, it will omit this class. It does this to avoid an infinite recursion 030 * problem because instrumented classes make use of this class. 031 * </p> 032 */ 033 public class JumpData implements BranchCoverageData, Comparable, Serializable, 034 HasBeenInstrumented 035 { 036 private static final long serialVersionUID = 8; 037 038 private int conditionNumber; 039 040 private long trueHits; 041 042 private long falseHits; 043 044 JumpData(int conditionNumber) 045 { 046 super(); 047 this.conditionNumber = conditionNumber; 048 this.trueHits = 0L; 049 this.falseHits = 0L; 050 } 051 052 public int compareTo(Object o) 053 { 054 if (!o.getClass().equals(JumpData.class)) 055 return Integer.MAX_VALUE; 056 return this.conditionNumber - ((JumpData) o).conditionNumber; 057 } 058 059 void touchBranch(boolean branch) 060 { 061 if (branch) 062 { 063 this.trueHits++; 064 } 065 else 066 { 067 this.falseHits++; 068 } 069 } 070 071 public int getConditionNumber() 072 { 073 return this.conditionNumber; 074 } 075 076 public long getTrueHits() 077 { 078 return this.trueHits; 079 } 080 081 public long getFalseHits() 082 { 083 return this.falseHits; 084 } 085 086 public double getBranchCoverageRate() 087 { 088 return ((double) getNumberOfCoveredBranches()) / getNumberOfValidBranches(); 089 } 090 091 public boolean equals(Object obj) 092 { 093 if (this == obj) 094 return true; 095 if ((obj == null) || !(obj.getClass().equals(this.getClass()))) 096 return false; 097 098 JumpData branchData = (JumpData) obj; 099 return (this.trueHits == branchData.trueHits) 100 && (this.falseHits == branchData.falseHits) 101 && (this.conditionNumber == branchData.conditionNumber); 102 } 103 104 public int hashCode() 105 { 106 return this.conditionNumber; 107 } 108 109 public int getNumberOfCoveredBranches() 110 { 111 return ((trueHits > 0) ? 1 : 0) + ((falseHits > 0) ? 1: 0); 112 } 113 114 public int getNumberOfValidBranches() 115 { 116 return 2; 117 } 118 119 public void merge(BranchCoverageData coverageData) 120 { 121 JumpData jumpData = (JumpData) coverageData; 122 this.trueHits += jumpData.trueHits; 123 this.falseHits += jumpData.falseHits; 124 } 125 126 }