Orma v2.4.0をリリースしました。差分は大きいですが、アノテーションプロセッサのリファクタがほとんどです。
Ormaのtype adapterは static type adapters というやつで、コンパイル時にtype adapterの検索と呼び出しの埋め込みを行うので動的に処理するものとくらべて高速でしかもコンパイル時にエラーを検出できるという特徴があります。
これについては以前少し説明したことがありました。
Android ORMでオブジェクトの埋め込みはどのように実装するか - Islands in the byte stream
Orma v2.4.0 では、このtype adapterを一つのクラスに集約できるようになりました。どのみちstatic methodしか使わないのですし、集約するほうが見通しがいいと思います。
構文としては、本当はJava8のrepeating annotationsができればいいのですが、それはできなかったので同じことをJava8以前の構文でやる方法をとりました。 MutableInt
と MutableLong
のtype adapterを一つのクラスにまとめるとこんな感じです。補完をつかって書けないのがつらいところですが、それはstatic methodを使う以上は仕方ないですね。
@StaticTypeAdapters({ @StaticTypeAdapter( targetType = MutableInt.class, serializedType = int.class, serializer = "serializeMutableInt", deserializer = "deserializeMutableInt" ), @StaticTypeAdapter( targetType = MutableLong.class, serializedType = long.class, serializer = "serializeMutableLong", deserializer = "deserializeMutableLong" ) }) public class TypeAdapters { public static int serializeMutableInt(@NonNull MutableInt target) { return target.value; } @NonNull public static MutableInt deserializeMutableInt(int deserialized) { return new MutableInt(deserialized); } public static long serializeMutableLong(@NonNull MutableLong target) { return target.value; } @NonNull public static MutableLong deserializeMutableLong(long deserialized) { return new MutableLong(deserialized); } }