行番号からのメソッド名
-
06-07-2019 - |
質問
特定のクラスソースコード(Java / C#)の行番号を指定します-含まれるメソッドの名前を取得する簡単な方法はありますか? (1つに収まる場合)(おそらく抽象構文ツリーを使用)
(これは、checkstyleの出力をタッチしたメソッドだけに制限するのに役立ちます)。
Line#-<!> gt; MethodNameを実行するには、抽象構文ツリーを使用する必要があると想定しています。
解決
(Java固有)
クラスファイルがデバッグ情報を使用してコンパイルされた場合、行番号テーブルにはコードのマッピングが含まれます<!> lt;-<!> gt;実行時にこれを取得するための組み込みAPIはないと思いますが、おそらくASMやBCELなどのいくつかのバイトコードエンジニアリングライブラリでできると確信しています。
他のヒント
Javaについては知りませんが、.NETアセンブリのメタデータテーブルには行番号が格納されていません。そのような情報にはPDB(プログラムデータベース)ファイルが必要です。
はい、あなたが言ったように、正しい種類のASTを使用します。 DMS Software Reengineering Toolkit は、JavaおよびC#用のASTを構築できます。各ASTノードは行番号データで装飾されています。各ASTノードは文法規則に対応しています。
したがって、行番号のメソッド名を決定する問題は非常に簡単です。対応する行番号を持つASTでノードを見つけ、メソッド宣言を表すASTノードが見つかるまでツリーを登ります。そのノードからmethod-nameサブツリーを見つけて出力します。
このトリックは、特定の行番号で診断された問題の問題のあるメソッド名を報告するために、DMSを使用して構築された静的分析ツールで頻繁に使用されます。 DMSは 他の人がそのような静的分析ツールを構築できるように設計されています。