掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     テンプレートの変数を別のテンプレートで使用したい


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2008-6-3 16:36

テンプレートの変数を別のテンプレートで使用したい

ソースコード生成時に生成元のソースファイルよりメソッド内の
ソースコードを取り込み上書きモードで吐き出させたいと思って
います。
テンプレートの機能でメソッド名を別のテンプレート内で使用
できればテンプレートとアドインを使用して上記の処理が可能に
なりそうです。
メソッド名を別テンプレートに引き継ぐことは可能でしょうか?

(実際に行いたいこと)
OperationImpl
OperationDeclarationImpl・・メソッド名(戻り値、引数を
含む)を作成
OperationBodyImpl・・・上記のメソッド名(戻り値、引数
を含む)を利用してソースファイル
より検索し、必要メソッド内の
ソースコードを取得

ご回答をよろしくお願いいたします。

【開発環境】
 言語:C++
 EAバージョン:Ver7.1
 ビルド:829J
sugimoto
投稿日時: 2008-6-3 17:09
EA Administrator
投稿: 1895

Re: テンプレートの変数を別のテンプレートで使用したい

クラス図からソースコードを生成する際に、メソッド内の処理部も
生成したいということと思いますが、EAの既存機能を利用しても、
このことは可能です。

以下のオプションを有効にした状態で、ソースコード読み込みを実行しますと、
メソッドの処理部がモデルに取り込まれます。

メインメニュー→「ツール」→「オプション」の「属性と操作」ページにある
「読み込み時に操作の実装もモデルに読み込む」チェックボックス

具体的には、クラス要素の操作プロパティダイアログの「振る舞い」タブにある
「既定のソースコード」欄に読み込まれます。

この状態で、ソースコード生成しますと、この「既定のソースコード」欄に
記載された内容がそのままメソッドの中身として出力されます。



今回いただきましたご質問は、上記機能で対応可能でしょうか?

それとも、上記機能では何か不足等があり、コード生成テンプレートや
アドインにて対応したいということでしょうか?この場合、その内容を
ご連絡いただきますと助かります。

お手数お掛けしますが、上記内容について、ご確認ください。
よろしくお願いいたします。
未登録ゲスト
投稿日時: 2008-6-3 18:09

Re: テンプレートの変数を別のテンプレートで使用したい

ご回答ありがとうございました。
ですが私の質問内容がわかりにくかったようです。

現在、ご回答いただいた方法で運用を行っています。
この方法ですと毎回リバース作業が発生することになり、プロジェクトが大きい分、
EAへのアクセスで待ち時間が発生してしまいます。

今回、このリバース作業を行わないですむようにソースコードの生成時に
読込み元のソースコードをそのまま上書きモードで吐き出させる作りとしたいのです。

上記の質問は読込みを行わない形での対応についてお聞きしています。
すみませんが、もう一度ご確認をお願いいたします。
tkouno
投稿日時: 2008-6-4 9:12
EA Administrator
投稿: 3939

Re: テンプレートの変数を別のテンプレートで使用したい

ご返信ありがとうございました。
背景については理解いたしました。

まず当初のご質問の件ですが、%opName%マクロは
OperationDeclarationImplでもOperationBodyImplでも
利用できますので、このマクロを利用する形で
ご対応できますでしょうか?

今回のような使い方は、Enterprise Architectとして想定していないので
サポートの対象外となってしまいますが、以下のような方法で
対応できるかもしれません。

OperationDeclarationImplテンプレートで出力した内容の
すべてを取得したい、ということになりますと、例えば
出力内容をすべて変数に格納しておき、その内容を
OperationDeclarationImplの最後でEXEC_ADD_INマクロで
DLL側のバッファに保存しておく、という形で
できるかもしれません。(未確認)

[イメージ](実際に動作するかどうかわかりません)

OperationDeclarationImpl:

$body = ... //すべての内容を変数内に保存
$body //出力
%EXEC_ADD_IN("MyAddin","StoreMethodName",$body)% //値を内部バッファに保存

OperationBodyImpl:

%EXEC_ADD_IN("MyAddin","GetMethodBodyFromSource")% //内部バッファに保存してある情報を元に処理し、ソースの内容を返す
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ