package jdepend.util.analyzer.element;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import jdepend.metadata.Method;
import jdepend.model.JavaClassUnit;
import jdepend.model.result.AnalysisResult;
import jdepend.util.analyzer.framework.AbstractAnalyzer;
import jdepend.util.analyzer.framework.Analyzer;
import jdepend.util.analyzer.framework.AnalyzerException;
public class LSPPrinciple extends AbstractAnalyzer {
/**
*
*/
private static final long serialVersionUID = -6067470388079134087L;
public LSPPrinciple() {
super("LSP检查", Analyzer.Attention, "识别违反李氏替换原则的地方");
}
protected void doExecute(AnalysisResult result) throws AnalyzerException {
List<JavaClassUnit> members = new ArrayList<JavaClassUnit>(result.getClasses());
Collections.sort(members);
Iterator<JavaClassUnit> memberIter = members.iterator();
Method overridedMethod;
while (memberIter.hasNext()) {
JavaClassUnit current = memberIter.next();
if (!current.getJavaClass().isAbstract()) {
for (Method method : current.getJavaClass().getOverrideMethods()) {
if (method.getSelfLineCount() == 0) {
this.printTable("method", method.getName());
this.printTable("Class", method.getJavaClass().getName());
overridedMethod = current.getJavaClass().getOverridedMethods(method).iterator().next();
this.printTable("OverridedMethod", overridedMethod.getName());
this.printTable("SuperClass", overridedMethod.getJavaClass().getName());
}
}
}
}
}
@Override
public String getExplain() {
StringBuilder explain = new StringBuilder();
explain.append("子类(自己非抽象类)覆盖父类的方法没有实现内容,或者仅仅抛出异常,有可能违反李氏替换原则。<br>");
return explain.toString();
}
}