dbflute / dbflute-core

DBFlute core libraries for Java8
http://dbflute.seasar.org/
23 stars 18 forks source link

外出しSQL関連自動生成コードの出力ブレを修正 #118

Closed little-forest closed 3 years ago

little-forest commented 3 years ago

問題点

外だしSQLを複数含むプロジェクトを自動生成したとき、Windows環境とMac/Linux環境で一部の自動生成結果に差違が生じます。

具体的には *Bhv クラスの以下の箇所でPATH_〜 定数の出力順序が環境によって変わります。

// ===================================================================================
//                                                                          Definition
//                                                                          ==========
/*df:beginQueryPath*/
public static final String PATH_sqlname1 = "sqlname1";
public static final String PATH_sqlname2 = "sqlname2";
public static final String PATH_sqlname3 = "sqlname3";
/*df:endQueryPath*/
・・・

コード的には等価なので動作上の問題はないのですが、自動生成されたコードをGitで管理するときに意図しない差分検出され、プルリクレビューのノイズになります。

原因と対処

原因は、ファイルシステム上で外だしSQLのファイルを列挙する際、File#listFiiles() で列挙した結果をソートせずにそのまま保持していることでした。

[listFiles()のJavaDoc](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/File.html#listFiles())を見ると

There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order.

と明確に記述されており、列挙結果の順序が保証されていないことがわかります。

このため、列挙した外だしSQLのリストをソートする実装を追加しました。