2016-08-10 2 views
3

JavaのSonarQubeのカスタムルールを作成していますが、引数の値が修飾されているかどうかを確認したいと思います。たとえば、文字列が特定のパターンに適合するかどうかを知りたいとします。引数がStringの場合のみテストできますが、正確な値を取得できません。 APIによって私はそうすることができますか?文字列がerrorIDのが含まれている場合、例えばソナーツリーの引数の値を取得する方法

は、

log.error("errorID:210134 It's an error"); 

以下のコードのために私は、引数およびテストを得ることができますか?

さらに、どのような変数を使用してメソッドを呼び出すことができますか?

例えば、

log.error("errorID:210134 It's an error"); 

以下のコードのためにどのように私はそのログがクラスロガーのオブジェクトで知ることができますか?

+0

System.out.println(log.getClass()); ?それを試してみましたか? –

+0

SonarQubeのカスタムルールです。 SonarQubeはコードレビューを行うソフトウェアで、ソースコードをさまざまな種類のツリーに形成します。だから、単純にSystem.out.println()とはかなり異なっています。 – turtlologist

+0

StackOverflowとメーリングリストに投稿してください。私たちは両方のチャンネルをモニターしており、両方の場所で答えなければならないのは苦痛です。 –

答えて

4

トリックを行う必要があり、次は:そのようなものがSTRING_LITERALある場合

  • メソッド呼び出しの引数を見て、チェックは、その後、LiteralTreeに引数をキャスト。そこから、その値にはStringとしてアクセスできます(二重引用符が含まれています)。
  • 呼び出しが変数に対して行われたかどうかを調べるには、メソッド呼び出しからmethodSelect()式ツリーを取得します。その種類がMEMBER_SELECTの場合は、MemberSelectExpressionTreeにキャストします。そこからexpression()の種類がIDENTIFIERかどうか確認してください。その場合、IdentifierTreeとその関連シンボルを取得することができます。メソッドを呼び出すシンボルが変数であるかどうか、その型などを確認することができます。
+0

ありがとうございました。それはうまくいく – turtlologist

関連する問題