With Emacs Next     JDEE 特集    
JDEE 特集

コード自動生成

新しく Java ソースファイルを作成する。これは Java ソースを生成 でも扱いました。ここでは、 自動生成されるソース含めてもう少し詳細に紹介します。

クラスの生成ウィザード

Java ソースファイルを作成するとき、ほかのファイルを生成するとき同様に、 C-x C-f を使用してバッファを作成することもできますが、 JDEE では、クラスやインタフェースを定義するとき、 ウィザードを使用することができます。

クラスウィザード

M-x jde-gen-class-buffer を使用すると、 ウィザード形式で新しい Java ソースファイルのためのバッファを生成できます。

また、Java ソースを生成 で紹介したように、 すでにバッファがある場合は、M-x jde-gen-class を使用すると、 開いているバッファにソースを生成します。

ソースファイル名の指定

jde-gen-class-buffer を使用した場合、まず、 ミニバッファでソースファイル名を尋ねられます。 ソースファイル名を指定して、Enter してください。 クラス名ではないことに注意してください (拡張子 .java の指定が必要です)。

所属パッケージの指定

次に、ミニバッファには Package: と表示され、生成するクラスが所属するパッケージ名を指定します。 パッケージに所属しない場合は、そのまま Enter します。 Enter すると、この時点で class の宣言が途中まで完了した状態で ソースが生成されます。

継承の指定

次に、ミニバッファには extends: と表示され、作成するクラスのスーパークラスを指定します。 継承しない (Object を継承する) 場合はそのまま Enter します。

ここで BeanShell が起動されます。BeanShell は指定したクラスの所在を調べます。JDK の指定を正しく行っていれば、 スーパークラスが Java 標準 API や (ext にインストールされた) オプショナル API であれば、import 文が自動的に生成されます。 独自定義のスーパークラスであれば、JDEE プロジェクトのクラスパスに事前に 設定が必要です。うまくいかなかった場合は、一度バッファを破棄するなどして、 やり直してください。

インタフェースの指定

継承の指定がうまくいくと、次はインタフェースの指定です。 ミニバッファに implements: とたずねられますので、実装するインタフェースを入力します。 継承と同様の動作が繰り返され、指定したクラスの import 文が生成されます。 これが成功すれば、ウィザードは完了、生成されたバッファには クラスのソースがすでに含まれているはずです。

テンプレートの設定

生成したソースには、あらかじめクラスの Javadoc コメントや、 } の終わりにクラス名などが自動的に付加されているのが確認できると思います。 このような自動生成コードは、すべてユーザによるカスタマイズが可能です。

しかし、このカスタマイズはやや厄介です。なぜなら、 テンプレートの指定には Lisp ファンクション呼び出しなど、 Lisp に関する知識を要求されるからです。

設定は、JDE -> Project -> Autocode より起動する、 Customize で行います。Jde Gen Class Buffer Template が該当します。この変数はまさに、 先ほどのバッファ生成行程を定義しています。 長いので、デフォルトでは表示されません。項目右側の "Show" をクリックして、表示させてください。

さらに、バッファの先頭にいつも追加するコメントを Jde Gen Buffer Boilerplate に指定できます。 たとえば、ファイルヘッダ著作権情報などはここに指定します。

テンプレートの指定に使用される要素として以下のものがあります。 以下は調査不十分です。 詳細に説明が追加できるようになれば、記載を追加します。

"文字列"

"" で囲むのは、通常の文字列で、そのままの文字列が生成されます。

'p

tempo-marks にこの位置が保存されます。

'r

ON-REGION に nil 以外を指定して tempo-insert が呼び出されると、 現在のリージョンをここに位置させます。そのほかは 'p と同様に動作します。

(p PROMPT <NAME> <NOINSERT>)

tempo-interactive が nil でないとき、ユーザはミニバッファに 置換される文字列のための PROMPT を伴いプロンプトを表示されます。 オプションパラメータの NAME が nil でなければ、テキストは s タグで後の挿入用に保存されます。すでに NAME の下に保存されている場合、 その値が代わりに使用され、プロンプトは表示されません。 NOINSERT が提供され、nil 出ない場合、何も挿入されず、 しかしテキストは NAME が提供されるとき保存されます。 明確に、シンボル 'noinsert は引数として使用されるべきです。

(P PROMPT <NAME> <NOINSERT<)

上記と同様に動作しますが、tempo-interactive が true であることを強要します。

(r PROMPT <NAME> <NOINSERT<)

上記と同様に動作しますが、tempo-interactive が nil であり、 tempo-insert は ON-REGION を nil でない値で呼び出される場合、 現在のリージョンはここに置かれます。通常プレフィックス引数 を伴うテンプレートファンクションを呼び出すときに使用します。

(s NAME)

(p...) 構造とともに、前にテキストを挿入します。 NAME の下に保存された挿入を見つけ、挿入します。 tempo-interactive が nil であれば、'p 同様に動作します。

'&

行頭とポイント間にスペースのみがあれば、何も行わず、 そうでなければ、新しい行を挿入します。

'%

ポイントと行末の間にスペースのみがあれば、何も行わず、 そうでなければ新しい行を挿入します。

'n

新しい行を挿入します。

'>

indent-according-to-mode を使用して行が挿入されます。 行において望むテキストの後にこのアイテムをおくべきであることに注意。

'n>

新しい行を挿入し、インデントします。

'r>

r 同様ですが、リージョンをインデントします。

'o

'% 同様ですが、新しい行の前にポイントを置いたままにします。

そのほか

評価され、結果は挿入される要素として扱われます。 ひとつの追加のタグはこれらの場合に便利です。 式がリスト '(l foo bar) を返す場合、'l の後の要素は 通常のルールに従って挿入されます。 これはひとつの式がいくつかの要素を返すことを可能にします。

いくつかのテンプレートではプロンプトを表示し、必要な項目をたずねます。 プロンプトを有効化するためには、.emacs で tempo-interactive を nil 以外に 設定する必要があります。

コーティングスタイル

括弧の位置、改行... など、コーディングスタイルに関する設定が 用意されています。以下にリストしますので、リファレンスを参照してください。

Jde Gen K&R
K&R スタイルにするかどうか
Jde Gen Method Signature Padding 1
メソッド宣言時のスペース
Jde Gen Method Signature Padding 2
メソッド引数のスペース
Jde Gen Method Signature Padding 3
メソッド宣言時 { の前のスペース
Jde Gen Conditional Padding 1
制御文におけるスペース
Jde Gen Conditional Padding 2
制御文におけるスペース
Jde Gen Conditional Padding 3
制御文におけるスペース
With Emacs Next     JDEE 特集    
本サイトについて
ご意見、ご感想お待ちしております!
Contact: ysk-net@dp.u-netsurf.ne.jp