package jdepend.util.analyzer.element; 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 final class TransactionalAnnotationChecker extends AbstractAnalyzer { /** * */ private static final long serialVersionUID = -3741562066847145590L; private String daoEndClassName; private String serviceEndClassName; private String facadeEndClassName; private String controllerEndClassName; public TransactionalAnnotationChecker() { super("搜索不合理的事务注解", Analyzer.AntiPattern, "搜索不合理的事务注解"); } @Override protected void doExecute(AnalysisResult result) throws AnalyzerException { if (controllerEndClassName != null && controllerEndClassName.length() > 0) { this.print("Controller方法上标注了事务注解:\n"); L1: for (JavaClassUnit javaClass : result.getClasses()) { if (javaClass.getName().endsWith(controllerEndClassName)) { if (!javaClass.getJavaClass().isInterface()) { if (javaClass.getJavaClass().getTransactional() != null) { this.print(javaClass.getName()); this.print("\n"); break L1; } for (Method method : javaClass.getJavaClass().getSelfMethods()) { if (method.getTransactional() != null && !method.isConstruction()) { this.print(javaClass.getName() + "." + method.getName()); this.print("\n"); } } } } } this.print("\n"); } if (facadeEndClassName != null && facadeEndClassName.length() > 0) { this.print("Facade方法上沒有标注事务注解:\n"); L2: for (JavaClassUnit javaClass : result.getClasses()) { if (javaClass.getName().endsWith(facadeEndClassName)) { if (!javaClass.getJavaClass().isInterface()) { if (javaClass.getJavaClass().getTransactional() != null) { break L2; } for (Method method : javaClass.getJavaClass().getSelfMethods()) { if (method.getTransactional() == null && method.isPublic() && !method.isConstruction()) { this.print(javaClass.getName() + "." + method.getName()); this.print("\n"); } } } } } this.print("\n"); } if (serviceEndClassName != null && serviceEndClassName.length() > 0) { this.print("Service方法上沒有标注事务注解:\n"); L3: for (JavaClassUnit javaClass : result.getClasses()) { if (javaClass.getName().endsWith(serviceEndClassName)) { if (!javaClass.getJavaClass().isInterface()) { if (javaClass.getJavaClass().getTransactional() != null) { break L3; } for (Method method : javaClass.getJavaClass().getSelfMethods()) { if (method.getTransactional() == null && method.isPublic() && !method.isConstruction()) { this.print(javaClass.getName() + "." + method.getName()); this.print("\n"); } } } } } this.print("\n"); } if (daoEndClassName != null && daoEndClassName.length() > 0) { this.print("DAO方法上标注了事务注解:\n"); L4: for (JavaClassUnit javaClass : result.getClasses()) { if (javaClass.getName().endsWith(daoEndClassName)) { if (!javaClass.getJavaClass().isInterface()) { if (javaClass.getJavaClass().getTransactional() != null) { this.print(javaClass.getName()); this.print("\n"); break L4; } for (Method method : javaClass.getJavaClass().getSelfMethods()) { if (method.getTransactional() != null && !method.isConstruction()) { this.print(javaClass.getName() + "." + method.getName()); this.print("\n"); } } } } } this.print("\n"); } } public String getDaoEndClassName() { return daoEndClassName; } public void setDaoEndClassName(String daoEndClassName) { this.daoEndClassName = daoEndClassName; } public String getServiceEndClassName() { return serviceEndClassName; } public void setServiceEndClassName(String serviceEndClassName) { this.serviceEndClassName = serviceEndClassName; } public String getFacadeEndClassName() { return facadeEndClassName; } public void setFacadeEndClassName(String facadeEndClassName) { this.facadeEndClassName = facadeEndClassName; } public String getControllerEndClassName() { return controllerEndClassName; } public void setControllerEndClassName(String controllerEndClassName) { this.controllerEndClassName = controllerEndClassName; } }