SonarQube。为Java创建自定义规则

时间:2017-03-29 11:49:05

标签: java sonarqube

任何人都可以帮我解决这个问题。

我有下一个测试文件:

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

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

1 个答案:

答案 0 :(得分:1)

由于它不是那么明确,我猜测您正在尝试检索用于初始化provider变量的实现类型,该变量将为EnvironmentVariableCredientialsProvider

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

  • provider IdentifierTree,使用语义API获取相应的符号。
  • provider符号跳转到声明树(如果标识符在另一个文件中声明,则为null)。
  • declaration开始,如果树是VariableTree,请查找初始化表达式。
  • ExpressionTree获取符号类型Type,它将为您提供实现类型。

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

相关问题