zoukankan      html  css  js  c++  java
  • PMD执行Java代码分析的原理

    PMD执行Java代码分析的原理
    PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产生符合特定语法结构的语法,同时又在JavaCC的基础上添加了语义的概念即JJTree,通过JJTree的一次转换,这样就将Java代码转换成了一个AST,AST是Java符号流之上的语义层,PMD把AST处理成一个符号表。然后编写PMD规则,一个PMD规则可以看成是一个Visitor,通过遍历AST找出多个对象之间的一种特定模式,即代码所存在的问题。
    自定义PMD实现规则有如下2种方式:
    (1). 自定义Java类并继承AbstractJavaRule抽象类,重写visit()方法,并在xml规则文件中引用该类。

    name:自定义规则的名字;
    language:要检查的语言
    message:该规则被触发时,给出的消息提示;
    class:规则使用类的全类名;
    description:规则的描述信息;
    priority:优先级别,从高到低依次是1-Blocker, 2-Critical, 3-Urgent, 4-important, 5-Warning;
    example:在CDATA标签中书写一个该规则对应的实例。
    示例:
    自定义Java类对应xml规则
    (2). 自定义XPATH表达式,编写xml规则,在规则的properties-property节点中定义XPATH表达式,该表达式是依赖于抽象语法树AST的。

    name:自定义规则的名字;
    language:要检查的语言
    message:该规则被触发时,给出的消息提示;
    class: xPath规则统一配置为net.sourceforge.pmd.lang.rule. XPathRule;
    description:规则的描述信息;
    priority:优先级别,从高到低依次是1-Blocker, 2-Critical, 3-Urgent, 4-important, 5-Warning;
    example:在CDATA标签中书写一个该规则对应的实例。
    properties:这个是xpath必须配置的,其子节点property,value值使用CDATA标签配置对应的xpath表达式的形式,可以有多个property。
    示例:
    自定义XPATH
    阿里代码规约插件p3c-pmd源码实现解析
    p3c-pmd的项目开源托管在github上,可以自行去https://github.com/alibaba/p3c下载,项目是maven管理,项目代码结构如下:

    Paste_Image.png
    p3c-pmd插件的实现是基于pmd的,更具体的来说是基于pmd-java的,因为pmd不仅支持java代码分析,还支持其他多种语言。具体实现自定义规则的方式当然也是上节所介绍的2种方式:自定义Java类和XPATH规则。
    p3c-pmd插件封装了2个抽象类,分别介绍如下:
    (1). 第一个是AbstractAliRule 继承了pmd的 AbstractJavaRule并重写visit(node,data)方法;AbstractPojoRule又继承了AbstractAliRule,用于检测Java类是否有Pojo。

    第二个是AbstractXpathRule继承了pmd的抽象类XPathRule,用于处理XPATH规则。

    最后给大家一个小小的福利,我把p3c-pmd项目的源码分包生成了对应的类图,大家可以自行下载,关注Java技术日志订阅号后,在消息框回复关键字:p3c或pmd可以获取类图下载地址。


    本订阅号提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。“

    作者:梁朋举
    链接:https://www.jianshu.com/p/d1dda276c91c
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    利用Intelligencia.UrlRewriter.dll实现URL重写
    IIS环境下快速安装、配置和调试PHP5.2.0
    IIS6的PHP最佳配置方法
    PHP $_FILES详解
    一个顶N个的NextResult
    mysql 按年度、季度、月度、周、日SQL统计查询
    Windows Server 2003 “Loaded Configuration File none”未加载php.ini的解决办法
    windows 7 旗舰版,有效注册码
    php5调用web service (笔者测试成功)
    WEB架构师成长之路之一走正确的路
  • 原文地址:https://www.cnblogs.com/ITniu/p/13679926.html
Copyright © 2011-2022 走看看