Closed kakusuke closed 5 years ago
Listよりも配列が便利なケースが思い浮かびませんでした。 お手数ですがサンプルコードを見せもらえないでしょうか?
ごくたまにあるのですが、直近では、Enumのnameの値をDBに登録するポリシーのシステムで、enumの順番に並び替えをしようとしたときにありました。 基本的にはListでいいのですが、配列も受け付けていただけるとありがたいです。
public enum Grade {
幼児,
小1,
小2,
小3,
小4,
小5,
小6,
中1,
中2,
中3,
高1,
高2,
高3,
高卒,
;
}
SELECT /*%expand*/* FROM student
ORDER BY
/*%for grade : @example.enums.Grade@values()*/
grade <> /*grade*/'小1',
/*%end*/
id
なるほど。Enumのvalues()は配列を返すのでしたね。 対応する方向で考えますが、 対応を終えるまでにはいただいた #276 へまだ2つの修正が必要です。
./gradlew spotlessApply
を実行してpushしてもらうだけ )フォーマットをしないとCIのビルドが成功しない設定にしています。 また、2番の対応をしないとコンパイルエラーとなります。
質問なんですが、いただいたPRに関して最後まで対応されるか、私の方で引き取って欲しいかどちらが良いか希望はありますか?私はどちらでも大丈夫です。
ありがとうございます。 せっかくなので、僕が最後まで対応したいです。 よろしくおねがいします。
了解です 😄 わからない点などあればなんでも聞いてください。(ここでもgitterでも構いません)
ありがとうございます。 2点ほど。
https://github.com/domaframework/doma/pull/276/files#diff-54d032887af1bb9ce5ebec9c7207463eR69
こちらのテストを書いたのですが、何故かElements#getTypeElement
にStream
を渡すタイミングでNPEが起こっていました。
JavaCompilerのcloseが先に発生しているようでしたが、それ以上追っかけられていません。
ただ、デバッグ中に何故かctx.getTypes().getTypeMirror(Collection.class)
を行うと取得できることを発見しまして、ひとまず入れています。
原因になにか心当たりはありますでしょうか。
テスト上はメソッドの引数に配列を渡しても大丈夫のはずですが、実際に使ってみたところパラメータ名の取得に失敗するようです。(DOMA4067) https://github.com/kakusuke/simple-boilerplate/blob/master/src/test/java/boilerplate/dao/EmployeeDaoTest.java#L36 Listにしたときは動くので、まだ修正しなければならない箇所があるのだと思いますが、どのへんになりますでしょうか。
原因になにか心当たりはありますでしょうか
あります!
Annotation Processing の中核に ProcessingEnvironment
というクラスがありますが、Domaがコンパイル後に得られた ProcessingEnvironment
のインスタンスを使ってテストをしているのが原因のようです。
コンパイル最中のインスタンスを使ってテストをすれば問題ないことがわかりました。
近日中に私の方でテストの仕方を変更しますので、その変更を取り込んでもらえないでしょうか?
まだ修正しなければならない箇所があるのだと思いますが
バインド変数に紐づけられることを教えてあげる必要があります。このクラスで visitArrayCtType
して true
を返してください。
https://github.com/domaframework/doma/blob/2.22.0/src/main/java/org/seasar/doma/internal/apt/meta/query/QueryParameterMeta.java#L112
近日中に私の方でテストの仕方を変更しますので、その変更を取り込んでもらえないでしょうか?
ありがとうございます! 試してみます
遅くなりました おそらく対応できたかと思います よろしくおねがいします
Merged #276
for
文内でIterable
だけしか使えないのが時々不便に感じることがあります。 例えば、enumの値すべてを直接回したい場合、配列が使えないのでリストを返すvalueList
メソッドを定義し、それを呼び出すなど手間が必要になります。 拡張for文と同様、配列も回せるようにしたいです。