CheckStyle的自定义开发

CheckStyle,正如名字所表示的,是用来检查Java Style的。它的开发站点(http://checkstyle.sourceforge.net/index.html)上的说明是“Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. ” 由于其开源,这个工具在公司开发项目时的code review方面有很好的应用(当然,WSAD/RAD本身也有比较强大的code review 功能,但是笔者不知道能不能够自定义)。本文主要是想讲一下在CheckStyle的基础上,自定义Style(以及检查这种Style)的方法,并顺便讲一下它的Elipse插件开发。CheckStyle当前最新的版本是4.3,本文中涉及的为4.2。

首先,CheckStyle的主要流程是:

1。对Java文件进行词法语法分析,生成语法树。

2。载入配置文件(checkstyle-metadata.xml以及自定义的配置文件),register check事件。

3。按照深度优先遍历对语法树进行解析,按照注册的事件,在到达某些节点 ( AST ) 时进行style检查(AST,A child-Sibling Tree,是语法树中的某个节点,其类型在TokenTypes类中定义。)

我们所说的自定义Style的检查,就是在第二步设定的。这里牵涉到一个叫com.puppycrawl.tools.checkstyle.api.Check 的类,我们通常需要重载其中的两个函数:public int[] getDefaultTokens()public void visitToken(DetailAST ast). 这两个函数的含义为,在遍历语法树的过程中,每当到达getDefaultTokens函数所返回的AST类型, 程序就进入visitToken进行具体的检查和分析,即,真正的分析检查过程是在visitToken中实现的。

比如代码:

public   int [] getDefaultTokens() {
        
return   new   int [] { TokenTypes.METHOD_DEF };
    }

它的意思就是说,每当语法树遍历到达METHOD_DEF类型的AST,系统就进入visitToken函数进行分析。

 

现在已经有开发完成的基于CheckStyle的插件,并且可配置性等方面已经做得比较完善。然而有时,这一类插件常常限制了我们所需要的功能,并且,面面俱到的设计在针对项目使用时会降低不少效率。所以,复杂的未必最好,合适的才是最佳。我想这就是我为什么写这些东西的原因吧。

你可能感兴趣的:(J2EE)