2009-01-27 17 views
10

¿Alguien sabe de un método de plug-in o Eclipse para obtener Eclipse para generar getter/setters en una línea como la siguiente:Eclipse captador/formato colocador

public String getAbc() { return abc; } 

En lugar de

public String getAbc() { 
    return abc; 
} 

I estoy en Eclipse v. 3.2.2.

Gracias.

Respuesta

12

No sé cómo hacer que Eclipse generan en el formato que desee, pero se puede hacer una búsqueda/reemplazar el uso de estas expresiones regulares después se generan los métodos:

Encontrar:

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

Reemplazar por:

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

Esta expresión se transforman los captadores y definidores generadas a ser una línea. No se preocupe por ejecutarlo con una mezcla de métodos transformados y recientemente generados; Funcionará bien.

+0

Gracias Hosam. Idealmente, preferiría una forma de hacer que Eclipse genere los captadores en una sola línea sin tener que realizar un segundo paso. –

+0

De nada. Buena suerte encontrando uno. –

+0

Diría que su RegEx funciona bien. Una cosa - parece que en mi versión/configuración de Eclipse, la expresión "reemplazar por" necesita usar signos de dólar en lugar de la barra invertida: $ 1 $ 2 $ 3 ($ 4) {$ 5} –

1

El formato de código Java en Eclipse no diferencia entre getters/setters y cualquier otro método en una clase. Entonces esto no se puede hacer mediante el formato de eclipse incorporado.

Tendrá que volver a:

  1. ejecutar una búsqueda/reemplazo con la expresión regular mencionada
  2. obtener en plug-in externo como PMD o CheckStyle y hacer cumplir una regla de expresiones regulares en base a la opción anterior
0

Yo quería publicar como un comentario a la respuesta designada, pero no parecen ser capaces de hacerlo.

que modifica la respuesta de Hosam Aly trabajar con tipos genéricos e interior de la forma:

List<X> 

y

Map.Entry 

La cadena de búsqueda de expresiones regulares 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 el mismo que antes:

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

creo que emparejan genéricos es importante, así 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+\} 
+0

Esto probablemente debería haber sido un comentario sobre la respuesta de Hosam Aly, no una respuesta en sí misma. – Jules

2

Como una variación del método de sustitución de expresión regular, la siguiente vuelve a formatear el espacio en blanco de modo que los emisores son seguidos por una línea en blanco, pero getters no son.

Encontrar:

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

Reemplazar 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 cosa estética de menor importancia, pero pensé que si usted está buscando una Responda a esta pregunta, entonces usted es probablemente (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".

+0

impresionante, ¡justo lo que estoy buscando! –

+0

mejor respuesta (intenté todas en la página) – ismail

Cuestiones relacionadas