统计代码的小工具CodeLineCounter2.0

最新版本
http://zhang-xzhi-xjtu.iteye.com/blog/474702

CodeLineCounter2.0 note.

version 2.0
作者: zhang_xzhi
email: [email protected]
blog: http://zhang-xzhi-xjtu.iteye.com

1 一句话介绍
源代码统计工具,支持基于Spring的配置以及提供了一些扩展点使得用户可以方便的扩展。

2 系统设计及扩展
系统按照以下阶段执行。
阶段1 接收文件      阶段2 统计行数       阶段3 生成报告

接收文件用
public interface CodeFileFilter {
public boolean filterFile(File file);
}
来判断。系统提供了一些Filter,用户也可以提供新的实现。如果用户没有配置Filter,则使用默认的Filter。

DefaultFileter: 默认的Filter,永远处理File。
AndFilter: 多个Filter的逻辑与Filter。
OrFilter: 多个Filter的逻辑或Filter。
NotFilter: 一个Filter的反向Filter。
PostfixIncludeFilter: 后缀Filter,只接受指定后缀名的File。
FileModifyTimeFilter:最后修改时间Filter,只接受指定天数内修改过的File。
DirDenyFilter:拒绝目录Filter,拒绝指定目录。

统计行数用
public interface CodeFileParser {
public ResultItem parse(File file);
}
定义。ResultItem中包含文件名和行数。系统提供了一些parser,用户也可以提供新的实现。
如果用户没有配置Parser,则使用默认的Parser。

DefaultParser: 默认的parser,统计文件所有的行数。
CStyleParser:统计行数,但是不计空行,注释行。

一次检查结果可以使用多种形式报告,报告用
public interface Reporter {
public void report(Set<ResultItem> resultSet);
}
定义。报告可以是任何形式,系统提供了一些Reporter,用户也可以提供新的实现。
如果用户没有配置Reporter,则使用默认的Reporter。

DefaultReporter: 默认的Reporter,简单的在控制台打印检查结果。
PostfixReporter: 基于后缀的统计,基于后缀的统计。

3 配置
logconfig.xml 日志配置文件。
item.xml 检查项配置文件。
在item.xml里面配置Filter,Parser,Reporter。DirConfigItem代表一个检查项,一个检查项有一个根目录,
一个filter来filter要检查的文件,一个Parser来分析文件,一个Reporter列表来报告检查结果。
DirConfigItemCollection可以包含多个DirConfigItem。

4 例子

item.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>

  <bean id="defaultReporter" class="allen.reporter.DefaultReporter">  
  </bean>
  <bean id="postfixReporter" class="allen.reporter.PostfixReporter">  
  <property name="list">
    <list>
        <value>java</value>
        <value>c</value>
        <value>xml</value>       
    </list>  
    </property>
  </bean>
  

<bean id="filter" class="allen.filter.PostfixIncludeFilter">
    <property name="postfixList">
    <list>
        <value>.java</value>
        <value>.c</value>
        <value>.xml</value>       
    </list>  
    </property>
  </bean>

<bean id="item1" class="allen.DirConfigItem">
    <property name="baseDir"><value>F:\java_program</value></property>
    <property name="filter"><ref bean="filter"/></property>
    <property name="reporters">
    <list>
       <ref bean="defaultReporter" />
       <ref bean="postfixReporter" />  
    </list>  
    </property>
  </bean>
 
<bean id="item2" class="allen.DirConfigItem">
    <property name="baseDir"><value>F:\c_program</value></property>
    <property name="filter"><ref bean="filter"/>
    </property> 
  </bean>


  <bean id="dirConfigItemCollection" class="allen.DirConfigItemCollection">
  <property name="list">
    <list>       
        <ref bean="item1" />
        <ref bean="item2" />
    </list>   
   </property>
  </bean>
 
</beans>

你可能感兴趣的:(spring,C++,c,xml,bean)