任何人都可以帮助我解决这个问题。
我有下一个测试文件:
AWSCredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
AmazonWebServiceClient client = new AmazonS3Client(provider); // Noncompliant
探索构造函数AmazonS3Client的参数时,是否可以从变量提供程序中提取接口的特定实现?现在,我只能提取此变量的AWSCredentialsProvider。
最佳答案
由于不是很明确,我猜您正在尝试检索用于初始化provider
变量的实现类型,该类型将为EnvironmentVariableCredientialsProvider
。
当前没有实现此目的的简便方法。最好的方法如下:
在provider
IdentifierTree
中,使用语义API到达相应的符号。
从provider
符号跳到声明树(如果标识符在另一个文件中声明,则该树将为null)。
从declaration
,如果树是VariableTree
,则查找初始化程序表达式。
从ExpressionTree
中,获得符号Type的类型,这将为您提供实现类型。
这是第一步,应该可以帮助您进一步发展。当然,接下来您可能需要处理在没有初始化程序的情况下声明变量,然后在其他地方分配变量的情况。要检索这些表达式,请查看符号用法而不是声明,然后遍历树。