sonarqube自定义规则

关于java 自定义规则的研读记录:

1:关于每一个方法中的tree的联想 

看了以前的代码,通过断点调试,方法中的tree参数用处大多是这样;

tree.type().firstToken().text();
tree.type().firstToken().text();
tree.block().body();

这些对于部分需求是不满足的,比如存在多个字符串的拼接,链式编程等

所以在代码中不断地,一步一步的断点,向源码中追寻踪迹,发现了一些有用的东西

比如这两个词 startIndex,endIndex,开始的下标,结束的下标,两个值的差值是token、firstToken().text()的长度,那么这个下标用在了哪里,怎么用?

带着问题找到了这两个个地方

InternalSyntaxToken 这个类中有startIndex,endIndex 两个属性,fromIndex()方法可以获取到开始的下标。

有以上的发现,加上一些其他的网络资料,有一个设想,token是在文件中读出来的字符串是可以根据下标在某个字符串中截取的。

大胆假设小心验证,自己写个流,读取文件,直接把下标写进去截取下,一顿操作猛如虎,一看战绩1-5;除了开头的几个字符串正确,其他的全错了;(不信可以自己试试)

结论:sonarqube读取文件后对字符串进行了处理!plan A,找到sonarqube处理的方法,引用或者抄一份,在源码的海洋里一顿喝水,放弃;执行plan B 看代码!

java自定义规则需要实现JavaFileScanner,有方法一枚scanFile(JavaFileScannerContext var1),这个var1有木有小秘密?上图

getTree()、getFile()、getFileContent()什么是惊喜,什么是惊喜,这就是惊喜,要啥给啥。

有这个,只要我们找对tree,字符串拿来了,咱们想怎样就怎样!

2.阅读源码小发现

java自定义规则继承的父类,各种visit方法各种tree参数

各种visit方法各种tree参数

查看了几个实现类总结点小用法;

1.定位特殊情形的tree.kind()、tree.is(Kind...)

if(tree.kind().equals(Kind))或者tree.is(Kind...)判断tree代表的代码段是不是对应的情形

调用具体实现类的方法验证获取各种值进行判断处理;

如果太复杂,就直接提取tree对应的字符串,根据实际的需求,处理判断.

2.tree.accept(TreeVisitor var1)

可以把tree交给对应的visit方法();

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值