アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、Javaを学習中の大学生です。

Javaのソースコードを解析し、その中で宣言されている変数名を抽出して、
変数表のようなものを作成するJavaプログラムを書いているのですが、
参照型(クラス型)で宣言されている変数名を抽出する方法が思いつきません。
よろしければ、何かアイディアをいただけないでしょうか。

プリミティブ型の変数については、StreamTokenizerクラスを利用しています。
コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出
するという、単純な方法を使っています。こちらも、改良すべき点などあれば、
アドバイスいただけるとありがたいです。

デバッガを使えば出来ないことはないようですが、
出来ればデバッガは使わない方法でお願いします。

A 回答 (2件)

ひとまず


>コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出
この方法だとローカル変数も抽出してしまうと思いますが
ローカル変数も抽出の対象にするんでしょうか?

ローカル変数を対象としないなら、alice_asahina様の回答にある様にリフレクションが楽でしょう。
ただし、その場合は抽出元がソースコードでは無くクラスファイルになる事に注意して下さい。

あくまでソースコードを対象として処理するのであれば、
>コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出
でしなければならない事の概要としては間違っていないと思いますが、
実装の上ではjavaがフリーフォーマットである事に注意して下さい。
型名の途中にホワイトスペースが挟まる事はありませんが、配列の場合こんな書き方も出来ますので。

int a
[
];

また、その際にローカル変数を抽出の対象にしないのであれば、
更に宣言スコープ等を考慮する必要が出てきますし、
これに内部クラスや匿名クラスのフィールドも混ざってくると非常にややこしい事になると思いますが、不可能ではありません。
がんばってください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
ローカル変数も対象としています。
(もう少し詳しく書くべきでした。すみません)
確かに、javaはフリーフォーマットなので
ややこしいところもありますが、
解析対象となるコードは、教科書に載っているような、
お手本コードなので、あまり心配はしていません。
しかし、そういった部分もカヴァーするに越したことは
ないので、時間に余裕があるかぎり検討したいと思います。
また、mamadorusuさんのアドバイスがきっかけで、
今まで見落としていた問題も見えてきました。
そういう点で参考になりましたので、
こちらをベストアンサーとさせていただきます。

お礼日時:2011/10/16 20:29

http://192.9.162.55/j2se/1.5.0/ja/docs/ja/api/ja …

ヒント:リフレクション。
    • good
    • 0
この回答へのお礼

ヒントありがとうございます。
出来れば、ソースコードから抽出したいのですが、
(もう少し詳しく書くべきでした。すみません)
これもひとつの方法として参考にしたいと思います。

お礼日時:2011/10/16 20:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!