问题:
1. 针对源码、class做检查有什么区别
2. 各种检查可以做什么
关系链
Registry —-> Issue —-> Implementations —> Detector
创建自定义规则的顺序:
1. 继承IssueRegistry,每一个自定义lint规则只有一个,里面定义了需要生效的规则ISSUE。系统默认的registry为BuiltinIssueRegistry。
2. 继承Detector,选择合并的XXXScanner,可以选择
这几种,作用的话看名字就大概能分出来了。
用于检查Java源码的。
用于检查classes文件的。
用于检查XML文件的。
==========================================================
JavaContext
整个AST的上下文,通过它可以对具体AST里的一个NODE获取信息,如
context.getParentOfType(node,Try.class);// 获取node上的父级try node
context.getLocation(node);//获取node所在的行数
JavaContext.findSurroundingClass(node);//查找拦截到的node被哪个类包裹(ClassDeclaration –> Node),可以通用context.resolve(node)转变为JavaParser.ResolvedClass来操作.
//获取拦截方法所属的类
JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) context.resolve(node);//转化为JavaParser类型
JavaParser.ResolvedClass containingClass = method.getContainingClass();
假设有一个call方法,定义在Caller的类中,在Executor类中调用(如Caller.call),则surroundingClass为Executor,而containing为Caller。
=========================================================
获取
1. 针对源码做检查
2. 针对classes做检查
1. 代码
2. XML
3. 资源
项目范围 :
PersistHelper
RHelper的使用