栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

阿里代码规范检查自定义规则扩展

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

阿里代码规范检查自定义规则扩展

1.获取源码

阿里代码规范开源地址:https://github.com/alibaba/p3c.git

2.代码实现

扩展自定义规则需要修改p3c-pmd项目,直接用idea打开该项目即可

2.1 具体规则

检测实体类是否实现Serializable接口
1.首先要判断哪些类是实体类
2.判断实现的接口是否包括Serializable,不包括则提醒

2.2 新增java检测代码

在rule包目录下p3c-pmd/src/main/java/com/alibaba/p3c/pmd/lang/java/rule,新增myrule包,并且新增规则类PojoMustImplementsSerializableRule,需要继承AbstractAliCommentRule

package com.alibaba.p3c.pmd.lang.java.rule.myrule;

import com.alibaba.p3c.pmd.I18nResources;
import com.alibaba.p3c.pmd.lang.java.rule.comment.AbstractAliCommentRule;
import com.alibaba.p3c.pmd.lang.java.util.ViolationUtils;
import net.sourceforge.pmd.lang.java.ast.*;

import java.util.List;


public class PojoMustImplementsSerializableRule extends AbstractAliCommentRule {
    private final String POJO_PACKAGE_NAME = ".pojo";

    private final String SERIALIZABLE_NAME = "Serializable";

    private boolean pojoCheck = false;

    private boolean hasSerializable=false;

    @Override
    public Object visit(ASTPackageDeclaration decl, Object data) {
        if(decl.getPackageNameImage().contains(POJO_PACKAGE_NAME)){
            pojoCheck=true;
        }
        return super.visit(decl, data);
    }

    @Override
    public Object visit(ASTClassOrInterfaceDeclaration decl, Object data) {
        if(pojoCheck) {
            List nodes = decl.getSuperInterfacesTypeNodes();
            for (ASTClassOrInterfaceType interfaceType : nodes) {
                if (SERIALIZABLE_NAME.equals(interfaceType.getImage())) {
                    hasSerializable = true;
                    break;
                }
            }
            if(!hasSerializable){
                ViolationUtils.addViolationWithPrecisePosition(this, decl, data,
                        I18nResources.getMessage("java.myrule.PojoMustImplementsSerializableRule.rule.msg",decl.getImage()));
            }
        }
        return super.visit(decl, data);
    }
}

2.3 配置提醒消息

修改p3c-pmd/src/main/resources/messages.xml
注意可以需要和java代码中的配置消息对应

	
        
    
    
        
    
2.4 配置规则

p3c-pmd/src/main/resources/rulesets/java 目录下新增规则配置ali-myrule.xml
一对表示一个规则,可配置多条
language配置java
class需要配置新增的类全路径
priority配置提醒等级




    MyRules

    
        java.myrule.PojoMustImplementsSerializableRule.rule.desc
        3
        
            
        
    

3 更新插件包并检测

打包得到p3c-pmd-2.1.1.jar
本人使用idea,找到阿里代码检测插件安装目录,本机路径
C:UsersSDLYJAppDataRoamingJetBrainsIntelliJIdea2021.2pluginsAlibaba Java Coding Guidelineslib
替换对应jar包,替换需要关闭idea
注意:同时需要修改p3c-common-2.0.1.jar中的配置文件
rulesets/java/ali-pmd.xml
增加新增的规则配置xml

更新重启idea后新增类可看到效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872508.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号