package jdepend.service.avertcheat.stabilityClassIdentifyer;
import jdepend.metadata.JavaClass;
import jdepend.metadata.Method;
import jdepend.model.JavaClassUnit;
import jdepend.model.result.AnalysisRunningContext;
import jdepend.service.avertcheat.framework.JavaClassAvertCheat;
public final class StabilityClassIdentifyer extends JavaClassAvertCheat {
@Override
public String getName() {
return "判断指定的类是否稳定";
}
@Override
public String getTip() {
return "XXXUtil,XXXException、简单VO等都具有相当的稳定性,对它们的依赖应该不敏感";
}
@Override
public boolean enable(AnalysisRunningContext context) {
return context.getProfileFacade().getJavaClassUnitProfile().isStableRule();
}
@Override
protected void handle(JavaClassUnit javaClassUnit) {
boolean stability = true;
// 类只有static的方法
for (Method method : javaClassUnit.getJavaClass().getSelfMethods()) {
if (!method.isConstruction() && !method.isStatic()) {
stability = false;
break;
}
}
if (stability) {
javaClassUnit.setStable(true);
return;
}
// 不依赖其他类的VO
if (javaClassUnit.getJavaClass().getCeList().size() == 0
&& javaClassUnit.getJavaClass().getClassType().equals(JavaClass.VO_TYPE)) {
if (!javaClassUnit.getJavaClass().haveBusinessMethod()) {
javaClassUnit.setStable(true);
return;
}
}
}
@Override
public Integer order() {
return 1;
}
}