2016-05-03 5 views
1

Mit CodeModel gibt es eine Möglichkeit, die Reihenfolge der Modifikatoren zu steuern? Speziell beim Erstellen von Feldern.CodeModel Modifier Auftrag

Codemodel scheint seine eigene Definition von Modifikator zu haben, um die als die von der Java Language Specification unterscheidet und Produkte wie Sonarqube und Checkstyle:

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

Modifikatoren sollten in der folgenden Reihenfolge angezeigt:

  1. Anmerkungen
  2. öffentlichen
  3. geschützt
  4. privaten
  5. abstrakte
  6. statische
  7. final
  8. transiente
  9. flüchtigen
  10. synchronisiert
  11. nativen
  12. strictfp

Dieser Beispielcode:

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

Erzeugt die folgenden Modifikatoren, die nicht vorgeschlagen, um folgt:

private final static long serialVersionUID = 1L; 

Antwort

0

Dies ist * nicht möglich. Nicht mal böse Reflection Hacks werden es tun. Die Reihenfolge der Modifikatoren wird durch die Methode JMods#generate(JFormatter) (unten) festgelegt. Leider hat die Klasse nur einen Konstruktor, der explizit als private deklariert ist.


* Natürlich können Sie eine weitere Ebene der Instrumentierung, Bytecode-Montage oder ähnlich, hinzufügen oder nur eine modifizierte Version von Codemodel für den lokalen Gebrauch erstellen. Aber es gibt keine nicht aufdringliche Art, die Modifikatorreihenfolge zu ändern.

+0

Ja, ich verstehe. Danke für die Beratung. Ich werde die Änderung vor Ort für meine Zwecke vornehmen. Irgendeine Idee, wenn die Gruppe Änderungswünsche akzeptiert? Wenn ja, wie bekomme ich diesen in die Warteschlange? – Larz

+0

Nicht sicher über die Änderungsanforderungen. Die letzte Änderung in der Quelle war vor 2 Jahren. Und java.net wird früher oder später geschlossen werden. Es gibt einige Klone/Gabeln auf GitHub, aber ich kenne kein "offizielles" Repo, leider ... – Marco13