Doma要望リスト

ちょっとDomaをさわり始めたので、幾つか要望が出てきた。 Twitterにはぼろぼろと書いてるけど、それを一々拾うのは面倒だろうからまとめておくます。

Doma本体

  • PullRequestは細かい改善を送り易いので、GitHubにリポジトリを移行して欲しい。
  • ビルドとリリースをGradleにしては、どうだろうか?
  • .sqlファイルの存在チェックする際にみる先が.classファイルの出力先だけでは無く、ソースパスも見て欲しい。
    • eclipseだけでビルドしてると気にならないんだけど、ビルドスクリプト書くとリソースファイルのコピー先を.classファイルと同じにしなきゃいけなくて気持ち悪い。 このへんのコードをガチャガチャ弄れば何とかなりそうだけども…

    • AbstractSqlFileQueryMetaFactory

    protected FileObject getFileObject(String path, ExecutableElement method) {
        Filer filer = env.getFiler();
        try {
            return filer.getResource(StandardLocation.CLASS_OUTPUT, "", path);
        } catch (IOException e) {
            throw new AptException(Message.DOMA4143, env, method, e, path, e);
        }
    }
  • java7でビルドするとワーニングがポロポロ出るのを何とかしてほしい。@SupportedSourceVersion(SourceVersion.RELEASE_6)とか書いてるのをどうすれば、java6でもjava7でもワーニング出ない様に出来るのかよく分からないけども… ちなみに、こういうやつね。
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.DomainProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.EnumDomainProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.ExternalDomainProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.DomainConvertersProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.EntityProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.DaoProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告6個

ちゃんと検証してないけど、多分この記事にある通りにすれば、ワーニングは消えるっぽい。

つまり、org.seasar.doma.internal.apt.AbstractGeneratingProcessorで、以下のコードを追加すればよい。

@Override
public SourceVersion getSupportedSourceVersion() {
    return SourceVersion.latest();
}

残念な事に以下の様な書き方は出来ない。ぐぬぬ。

@SupportedSourceVersion(SourceVersion.latestSupported())

doma-tutorial

  • GradleWrapperを付属して欲しい。現状だとGradleをインストールしている人しか、build.gradleを使えない。
  • build.gradleを改善してGistにしておいたので、参考にして良い部分だけ取込んで欲しい。

doma-gen

dialectNameを指定しなくても良い様にしてほしい

dialectNameは、DriverClassNameもしくは、urlから類推できる程度に自明なので設定しなくても良い様にして欲しい。

H2にpostgresqlのドライバでアクセスするとか、そういう変態行為は無視して良いんじゃないかな。

doma-genのリリースアーカイブの内容を見直して欲しい。

トップレベルにあるbuild.xmlやpom.xmlはdoma-genの開発者にとって意味のあるものであって、 ユーザが使うものでは無いので別な所に動かすか、そもそもリリースアーカイブに含めないで欲しい。

resources/doma-gen-build.xmlなんてサブディレクトリに入ってるものが目的のファイルだなんて罠っぽすぎる。

タスクをロードし易い様にpropertiesファイルの入ったjarファイルをリリースして欲しい。

  • task.properties
gen=org.seasar.doma.extension.gen.task.Gen
genTest=org.seasar.doma.extension.gen.task.GenTest

以上のファイルが入っていると、以下の様な定義が出来る様になる。

<taskdef classpathref="classpath" resource="tasks.properties"/>

genTestタスクで生成されるテストコードのメソッド名及びテストクラス名を改善して欲しい

テストクラス名をパスの下から2番目にした上で、ファイル名をテストメソッド名にして欲しい。

  • 現状
public class SqlTest extends TestCase {

~~省略~~
    /**
     * 
     * @throws Exception
     */
    public void test0() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/DepartmentDao/selectById.sql", dialect);
        execute(sqlFile);
    }

    /**
     * 
     * @throws Exception
     */
    public void test1() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/DepartmentDao/selectByIdAndVersion.sql", dialect);
        execute(sqlFile);
    }

~~省略~~
}
  • 将来
public class DepartmentDaoTest extends TestCase {

~~省略~~
    /**
     * 
     * @throws Exception
     */
    public void selectById() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/DepartmentDao/selectById.sql", dialect);
        execute(sqlFile);
    }

    /**
     * 
     * @throws Exception
     */
    public void selectByIdAndVersion() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/DepartmentDao/selectByIdAndVersion.sql", dialect);
        execute(sqlFile);
    }


~~省略~~
}

サンプル用ビルドファイルに不要なコードがあるので削除して欲しい

具体的には以下の部分は不要。

<typedef name="entityConfig" classname="org.seasar.doma.extension.gen.task.EntityConfig" loaderref="loader"/>
<typedef name="daoConfig" classname="org.seasar.doma.extension.gen.task.DaoConfig" loaderref="loader"/>
<typedef name="sqlConfig" classname="org.seasar.doma.extension.gen.task.SqlConfig" loaderref="loader"/>
<typedef name="sqlTestConfig" classname="org.seasar.doma.extension.gen.task.SqlTestConfig" loaderref="loader"/>