0

Groovy & Grails コードの静的コード分析に CodeNarc を使用すると、クラス階層を把握できません。1 つのサービス クラスには、BaseService などのプライベート メソッドがあります。別のサービス クラスは、ChildService が BaseService クラスを拡張するとします。ChildService のメソッドの 1 つは、BaseService で定義されたプライベート メソッドを呼び出します。ただし、BaseService クラスは、独自のクラスのどこにもプライベート メソッドを使用しません。そのため、BaseService クラスを分離して分析すると、プライベート メソッドは未使用として表示されます。しかし、クラス階層を見ると、そのサブクラスの 1 つがそれを呼び出していることがわかります。
それで、私の質問は、CodeNarc がその種の依存関係をどのように見逃すのかということです。静的コード アナライザーは解析ツリーを作成して解析しませんか? そうでない場合、どのようにコードを分析しますか? 静的コード分析の内部への洞察は高く評価されます。
ありがとう。

4

1 に答える 1

3

codenarcのドキュメントにあるように:

UnusedPrivateMethodルール

同じクラス内で参照されていないプライベートメソッドをチェックします。プライベート修飾子は現在、Groovyコードによって「尊重」されていないことに注意してください(つまり、Groovyは他のクラス内のプライベートメンバーにアクセスできます)。

既知の制限:

  • プロパティアクセスによるメソッド参照を認識しません(例:x.nameとしてアクセスされるgetName())
  • メソッド名がGStringの場合、メソッド呼び出しを認識しません(例:this。 "$ methodName"())
  • 別のインスタンス(つまり、これ以外)のプライベートメソッドの呼び出しを認識しません
  • 同じ名前でパラメータが異なる(つまり、オーバーロードされた)複数のプライベートメソッドを区別しません
  • 未使用のコンストラクターをチェックしません

したがって、このルールをオフにする必要があります。

于 2012-12-11T10:39:35.717 に答える