Skip to content

HowToBuildJava

高島望 edited this page Jul 13, 2019 · 3 revisions

自動生成フロー

自動生成の手順は以下の流れで行います。

  1. GenerateContextの生成
    GenerateContextとは、本ライブラリの中心的コンテキストであり情報保持クラスです。
    オプションで指定された値や、自動生成対象等を管理しています。
    詳細に関しては、公開しているJavaDocを参照してください。

  2. GenerateTargetの生成
    GenerateTargetは自動生成対象のクラス毎の情報保持クラスです。
    利用するJavaクラスのTemplateの指定や、変数、クラスモデルを管理しています。
    内部管理用のパラメータであるため利用時に意識することは、カスタムを行わない限りはありません。

  3. ClassModelの生成&構築
    クラスの内容を保持するクラスです。
    利用時に一番扱うことが多いクラスでもあります。
    このClassModel配下の様々な内容を構築することで、どのようなクラスを出力するかを指定します。

  4. 任意のGeneratorによる自動生成の実行
    Version毎にGeneratorが存在するため、自動生成したいGeneratorを選択の上実行します。
    どのようなGeneratorが存在するのかは、サポートしているJavaのバージョンは参照してください。

自動生成フローの簡易コード

自動生成フローの大まかな動きをコードにしたものです。

// 1 : GenerateContextの生成  
GenerateContext context = new GenerateContext();

// 2 : GenerateTargetの生成  
GenerateTarget target = context.newTarget(DefaultTemplate.JAVA8);
StringWriter sw = new StringWriter();
target.setOutputWriter(sw);

// 3 : ClassModelの生成&構築
ClassModel clazz =
    ClassModel.builder()
    ...
    ...
    .build();
target.setClazz(clazz);

// 4 : 任意のGeneratorによる自動生成の実行  
Java8Generator generator = new Java8Generator();
generator.generate(context);

// 自動生成した内容をログ表示(文字列)
log.info(sw.toString());

ClassModelの構成

ClassModelは以下のような構成になっています。
構成要素それぞれを構築することによって細かいJavaクラスの表現が可能になります。

Class
 |
 |-- package
 |-- import
 |-- JavaDoc
 |-- Annotaion(アノテーション)
 |-- Access Modifier(アクセス修飾子 public等)
 |-- Type Modifier(型修飾子 final等)
 |-- Class Name
 |-- Super Class
 |-- Interface
 |
 |-- Field(フィールド)
 |    |
 |    |-- JavaDoc
 |    |-- Access Modifier(アクセス修飾子 public等)
 |    |-- Field Modifier(フィールド修飾子)
 |    |-- Annotation(アノテーション)
 |    |-- Type (ClassModelで表す)
 |    |-- Name
 |    `-- Initialization Value (初期値)
 |
 |-- Enumerator(Enumの列挙子 Enumの時だけ使う)
 |    |
 |    |-- JavaDoc
 |    |-- Name
 |    `-- Value
 |
 |-- Constructor(コンストラクタ)
 |    |
 |    |-- JavaDoc
 |    |-- Access Modifier(アクセス修飾子 public等)
 |    |-- Method Modifier(メソッド修飾子)
 |    |-- Annotation(アノテーション)
 |    |-- Name
 |    |-- Args(引数)
 |    |-- Throws(throws)
 |    `-- Logic(ロジック)
 |
 |-- Method(メソッド)
 |    |
 |    |-- JavaDoc
 |    |-- Access Modifier(アクセス修飾子 public等)
 |    |-- Method Modifier(メソッド修飾子)
 |    |-- Annotation(アノテーション)
 |    |-- Return Type(戻り値の型 当然voidも可)
 |    |-- Name
 |    |-- Args(引数)
 |    |-- Throws(throws)
 |    `-- Logic(ロジック)

JavaDoc、Annotation、引数のように共通的な要素と、Class、Field、Method毎の固有の設定要素が存在しています。それぞれについては以降で詳細に説明します。

Clone this wiki locally