2016-05-03 17 views
1

CodeModelを使用すると、修飾子の順序を制御する方法はありますか? 特にフィールドを作成するとき。CodeModel修飾子の順番

CodeModelが、それはJava言語仕様とSonarQubeとのCheckstyleのような製品よりも異なって修飾オーダーの独自の定義だ持っているようだ:

https://sonar43.spring.io/rules/show/squid:ModifiersOrderCheck?layout=false http://checkstyle.sourceforge.net/config_modifier.html

修飾子は、次の順序で表示される必要があります。

  1. 注釈
  2. 公共
  3. プライベート
  4. 抽象
  5. 静的
  6. 最終
  7. ネイティブ
  8. strictfpの
を同期
  • 過渡
  • 揮発性
  • を保護

    このサンプルコード:*これは不可能です

    private final static long serialVersionUID = 1L; 
    
  • 答えて

    0

    // Create field for serialVersionUID 
    JFieldVar field1 = newClass.field(JMod.PRIVATE | JMod.STATIC | JMod.FINAL, long.class, "serialVersionUID"); 
    field1.init(JExpr.lit(1L)); 
    

    が示唆順序に従わない、次の修飾子を生成します。厄介な反射ハッキングでさえそれをすることはありません。修飾子の順番は、JMods#generate(JFormatter)メソッド(最下部)で決定されます。残念ながら、JModsクラスには、明示的にprivateと宣言されているコンストラクタが1つしかありません。


    * はもちろん、あなたが計装、バイトコードアセンブリまたは類似の別の層を追加し、または単にローカルな使用のためのCodeModelの修正版を作成することができます。しかし、修飾子の順序を変更する非侵入的な方法はありません。

    +0

    はい、表示されます。アドバイスをありがとうございます。私は自分の目的のためにローカルに変更を加えます。グループが変更依頼を受け入れているかどうか?もしそうなら、どのようにしてこれを待ち行列に入れるのですか? – Larz

    +0

    変更要求が不明です。ソースの最後の変更は2年前です。そしてjava.netは遅かれ早かれシャットダウンされるでしょう。 GitHubにはいくつかのクローン/フォークがありますが、残念ながら "公式"レポはわかりません... – Marco13