声纳自定义规则检查java集合类型是unknownSymbol

Posted

技术标签:

【中文标题】声纳自定义规则检查java集合类型是unknownSymbol【英文标题】:sonar custom rule check java collection type is unknownSymbol 【发布时间】:2019-04-22 17:56:55 【问题描述】:

集合类型在自定义声纳检查规则类中始终返回“unknownSymbol”。

//演示类

public class SaasConstantNameCheckCase 
    private static final long serialVersionUID;
    private final String title;
    public static final Integer maxSize = 1111;// Noncompliant
    private static List list = new ArrayList<>();
    private static HashMap<String, String> map = new HashMap<>();

//自定义规则类

@Override
public void visitVariable(VariableTree tree) 
    VariableSymbol symbol = (VariableSymbol) tree.symbol();
    String type = symbol.type().name();
    System.out.println("type->"+type);

//测试结果

type->long
type->String
type->Integer
type->!unknownSymbol!
type->!unknownSymbol!

为什么?

【问题讨论】:

您的示例源代码是否完整?这在我看来像是一个类型解析问题,我没有看到 List 或 HashMap 的“import”语句。 @Mithfindel 我太笨了,忘记导入... 不需要自我抨击,我认为这是一个诚实的错误 :) 如果你不介意,我会发布一个答案来记录这个问题 - 恕我直言,这很常见。 【参考方案1】:

SonarJava 将在无法解析实际类型符号时显示此 unknownSymbol! 字符串。

在这种特殊情况下,您应该使用完全限定类型 java.util.Listjava.util.HashMap,或者导入它们。

【讨论】:

以上是关于声纳自定义规则检查java集合类型是unknownSymbol的主要内容,如果未能解决你的问题,请参考以下文章

如何仅对给定的类类型应用现有的 sonarQube 规则

仅为声纳扫描仪添加某些规则而不是排除

自定义Java集合

声纳因无法被索引两次而失败。请检查包含/排除模式是不是会为主文件和测试文件生成不相交的集合

JAVA笔记(16)---集合- 详解 Set集合( Map 体系集合常用方法;哈希表;二叉树数据结构;Map集合,如何自定义集合排序规则 )

声纳失败,无法索引两次。请检查包含/排除模式是否为主文件和测试文件生成不相交的集合