pmd 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

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值