2016-05-03 24 views
1

使用CodeModel,有沒有辦法控制修飾符的順序? 特別是在創建字段時。CodeModel Modifier Order

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. 短暫
  9. 揮發性
  10. 同步
  11. 本地
  12. strictfp

此示例代碼:

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

產生不遵循建議的順序以下修飾符:

private final static long serialVersionUID = 1L; 

回答

0

這是不可能的*。甚至連惡意的反射黑客都會這樣做。修飾符的順序由JMods#generate(JFormatter)方法確定(在底部)。不幸的是,JMods類只有一個明確聲明爲private的構造函數。


* 當然,你可以添加儀器,字節碼裝配或類似的另一層,或只是創建CodeModel的供本地使用修改後的版本。但是沒有改變修飾順序的非侵入性方法。

+0

是的,我明白了。感謝您的建議。我將在本地爲我的目的進行更改。任何想法,如果該組正在接受變更請求?如果是這樣,我怎麼把這個放入隊列? – Larz

+0

不知道更改請求。來源的最後變化是2年前。 java.net遲早會被關閉。 GitHub上有一些克隆/分支,但我不知道一個「官方」回購,遺憾的是... – Marco13