Esempio n. 1
0
  /**
   * 指定のステージ内のCombinerに対するクラスを生成し、生成したクラスの完全限定名を返す。
   *
   * @param model 対象のステージ
   * @return 生成したクラスの完全限定名、不要の場合は{@code null}
   * @throws IOException クラスの生成に失敗した場合
   * @throws IllegalArgumentException 引数に{@code null}が指定された場合
   */
  public CompiledType emit(StageModel model) throws IOException {
    Precondition.checkMustNotBeNull(model, "model"); // $NON-NLS-1$
    if (environment.getOptions().isEnableCombiner() == false) {
      LOG.debug("Combinerは設定により無効化されています");
      return null;
    }
    if (canCombine(model) == false) {
      LOG.debug("{}に対してコンバイナークラスは不要です", model);
      return null;
    }
    LOG.debug("{}に対するコンバイナークラスを生成します", model);
    Engine engine = new Engine(environment, model);
    CompilationUnit source = engine.generate();
    environment.emit(source);
    Name packageName = source.getPackageDeclaration().getName();
    SimpleName simpleName = source.getTypeDeclarations().get(0).getName();

    QualifiedName name = environment.getModelFactory().newQualifiedName(packageName, simpleName);

    LOG.debug("{}のコンバイン処理には{}が利用されます", model, name);
    return new CompiledType(name);
  }