package jdepend.util.analyzer.element;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import jdepend.model.JDependUnit;
import jdepend.model.MetricsMgr;
import jdepend.model.result.AnalysisResult;
import jdepend.model.util.JDependUnitByMetricsComparator;
import jdepend.util.analyzer.framework.AbstractAnalyzer;
import jdepend.util.analyzer.framework.Analyzer;
import jdepend.util.analyzer.framework.AnalyzerException;
public class CheckButterflyObject extends AbstractAnalyzer {
private static final long serialVersionUID = 1060879084785500223L;
private int number;
public CheckButterflyObject() {
super("蝶形对象检测", Analyzer.Attention, "检查蝶形对象是否依赖了其它对象");
if (this.number == 0) {
this.number = 5;
}
}
protected void doExecute(AnalysisResult result) throws AnalyzerException {
List<JDependUnit> units = new ArrayList<JDependUnit>(result.getComponents());
Collections.sort(units, new JDependUnitByMetricsComparator(MetricsMgr.Ca, false));
int count = 0;
for (int i = 0; i < units.size() && count < this.number; i++) {
if (units.get(i).getEfferentCoupling() > 0) {
List<JDependUnit> ceUnits = new ArrayList<JDependUnit>();
for (JDependUnit ceUnit : units.get(i).getEfferents()) {
if (result.getTheRelation(units.get(i).getName(), ceUnit.getName()).isAttention()) {
ceUnits.add(ceUnit);
}
}
if (ceUnits.size() > 0) {
this.print((count + 1) + "、" + units.get(i).getName() + "(Ca:" + units.get(i).getAfferentCoupling()
+ ") problem Ce(" + ceUnits.size() + "):\n");
for (JDependUnit ceUnit : ceUnits) {
this.printTab();
this.print(ceUnit.getName() + "\n");
}
count++;
}
}
}
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String getExplain() {
return "/culture/关注与反模式/ButterflyObject.htm";
}
}