1 26 package org.hammurapi.inspectors.metrics; 27 28 import java.util.Enumeration ; 29 import java.util.Hashtable ; 30 31 import org.w3c.dom.Document ; 32 import org.w3c.dom.Element ; 33 34 import com.pavelvlasov.jsel.Parameter; 35 import com.pavelvlasov.jsel.Type; 36 import com.pavelvlasov.jsel.TypeBody; 37 import com.pavelvlasov.jsel.TypeDefinition; 38 import com.pavelvlasov.jsel.TypeSpecification; 39 import com.pavelvlasov.jsel.VariableDefinition; 40 import com.pavelvlasov.jsel.impl.ClassImpl; 41 import com.pavelvlasov.jsel.impl.ClassTypeSpecificationImpl; 42 43 57 public class Coupling { 58 59 public Hashtable classCouplingMetric = new Hashtable (); 60 public Hashtable packageCouplingMetric = new Hashtable (); 61 public Hashtable allClasses = null; 62 public Hashtable allMethodsImplemented = new Hashtable (); 63 public Hashtable allMethodsInvoked = new Hashtable (); 64 65 public Hashtable allVariables = new Hashtable (); 66 67 68 private CouplingMetricOfPackage totalCouplingMetricOfProject = new CouplingMetricOfPackage("Project"); 70 71 91 92 93 95 public void incrementVariableCoupling( Parameter parameter){ 96 97 try { 98 if (parameter.getTypeSpecification() instanceof ClassTypeSpecificationImpl ) { 99 TypeSpecification ts = parameter.getTypeSpecification(); 100 CouplingMetricOfClass cmcParent = 101 (CouplingMetricOfClass)classCouplingMetric.get( parameter.getParent().getEnclosingType().getFcn() ); 102 CouplingMetricOfClass cmcVar = (CouplingMetricOfClass)classCouplingMetric.get( ts.getName() ); 103 if( cmcVar == null){ 104 classCouplingMetric.put( ts.getName(), new CouplingMetricOfClass( ts ) ); 105 }else{ 106 cmcVar.afferentVariableCounter++; 107 } 108 if( cmcParent == null){ 109 classCouplingMetric.put( parameter.getParent().getEnclosingType().getFcn(), 110 new CouplingMetricOfClass( parameter.getParent().getEnclosingType() ) ); 111 }else{ 112 cmcParent.efferentVariableCounter++; 113 } 114 } 117 118 } catch (Exception e) { 119 e.printStackTrace(); 121 } 122 123 124 } 125 126 public String determineKey( VariableDefinition var){ 127 String str = "<undefined>"; 128 if( var != null){ 129 if( var.getParent() instanceof ClassImpl) { 130 return ((ClassImpl)var.getParent()).getFcn(); 131 } else { 132 } 134 } 135 136 return str; 137 } 138 139 public void incrementVariableCoupling( VariableDefinition var){ 140 try { 141 if( var != null){ 144 145 String key = determineKey( var) ; 146 CouplingMetricOfClass cmcParent = (CouplingMetricOfClass)classCouplingMetric.get( key ); 147 CouplingMetricOfClass cmcVar = (CouplingMetricOfClass)classCouplingMetric.get( var.getTypeSpecification().getName() ); 148 if( cmcVar == null){ 149 classCouplingMetric.put( var.getTypeSpecification().getName(), new CouplingMetricOfClass( var.getTypeSpecification() ) ); 150 }else{ 151 cmcVar.afferentVariableCounter++; 152 } 153 if( cmcParent == null){ 154 TypeBody parentEnclosingType = var.getParent().getEnclosingType(); 155 if (parentEnclosingType!=null) { 156 classCouplingMetric.put( parentEnclosingType.getFcn(), new CouplingMetricOfClass( parentEnclosingType ) ); 157 } 158 }else{ 159 cmcParent.efferentVariableCounter++; 160 } 161 } 164 165 } catch (Exception e) { 166 e.printStackTrace(); 168 } 169 170 } 171 172 173 174 176 public void doIt(){ 177 179 Enumeration classEnum = allClasses.elements(); 180 while (classEnum.hasMoreElements()){ 181 TypeDefinition c =(TypeDefinition)classEnum.nextElement(); 182 CouplingMetricOfClass thisCmc = (CouplingMetricOfClass)this.classCouplingMetric.get( c.getFcn() ); 183 184 187 determineVariableMetricForClass( c, thisCmc); 189 190 } 191 this.aggregateToPackageMetric(); 192 this.findDefects(); 193 this.reporting(); 194 return; 195 } 196 197 198 public void determineVariableMetricForClass( 199 TypeDefinition c, 200 CouplingMetricOfClass thisCmc) { 201 222 } 223 224 public void assignVariableCountersTo(VariableDefinition v, CouplingMetricOfClass thisCmc) { 225 CouplingMetricOfClass cmc = (CouplingMetricOfClass) this.classCouplingMetric.get(v.getName()); 227 229 if (cmc == null) { 230 } 232 233 cmc.afferentVariableCounter++; 236 thisCmc.efferentVariableCounter++; 238 } 239 240 public void determineMethodMetricForClass(Type c, CouplingMetricOfClass thisCmc) { 241 292 } 293 294 public void aggregateToPackageMetric() { 295 330 } 331 332 public void findDefects(){ 333 Enumeration metricEnum = classCouplingMetric.elements(); 334 while (metricEnum.hasMoreElements()){ 335 CouplingMetricOfClass cmc = (CouplingMetricOfClass)metricEnum.nextElement(); 336 } 338 Enumeration enump = packageCouplingMetric.elements(); 339 while (enump.hasMoreElements()){ 340 CouplingMetricOfPackage cmc = (CouplingMetricOfPackage)enump.nextElement(); 341 } 342 343 } 344 public CouplingMetricOfClass initializeCouplingMetricOfClassFor(Type c){ 345 351 return null; 352 } 353 354 public void reporting() { 355 432 } 433 434 435 public Element toDom(Document document){ 436 437 Element root=document.createElement("Coupling"); 438 Element ret=document.createElement("ListCouplingMetricOfClasses"); 439 root.appendChild(ret); 440 441 442 ret.setAttribute("size", String.valueOf(this.classCouplingMetric.size())); 443 Enumeration enumc = this.classCouplingMetric.elements(); 444 while (enumc.hasMoreElements()) { 445 CouplingMetricOfClass cmc = 446 (CouplingMetricOfClass) enumc.nextElement(); 447 ret.appendChild(cmc.toDom(document)); 448 } 449 return ret; 450 451 } 452 453 } 454 455 | Popular Tags |