阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析

阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析

梁朋举 Java技术日志 2017-10-15

↑ 点击上方“Java技术日志”关注我们

2017年9月底,阿里巴巴集团发布了《阿里巴巴Java开发手册》PDF终极版,2017年10月14日,在2017杭州云栖大会上,Java代码规约插件全球首发,p3c-pmd插件支持Eclipse4.2以上版本和IDEA14.1.7以上版本。

阿里巴巴Java代码规约插件安装

 

阿里Java代码规约插件有Eclipse插件和IDEA插件。

Eclipse插件安装

 

Eclipse版插件支持4.2(Juno,JDK1.8+)及以上版本,通过 Help
-- Install New Software 然后输入https://p3c.alibaba.com/plugin/eclipse/update 即可看到安装列表。可以通过 Help-- Check for Udates 进行插件新版检测。

 

Eclipse插件安装

勾选Ali-CodeAnalysis,Next,安装完成后重启即可。

IDEA插件安装

代码规范工具

IDEA版的插件已发布到IDEA官方仓库中(最低支持版本14.1.7,JDK1.7+),只需打开File-- Settings --Plugins -- Browse repositories 输入 Alibaba 搜索便可以看到对应插件,点击安装等待安装完成。IDEA会自动检测插件新版并提示。
File--Setting--Plugins--Browse repositories

 

检索alibaba,第一个就是Alibaba Java Coding Guidelines,点击右侧Install即可,可以看到下载量是6天前已经发布。安装完毕后重启IDEA即可。

 

Alibaba Java Coding Guidelines

重启IDEA后,可以看到Tools菜单下面有阿里编程规约的插件,有三项子功能:
编程规约扫描(快捷键Ctrl+Alt+Shift+J)、
关闭/打开实时检测功能、
切换语言至英文(English):点击后提示:SmartFox Intellij IDEA Plugin切换语言成功,重启后生效
中文界面如下:

 

中文界面

英文界面如下:

 

英文界面

阿里代码规约插件的使用

 

这里仅仅以IDEA环境为例进行说明,Eclipse操作类似

代码检查 Inspections

 

File-Settings-Editor- Inspections,打开后右侧找到Ali-Check,可以看到很多代码检查规则,可以修改规则对应提示的颜色。这里一共有55条规则。

 

Inspections

以编程规约之命名风格为例:

  • 变量test_Double命名不符合驼峰形式,高亮显示,Ctrl+F1给出修改提示

 

驼峰形式变量名称

  • 常量Test_CONSTANT命名不符合规范,高亮显示,Ctrl+F1给出修改提示

 

常量规范

代码分析Code Analyze

 

在当前类中右键或者在左侧Project视图中类名称上右键,选择Alibaba Coding Guidelines Analyze, 可以对某一个类进行代码分析;也可以直接在Project视图中,项目的包上面单击右键,选择Alibaba Coding Guidelines Analyze,可以批量分析包中所有类

 

Alibaba Coding Guidelines Analyze

分析结果在IDEA底部逐条给出,我们还是对上面的类进行分析,结果如下:

 

分析结果

 

单击红色矩形框可以跳转到代码所在行。

P3C-PMD插件实现规则说明

 

P3C-PMD插件基于PMD实现了《阿里巴巴Java开发手册》中涉及的48条规则。
编程规约 (六)并发处理,实现了1、2、3、4、5、10、11、12等8条规则;
编程规约(五)集合处理,实现了4、5、6、7、9、11等6条规则;
编程规约(一)命名风格,实现了1、2、3、4、5、6、7、8、9、13等10条规则;
编程规约(二)常量定义,实现了1、2等2条规则;
编程规约(四)OOP规约,实现了5、6、7、8、9、12、17等7条规则;
编程规约(七)控制语句,实现了1、2、4等3条规则;
编程规约(八)注释规约,实现了1、2、3、4、5等5条规则;
编程规约(九)其他,实现了1、3、4、5等4条规则;
异常日志 (一)异常处理,实现了5、7、10等3条规则;

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管理,项目代码结构如下:

 

 


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规则。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值