当前位置: 网学 > 编程文档 > JAVA > 正文

用PMD自动执行Java代码静态分析

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式
个if语句且代码块里面没有任何内容
      if ((node.jjtGetParent().jjtGetParent() instanceof ASTIfStatement)
         && node.jjtGetNumChildren()==0) {
         //肯定代码存在问题。把一个RuleViolation加入到Report。
         RuleContext ctx = (RuleContext)data;
         ctx.getReport().addRuleViolation(createRuleViolation(ctx,
            node.getBeginLine()));
      }
      //继续检查树的下一个节点
      return super.visit(node, data);
   }
}



  也许你不能一下子掌握这段代码,其实它的思路还是比较简单的:

  #扩展AbstractRule基类。

  #声明一个“钩子”,一旦我们感兴趣的节点出现,它就会被调用(称为“回调”)。在上面的例子中,我们要求在每一个ASTBlock出现时得到通知,所以声明visit(ASTBlock node, Object data)。

  #在回调函数中,判断是否出现了我们正在检查的问题。本例我们检查是否存在空的if块,所以先判断当前是否在ASTIfStatement之内,然后判断它是否有子节点。

  当然,我们还可以按照另一种方法进行检查:声明一个要求检查ASTIfStatement的回调函数,然后在回调函数中检查是否存在子节点。

  五、配置规则

  写好自定义规则之后,接下来要把它加入到某个PMD规则集。所谓PMD规则集,就是由一组PMD规则构成的集合。每个PMD规则集由一个XML文件定义,下面是一个PMD规则的配置信息的例子:

<rule name="EmptyIfStmt"
   message="避免使用空的if语句"
   class="net.sourceforge.pmd.rules.EmptyIfStmtRule">
   <description>
      找到空的if语句:if检查了条件,但if块里面没有任何内容。
   </description>
   <priority>3</priority>
   <example>
      <![CDATA[
         if (absValue < 1) {
            // not good
         }
      </XMLCDATA>
   </example>
</rule>



  可以看出,规则配置文件包含了许多有用的信息。要运行新添加的规则,只需把规则集XML文件和Java源代码文件放入CLASSPATH,然后运行PMD。

  结束语:本文介绍了PMD如何在不编译代码的情况下分析和寻找代码存在的问题,通过几个简单的例子了解了EBNF语法、JavaCC和AST,以及如何用PMD检查代码存在的问题、如何编写和运用定制PMD规则等。愿PMD能够助你一臂之力!  

  • 上一篇资讯: 了解 JAVA classloader
  • 下一篇资讯: 用Java实现断点续传
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号