astah* C#リバース 利用ガイド

2009年10月19日
株式会社 チェンジビジョン


【概要】

astah*の編集API利用サンプルとして「C#リバースプログラム」を作成しました。本アプリケーションにより、C#のソースコードからastah*モデルを作成できます。本ドキュメントでは、このC#リバースの方法を説明します。

本アプリケーションは、Doxygenというフリーソフトと併せて動作します。
事前にDoxygenによってソースコードをパースして作成したXMLファイルを 使用してastah*モデルを作成するためです。

astah* API サンプルプログラム使用許諾契約

【ソースコードインポートの手順】

【実行環境の準備】

本アプリケーションを実行するには、J2SEおよびDigesterを利用できる環境が必要です。
さらに、本アプリケーションはDoxygen経由でソースコード(.cs)を変換して作成したXMLを使用するため、Doxygenのインストールと設定が必要です。
Doxygenの利用に関しては、Doxygenのライセンスやドキュメントをご参照ください。

【ステップ1 Doxygenのダウンロード】

【ステップ2 Doxygenのインストール】

【ステップ3 Doxygenの起動】

【ステップ4 Doxygenの設定】

【ステップ5 Doxygenでソースコードの読み込み】

【ステップ6 Doxygenで作成したXMLをastah*モデルに変換】

【本アプリケーションの設定 - Config.propertiesファイル】

以下の設定ファイルを編集することで、一部挙動の設定が可能です。
astah* professional(astah* UML)インストールフォルダ\api\sample\sample_doxygen_c_sharp\doxygen_csharp\Config.properties
jude_csharp_types_for_attribute
プロパティを、クラスの属性として作成するか、関連として作成するかを設定します。プロパティは、通常関連として作成されますが、 ここで設定した型を持つプロパティは、クラスの属性として作成されます。
コンマ区切りで、型をネームスペース付きで列挙します。
(例)BrickOut::Form1,BrickOut::Form2

【コンパイル】

本アプリケーションのソースコードを改変した場合は、起動前に、コンパイルする必要があります。
以下のバッチファイルをダブルクリックします。
astah* professional(astah* UML)インストールフォルダ\api\sample\sample_doxygen_c_sharp\compile.bat

【サポートについて】

本アプリケーションは、astah*編集APIのサンプルとして提供しているため、サポート対象外となります。
障害報告や実行環境に関連するご質問などは、対応できない場合がございますので予めご了承ください。

【動作環境】

Windowsのみで動作確認しています。

環境 ダウンロード
astah* professional(astah* UML) 6.0以降
(*)astah* professional(astah* UML)インストールフォルダ\lib\commons-digester.jar(バージョン1.5)にも依存します。
-
Java実行環境 (astah*のシステム要件を満たすバージョン) astah*システム要件ページ
Doxygen 1.5.8 (doxygen-1.5.81-setup.exe) Doxygenサイト(英語)
Doxygenサイト(日本語)
Doxygenダウンロード

【対応項目詳細】

クラス、属性、操作、それらの各定義、astah* professional(astah* UML)が対応するC#の言語属性の取込みに対応しています。 Doxygenは、C#に完全対応していないため、本アプリケーションでもC#の情報を完全に取込むことはできませんので予めご理解ください。リバース対応項目は以下の通りです。

項目 説明
デフォルトモデル astah* professional(astah* UML)インストールフォルダ\template\project\C_Sharp.astaを
デフォルトモデルとして読み込みます。
このファイルがない場合、デフォルトモデルを読み込みません。
C_Sharp.astaはastah* professional(astah* UML)インストール時に配備され、System配下の主要なクラスを含みます。
プリミティブ型 プリミティブ型としてリバース
const [属性]言語タブのconst
delegate [クラス]言語タブのdelegate
~destructor() 操作(名前:~から始まる名前、戻り型:"")
enum [クラス]言語タブの<<enum>>
[属性]言語タブの<<enum constant>>
event [操作]言語タブの<<event>>
(EX) public class EventList { public event NameListEventHandler nameListEvent; }
  • 名前: "nameListEvent"
  • 型 : "NameListEventHandler"
  • <<event>>: "true"の操作
  • event:add addを持つeventは、Doxygenでpropertyに変換される
    (EX) public class EventList { public event void operation2 { add { operation2 += value; } } }
  • 名前: "operation2"
  • 型: "void"
  • <<property>>: "true"
  • <<property>>get: "true"
  • <<property>>set: "true"の操作
  • event:remove removeを持つeventは、Doxygenでpropertyに変換される
    (EX) public class EventList { public event void operation2 { remove { operation2 -= value; } } }
  • 名前: "operation2"
  • 型: "void"
  • <<property>>: "true"
  • <<property>>get: "true"
  • <<property>>set: "true"の操作
  • generics [クラス]テンプレートパラメタタブ
    [Doxygen1.5.6まで]
    "class Class0<T>"はOK。
    "class Class0<T> where T:Class1"はdoxygenでスキップされるため、未対応。
    [Doxygen1.5.7以降]
    "class Class0<T>"はクラス"Class0"にテンプレートパラメタ"T"が追加される。"T"の型は"<<Unspecified>>"になる。
    "class Class0<T> where T:Class1"はクラス"Class0"にテンプレートパラメタ"T"が追加される。"T"の型は"Class1"にならず"<<Unspecified>>"になる。
    indexer [操作]言語タブの<<indexer>>
    Doxygenでは、1つのクラスに、同名で同型のindexerが複数ある場合、2つ目以降をスキップされる
    indexer:get [操作]言語タブの<<indexer>>:get
    indexer:set [操作]言語タブの<<indexer>>:set
    internal [クラス]未対応
    [属性]言語タブのinternal
    [操作]言語タブのinternal
    inout [操作]パラメタタブの方向種別
    override [操作]言語タブのoverride
    property [属性]言語タブの<<property>>
    property:get [属性]言語タブの<<property>>:get
    property:set [属性]言語タブの<<property>>:set
    readonly [属性]言語タブのreadonly
    sealed [クラス]言語タブのsealed
    [操作]言語タブのsealed
    static [クラス]言語タブのstatic
    [属性]ベースタブのStatic
    [操作]ベースタブのStatic
    struct [クラス]言語タブの<<struct>>
    unsafe [操作]言語タブのunsafe
    virtual [操作]言語タブのvirtual
    volatile [属性]言語タブのvolatile
    Doxygenでは、"volatile int variable;"ではvolatileにならないが、
    "const volatile int variable;"ではvolatileになる
    汎化・実現 [クラス]汎化・依存タブ
    Doxygenでは、"class Class0: ClassWithSrc{}(ClassWithSrcのソース有)"ではClassWithSrcからClass0に汎化が追加されるが、
    "class Class1: ClassWithoutSrc{}(ClassWithoutSrcのソース無)"ではClassWithoutSrcクラス自体取り込まれない。
    extension_method [操作]言語タブのextension_method

    以下の項目は現在未対応のため、リバースできません。