2017-03-29 6 views
0

jemand kann mir bei diesem Fall helfen.SonarQube. Erstellen Sie benutzerdefinierte Regel für Java

Ich habe die nächste Testdatei:

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

Gibt es Möglichkeit, die bestimmte Implementierung Schnittstelle von den variablen Anbietern, wenn ich die Argumente des Konstruktor AmazonS3Client erforschen zu extrahieren? Jetzt kann ich AWSCredentialsProvider nur für diese Variable extrahieren.

Antwort

1

Da es nicht so explizit ist, schätze ich, dass Sie versuchen, Implementierungstyp zu initialisieren, der provider Variable verwendet wird, die EnvironmentVariableCredientialsProvider wäre.

Es gibt derzeit keinen einfachen und direkten Weg, dies zu erreichen. Der beste Weg wäre, wie folgt vorgehen:

  • Vom providerIdentifierTree, verwenden Sie die semantische API auf das entsprechende Symbol zu erhalten.
  • Wechseln Sie vom Symbol provider zum Deklarationsbaum (der null ist, wenn der Bezeichner in einer anderen Datei deklariert ist).
  • Von der declaration, und wenn der Baum ein VariableTree ist, suchen Sie nach dem Initialisiererausdruck.
  • Von der ExpressionTree, erhalten Sie den Typ des Symbols Typ, die Ihnen den Implementierungstyp geben wird.

Das ist ein erster Schritt, der Ihnen helfen sollte, weiter zu kommen. Natürlich müssen Sie als Nächstes wahrscheinlich Fälle behandeln, in denen die Variable ohne Initialisierer deklariert und dann anderswo zugewiesen wird. Um diese Ausdrücke abzurufen, sehen Sie sich die Symbolverwendungen anstelle der Deklaration an und gehen Sie die Bäume entlang.

+0

Vielen Dank. –

Verwandte Themen