2016-05-03 4 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

Смежные вопросы