programacion - Eclipse getter/setter format
eclipse programacion (6)
¿Alguien sabe de un plugin o método Eclipse para hacer que Eclipse genere getter / setters en una línea como esta:
public String getAbc() { return abc; }
En lugar de
public String getAbc() {
return abc;
}
Estoy en Eclipse v. 3.2.2.
Gracias.
El formato de código Java en Eclipse no diferencia entre getters / setters y cualquier otro método en una clase. Entonces esto no puede hacerse mediante el formato de eclipse incorporado.
Necesitarás:
- ejecuta una búsqueda / reemplazo con la expresión regular antes mencionada
- obtener un plugin externo como PMD o CheckStyle y aplicar una regla de expresiones regulares basada en la opción anterior
Puede usar el complemento de código rápido para generar este tipo de setters getter. Los detalles se dan aquí: http://fast-code.sourceforge.net/documentation.htm#create-new-field .
Quería publicar como comentario en la respuesta designada, pero parece que no puedo.
Modifiqué la respuesta de Hosam Aly para trabajar con tipos genérico e interno de la forma:
List<X>
y
Map.Entry
La cadena de búsqueda de expresión regular revisada es:
(?m)((?:public |private |protected )?[/w/./</>$]+) (get|set|is)([/w$]+)/(([/w/./</>$]+ [/w$]+)?/) /{/s+(return [/w/./</>$]+;|this.[/w$]+ = [/w$]+;)/s+/}
Esta expresión regular permite paréntesis angulares y un punto en el tipo.
Por ejemplo:
public List<String> getStringList()
y
public void setStringList(List<String> list)
y
public Map.Entry getEntry ()
Y la cadena de reemplazo es la misma que antes:
$1 $2$3($4) { $5 }
Creo que los genéricos coincidentes también son importantes, por lo que la expresión regular correcta es:
(?m)((?:public |private |protected )?[/w/</>$]+) (get|set|is)([/w$]+)/(([/w/</>$]+ [/w$]+)?/) /{/s+(return [/w$]+;|this.[/w$]+ = [/w$]+;)/s+/}
No sé cómo hacer que Eclipse los genere en el formato que desee, pero podría hacer una búsqueda / reemplazo utilizando estas expresiones regulares después de que se generen los métodos:
Encontrar:
(?m)((?:public |private |protected )?[/w$]+) (get|set|is)([/w$]+)/(([/w$]+(?:/[/])? [/w$]+)?/) /{/s+(return [/w$]+;|this.[/w$]+ = [/w$]+;)/s+/}
Sustituir por:
$1 $2$3($4) { $5 }
Esta expresión transformará los getters y setters generados en una línea. No se preocupe por ejecutarlo con una mezcla de métodos transformados y recientemente generados; Funcionará bien.
Como una variación del enfoque de regexp de reemplazo, el siguiente reformatea el espacio en blanco para que los setters sean seguidos por una línea en blanco, pero los getters no lo son.
Encontrar:
(/s(?:get|is|set)/w+/([^)]*/))/s*/{/s*(?:([^=;}]+;)/s*/}/s*(/R)|([^=;}]+=[^=;}]+;)/s*/}/s*(/R))
Sustituir por:
$1 { $2$4 } /R$5
Resultados en:
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 una cuestión estética menor, pero pensé que si estás buscando una respuesta a esta pregunta, entonces probablemente seas (casi) tan anal como yo ;-)
Sé que mis condiciones de expresión regular no son tan estrictas como las de @Hosam, pero no he experimentado ningún reemplazo "falso positivo".