3

Q (tldr;):JavaScanner in を使用して、特定の文字列をパラメーターとして指定した特定の関数呼び出しが try/catch ブロックで囲まれているかどうかを確認するにはandroid-lintどうすればよいですか。

詳細: 公式サイトの android-lint チュートリアルを完了し、既存の .xml ファイルのソースを確認しましたlint-checks。ただし、この AST ベースの JavaScanner の解析のワークフローを把握できないようです。私が達成しようとしているのは、特定のプロパティを設定する関数をキャッチし、それを try/catch ブロックで囲むことです。例えば:

MyPropertySettings.set("SOME_PROPERTY", "SOME_VAL"); 

lint ルールをトリガーするべきではありませんが、次のようになります。

MyPropertySettings.set("SOME_SENSITIVE_PROPERTY", "SOME_VAL"); 

でtry/catchブロックに囲まれていないためSetPropertyExceptionです。関数自体に try/catch を導入したくありません。これは、非常にまれなケースでのみ例外をスローするためです (関数の内部はリフレクション モジョに基づいています)。

この質問については、ワークフロー/ヒントでも問題ありません。最初の数ステップを踏むことができれば、もっとよく理解できるかもしれません。

アップデート:

setさらに調査した結果、上記の関数を設定し、getApplicableMethodNames()その関数のプロパティを何らかの方法で読み取って、チェックが適用されるかどうかを判断する必要があることがわかりました。その部分は簡単なはずです。

try/catch を囲むのはより難しく、「フロー分析」を行う必要があると思います。質問は今どうですか。

4

2 に答える 2

2

メソッドとともに、関数getApplicableMethodNames()をオーバーライドする必要がありますvisitMethod()。を取得しMethodInvocationNodeます。node.astArguments()関数を使用して、呼び出しで渡された引数をフェッチするだけです。これは、 を使用して反復できる引数のリストを返しますStrictListAccessortry渡された引数を確認し、それが基準に一致する場合は、ループを実行し、ノードが見つかるまで呼び出しノードの親ノードの計算を続けます。それが try ノードの場合、 を使用してキャッチのリストを取得できます node.astCatches()。リストをスキャンして、適切な例外を見つけます。見つからない場合は、報告します。

于 2014-02-13T09:42:08.310 に答える