4

特定のクラス ソース コード (Java/C#) の行番号が与えられた場合、それが該当するメソッドの名前を取得する簡単な方法はありますか? (1つに収まる場合)(おそらく抽象構文木を使用)

(これは、checkstyle の出力を触れたメソッドだけに制限するのに役立ちます)。

Line#->MethodName を実行するには、抽象構文ツリーを使用する必要があると思います。

4

3 に答える 3

2

(Java固有)

クラスファイルがデバッグ情報を使用してコンパイルされた場合、行番号テーブルにはコード<->行番号のマッピングが含まれます。実行時にこれを取得するための組み込みAPIはないと思いますが、ASMやBCELなどのバイトコードエンジニアリングライブラリのいくつかでおそらく実行できると思います。

于 2009-06-22T12:29:51.720 に答える
2

Java についてはわかりませんが、.NET アセンブリにはメタデータ テーブルに行番号が格納されていません。そのような情報には PDB (プログラム データベース) ファイルが必要です。

于 2009-06-22T12:18:25.473 に答える
0

はい、あなたが言ったように、正しい種類の AST を使用しています。DMS Software Reengineering Toolkitは、Java および C# 用のAST を構築できます。各 AST ノードは、行番号データで装飾されています。各 AST ノードは文法規則に対応します。

したがって、行番号のメソッド名を決定する問題は非常に簡単です。対応する行番号を持つ AST 内のノードを見つけ、メソッド宣言を表す AST ノードが見つかるまでツリーを登ります。そのノードから method-name サブツリーを見つけて出力します。

このトリックは、DMS を使用して構築された静的分析ツールで頻繁に使用され、特定の行番号で診断された問題に対して問題のあるメソッド名を報告します。DMS は、他のユーザーがこのような静的分析ツールを構築できるように設計されています。

于 2009-08-19T07:42:50.193 に答える