2009-01-27 12 views
10

jemand einer Eclipse-Plug-in oder diese Methode nicht kennen zu lernen Eclipse-Getter/Setter in einer Zeile wie folgt zu generieren:Eclipse-Getter/Setter-Format

public String getAbc() { return abc; } 

Statt

public String getAbc() { 
    return abc; 
} 

I bin auf Eclipse v. 3.2.2.

Danke.

Antwort

12

Ich weiß nicht, wie man Eclipse-sie wollen im Format, das Sie generieren, aber Sie können eine Suche/ersetzen diese mit regulären Ausdrücken, nachdem die Methoden erzeugt werden:

Suche:

(?m)((?:public |private |protected)?[\w$]+) (get|set|is)([\w$]+)\(([\w$]+(?:\[\])? [\w$]+)?\) \{\s+(return [\w$]+;|this.[\w$]+ = [\w$]+;)\s+\} 

ersetzen durch:

$1 $2$3($4) { $5 } 

Dieser Ausdruck wird die erzeugten Getter und Setter-Transformation einer Linie zu sein. Mach dir keine Sorgen darüber, es mit einer Mischung aus transformierten und neu generierten Methoden auszuführen; es wird gut funktionieren.

+0

Dank Hosam. Ich würde im Idealfall einen Weg bevorzugen, Eclipse nur die Getter in einer einzigen Zeile zu erzeugen, ohne einen zweiten Schritt ausführen zu müssen. –

+0

Gern geschehen. Viel Glück, eins zu finden. –

+0

Ich würde sagen, dass Ihre RegEx funktioniert gut. Eine Sache - scheint in meiner Version/Config von Eclipse, der Ausdruck "Ersetzen durch" muss Dollarzeichen anstelle des Backslash verwenden: $ 1 $ 2 $ 3 ($ 4) {$ 5} –

1

Die Java-Code-Formatierung in Eclipse unterscheidet nicht zwischen Getter/Setter und anderen Methoden in einer Klasse. Dies kann nicht durch die eingebaute Eclipse-Formatierung erreicht werden.

Sie müssen entweder:

  1. Lauf ein Suchen/Ersetzen mit dem oben genannten regex
  2. en externes Plugin bekommen wie PMD oder CheckStyle und erzwingen eine Regex Regel auf der Grundlage früherer Option
0

Ich wollte als Kommentar an die angegebenen Antwort schreiben, aber ich scheine nicht in der Lage zu sein.

I Hosam Aly Antwort modifiziert mit allgemeinen und inneren Typen der Form zu arbeiten:

List<X> 

und

Map.Entry 

Der überarbeitete regulären Ausdruck Suchzeichenfolge ist:

(?m)((?:public |private |protected)?[\w\.\<\>$]+) (get|set|is)([\w$]+)\(([\w\.\<\>$]+ [\w$]+)?\) \{\s+(return [\w\.\<\>$]+;|this.[\w$]+ = [\w$]+;)\s+\} 

Dieser reguläre Ausdruck ermöglicht spitze Klammern und einen Punkt im Typ.

Zum Beispiel:

public List<String> getStringList() 

und

public void setStringList(List<String> list) 

und

public Map.Entry getEntry() 

Und die Zeichenfolge ersetzen ist das gleiche wie zuvor:

$1 $2$3($4) { $5 } 
4

denke ich Generika passend auch wichtig ist, so dass die korrekte regexp ist:

(?m)((?:public |private |protected)?[\w\<\>$]+) (get|set|is)([\w$]+)\(([\w\<\>$]+ [\w$]+)?\) \{\s+(return [\w$]+;|this.[\w$]+ = [\w$]+;)\s+\} 
+0

Dies sollte wahrscheinlich ein Kommentar zu Hosam Alys Antwort gewesen sein, keine Antwort allein. – Jules

2

Als Variation des regexp Ersatz Ansatz, der folgende den Leer neu formatiert, so dass Setter durch eine Leerzeile, sondern Getter sind nicht.

Suche:

(\s(?:get|is|set)\w+\([^)]*\))\s*\{\s*(?:([^=;}]+;)\s*\}\s*(\R)|([^=;}]+=[^=;}]+;)\s*\}\s*(\R)) 

ersetzen durch:

$1 { $2$4 } \R$5 

Ergebnisse in:

int getTotal() { return total; } 
void setTotal(int total) { this.total = total; } 

List<String> getList() { return list; } 
void setList(List<String> list) { this.list = list; } 

Map.Entry<String, Integer> getEntry() { return entry; } 
void setEntry(Map.Entry<String, Integer> entry) { this.entry = entry; } 

Es ist eine kleine ästhetische Sache, aber ich dachte, dass, wenn Sie für eine gesuchte Antwort auf diese Frage, dann bist du wahrscheinlich (fast) so anal wie ich ;-)

Ich weiß, dass meine Regexp-Bedingungen nicht so streng sind wie die von @Hosam, aber ich habe keine "falsch positiven" Ersetzungen erlebt.

+0

genial, genau wonach ich suche! –

+0

größte Antwort (versuchte alle auf dieser Seite) – ismail