SonarQube插件开发自定义规则(2)常用api-扫描java文本内容
来源:互联网 发布:银行卡四件套淘宝网 编辑:程序博客网 时间:2024/06/05 16:19
1、文本式读取被扫描java文件
public class TXTestCheck extends BaseTreeVisitor implements JavaFileScanner { public void scanFile(JavaFileScannerContext context) { scan(context.getTree()); visitFile(context.getFile()); } private void visitFile(File file) { // 直接获取当前java文件的所有文本 List<String> lines = new ArrayList<String>();; try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while((line = reader.readLine()) != null){ lines.add(line); } reader.close(); } catch (IOException e) { throw new IllegalStateException(e); } }}
2、sonar树扫描节点
public class TXTestCheck extends BaseTreeVisitor implements JavaFileScanner { private JavaFileScannerContext context; @Override public void visitClass(ClassTree tree) { // 类名 System.out.println(tree.simpleName().name()); // 是否是抽象类 tree.symbol().isAbstract(); super.visitClass(tree); } @Override public void visitMethod(MethodTree tree) { // 方法名 System.out.println(tree.simpleName().name()); // 是否是抽象方法 tree.symbol().isAbstract(); // 是否是public方法 tree.symbol().isPublic(); // ... super.visitMethod(tree); } public void scanFile(JavaFileScannerContext context) { this.context = context; scan(context.getTree()); }}
3、指定soanr树扫描节点
public class TXTestCheck extends IssuableSubscriptionVisitor { @Override public List<Tree.Kind> nodesToVisit() { //指定要扫描的节点,在visitNode方法中获取到指定的节点 return ImmutableList.of(Tree.Kind.METHOD, Tree.Kind.VARIABLE); } @Override public void scanFile(JavaFileScannerContext context) { super.context = context; super.scanFile(context); } @Override public void visitNode(Tree tree) { if (tree instanceof MethodTree) { MethodTree methodTree = (MethodTree) tree; System.out.println(methodTree.simpleName().name()); } if (tree instanceof VariableTree) { VariableTree variableTree = (VariableTree) tree; System.out.println(variableTree.simpleName().name()); } }}
4、获取注释
/** * 获取类注释 * @param tree * @return */private String getJavadoc(ClassTree tree){ String javadoc = null; for(SyntaxTrivia trivia : tree.modifiers().firstToken().trivias()){ String comment = trivia.comment(); if(comment != null && comment.trim().startsWith("/*")){ // 获取javadoc注释 System.out.println(comment); } if(comment != null && comment.trim().startsWith("//")){ //获取普通单行注释"//" System.out.println(comment); } } return javadoc;}/** * 获取方法注释 * @param tree * @return */private String getJavadoc(MethodTree tree){ String javadoc = null; for(SyntaxTrivia trivia : tree.modifiers().firstToken().trivias()){ String comment = trivia.comment(); if(comment != null && comment.trim().startsWith("/*")){ // 获取javadoc注释 System.out.println(comment); } if(comment != null && comment.trim().startsWith("//")){ //获取普通单行注释"//" System.out.println(comment); } } return javadoc;}/** * 获取成员变量注释 * * 需要先判断是否为类成员变量: * if(variableTree.symbol().isPublic() || variableTree.symbol() * .isProtected() ||variableTree.symbol().isPrivate()){getJavadoc(variableTree)} * @param tree * @return */private String getJavadoc(VariableTree tree){ String javadoc = null; for(SyntaxTrivia trivia : tree.modifiers().firstToken().trivias()){ String comment = trivia.comment(); if(comment != null && comment.trim().startsWith("/*")){ // 获取javadoc注释 System.out.println(comment); } if(comment != null && comment.trim().startsWith("//")){ //获取普通单行注释"//" System.out.println(comment); } } return javadoc;}/** * 获取枚举的javadoc * @param tree * @return */private String getJavadoc(EnumConstantTree tree){ String javadoc = null; for(SyntaxTrivia trivia : tree.initializer().firstToken().trivias()){ String comment = trivia.comment(); if(comment != null && comment.trim().startsWith("/*")){ // 获取javadoc注释 System.out.println(comment); } if(comment != null && comment.trim().startsWith("//")){ //获取普通单行注释"//" System.out.println(comment); } } return javadoc;}
注:sonarqube5.x和6.x版本获取注释的方法有细微不同,此处的代码适用于6.x版本
阅读全文
0 0
- SonarQube插件开发自定义规则(2)常用api-扫描java文本内容
- SonarQube插件开发自定义规则(4)常用api-其他
- SonarQube插件开发自定义规则(3)常用api-记录java文件错误行
- SonarQube插件开发自定义规则(6)注意事项
- SonarQube插件开发自定义规则(7)测试插件
- SonarQube插件开发自定义规则(1)简易demo
- SonarQube插件开发自定义规则(5)添加可配置参数
- UILabel (API+自定义多颜色文本内容)
- 《阿里巴巴Java开发规约》扫描插件介绍
- 《阿里巴巴Java开发手册》扫描插件
- SonarQube扫描iOS代码
- SonarQube扫描Swift代码
- sonarQube之sonarLint扫描
- Eclipse plugins 插件开发学习 - 使用 IScanner 扫描 Java 源代码
- Android静态代码扫描-自定义规则
- 插件85:切换文本内容
- SonarQube安装、配置、扫描代码
- java常用api(2)
- 用顺序表实现俩有序顺序表拼接后还是有序的
- 九月总结:快速成长的一个月
- DateConverter does not support default String to 'Date' conversion
- C/C++程序的内存空间及堆、栈区比较
- JavaScript框架之AngularJS学习——作用域与事件(中)
- SonarQube插件开发自定义规则(2)常用api-扫描java文本内容
- HTML——基础DAY2
- Ubuntu 16.04 安装Apache 服务器
- Android JNI中的Log打印
- String对象的indexOf方法
- jQuery代码块
- PHP CURL访问HTTPS使用详解
- 网站后台添加富文本编辑器
- jquery parent()方法在table标签中使用需要注意的一个问题