/** * 指定のステージ内の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); }