CodeModelでJavaのソースコードを生成する
この頃はgradleでAndroidのビルドを行うようになり、それに伴いJavaのソースコードをビルド時に生成する機会も増えてきたと思います。
それでは、Javaのソースコードはどうやって生成するのがいいでしょうか。文字列結合も悪くないのですが、文法の妥当性を保証したりインデントを正しく行ったりするのは大変めんどうくさいものです。それならば、Javaのソースコードを生成するライブラリを使いましょう!幸い、gradleがあればJavaのライブラリを使うのは簡単ですし、build.gradleにちょっとコードを書いて試すのもスクリプト言語のような感覚でできます。
例:以下をgradleコマンドで起動すると、java/com/example/cm/Foo.java にクラスを生成します。
https://github.com/gfx/java-codemodel-example
// build.gradle buildscript { repositories { mavenCentral() } dependencies { classpath 'com.sun.codemodel:codemodel:2.6' } } import com.sun.codemodel.* def cm = new JCodeModel() def klass = cm._class("com.example.cm.Foo") klass.field(JMod.PUBLIC, int.class, "intVal") klass.field(JMod.PUBLIC, cm.ref(Map.class).narrow(String.class, String.class), "mapVal") klass.field(JMod.PUBLIC, cm.ref(List.class).narrow(String.class), "arrayVal") file("java").mkdir() cm.build(file("java"))
生成したクラスは以下のようになります。
package com.example.cm; import java.util.List; import java.util.Map; public class Foo { public int intVal; public Map<String, String> mapVal; public List<String> arrayVal; }
正しいJavaのソースコードを、必要なクラスはimportして、適切にインデントをしたうえで生成します。簡単ですね。
Enjoy Hacking!