【问题标题】:SonarQube. Create custom rule for Java声纳曲。为 Java 创建自定义规则
【发布时间】:2017-03-29 20:21:28
【问题描述】:

任何人都可以帮助我处理这个案例。

我有下一个测试文件:

AWSCredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
AmazonWebServiceClient client = new AmazonS3Client(provider); // Noncompliant 

当我探索构造函数 AmazonS3Client 的参数时,有没有办法从变量 provider 中提取接口的特定实现?现在我可以只为这个变量提取 AWSCredentialsProvider。

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    由于它不是那么明确,我猜您正在尝试检索用于初始化 providervariable 的实现类型,这将是 EnvironmentVariableCredientialsProvider

    目前没有简单直接的方法来实现这一点。最好的方法是按照以下方式进行:

    • providerIdentifierTree,使用语义API获取对应的符号。
    • provider 符号跳转到声明树(如果标识符在另一个文件中声明,则该树为空)。
    • declaration,如果树是VariableTree,则查找初始化表达式。
    • ExpressionTree,获取符号Type的类型,这会给你实现类型。

    这是第一步,应该可以帮助您走得更远。当然,接下来您可能需要处理在没有初始化程序的情况下声明变量,然后将其分配到其他地方的情况。要检索这些表达式,请查看符号用法,而不是声明,然后遍历树。

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 2016-06-03
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2016-05-26
    • 2014-08-25
    • 2016-12-11
    相关资源
    最近更新 更多