2017-03-29 2 views
0

tout le monde peut m'aider avec cette affaire.SonarQube. Créer une règle personnalisée pour Java

J'ai le prochain fichier de test:

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

Y at-il moyen d'extraire la mise en oeuvre particulière de l'interface du fournisseur variables lorsque j'explore les arguments de AmazonS3Client constructeur? Maintenant je peux extraire AWSCredentialsProvider pour cette variable seulement.

Répondre

1

Comme ce n'est pas si explicite, je suppose que vous essayez de récupérer le type d'implémentation utilisé pour initialiser la variable provider, qui serait EnvironmentVariableCredientialsProvider.

Il n'existe actuellement aucun moyen simple et direct d'y parvenir. La meilleure façon serait de procéder comme suit:

  • De l'providerIdentifierTree, utilisez l'API sémantique pour obtenir le symbole correspondant.
  • A partir du symbole provider, accédez à l'arbre de déclaration (qui sera nul si l'identificateur est déclaré dans un autre fichier).
  • A partir du declaration, et si l'arborescence est VariableTree, recherchez l'expression de l'initialiseur. De ExpressionTree, obtenez le type du type de symbole, qui vous donnera le type d'implémentation.

C'est une première étape qui devrait vous aider à aller plus loin. Bien sûr, vous devrez probablement gérer les cas où la variable est déclarée sans initialiseur, puis assignée ailleurs. Pour récupérer ces expressions, regardez les usages des symboles, au lieu de la déclaration, et promenez les arbres.

+0

Merci beaucoup. –