2017-03-29 124 views
0

任何人都可以幫助我處理這種情況。SonarQube。爲Java創建自定義規則

我的下一個測試文件:

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

有沒有辦法從可變提供商提取特定的實現接口的時候我探討構造AmazonS3Client的論點?現在我只能爲這個變量提取AWSCredentialsProvider。

回答

1

因爲它不是那麼明確,我猜你試圖檢索實現類型,用於初始化變量provider,這將是EnvironmentVariableCredientialsProvider

目前沒有簡單而直接的方法來實現這一點。最好的辦法是進行如下:

  • providerIdentifierTree,使用語義API來獲取到相應的符號。
  • provider符號中,跳轉到聲明樹(如果標識符是在另一個文件中聲明的,則爲空)。
  • declaration開始,如果樹是VariableTree,請查找初始值設定項表達式。
  • ExpressionTree中,獲取符號Type的類型,它將爲您提供實現類型。

這是第一步,應該幫助您進一步瞭解。當然,接下來你可能需要處理變量聲明沒有初始化的情況,然後分配到其他地方。要檢索這些表達式,請查看符號用法,而不是聲明,然後遍歷樹。

+0

非常感謝。 –

相關問題