Extrae toda la cadena de un proyecto de Java

Tengo un número bastante grande de archivos de origen que necesito analizar y extraer todos los literales de cadenas y ponerlos en un archivo como reproducir la constante de Java antigua.
Por ejemplo:

Label l = new Label("Cat"); 

Se convertiría:

 Label l = new Label(Constants.CAT); 

Y en Constants.java tendría:

 public final static String CAT = "Cat"; 

No quiero que las cadenas se externalicen en un archivo de texto de propiedad.
Una razón es la coherencia y la legibilidad del código.
El otro es que nuestro código de cliente usa GWT , que no es compatible con el mecanismo de archivo de texto de la propiedad Java.

Podría escribir algún tipo de analizador (usando la tarea de reemplazar ants, tal vez)?
Pero me preguntaba si un IDE ya hace este tipo de cosas automáticamente.

Para completar la respuesta de Peter Kelley, puede considerar para eclipse IDE la solución AST .

Luego puede escribir un progtwig AST que analice su código fuente y haga lo que quiera.

Un ejemplo completo está disponible en este artículo de esquina de eclipse , también más detalles en la ayuda de eclipse .
Y puede encontrar algunos ejemplos en el Listado 5 de la sección “Implementación de traducción in situ” de Automatización de la incrustación de Idiomas específicos de dominio en Eclipse JDT , junto con múltiples ejemplos en proyectos de GitHub .

Eclipse hace esto automáticamente Haga clic derecho en el archivo, elija “Fuente”, luego “Externalizar cadenas”

Esto no hace exactamente lo que solicitó (tener las cadenas en un archivo Constants.java como cadenas), pero el método utilizado es muy poderoso. Los mueve a un archivo de propiedades que se puede cargar dinámicamente según su configuración regional. Tenerlos en un archivo de código fuente de Java separado como sugieres significa que tendrás TODOS los idiomas en tu aplicación a la vez o enviarás diferentes aplicaciones según la configuración regional.

Lo usamos para nuestras aplicaciones donde incluso las cosas básicas tienen que enviarse en inglés y japonés; nuestras aplicaciones más complicadas se envían en 12 idiomas; no somos una pequeña empresa de desarrollo de software de ninguna manera :-).

Si los quiere en un archivo Java, a pesar de las deficiencias ya mencionadas, es mucho más fácil escribir un progtwig para transformar el archivo de propiedades en un archivo fuente Java que tratar de extraer las cadenas de una fuente Java de forma libre.

Todo lo que necesita hacer es modificar la clase de Accesor para usar las cadenas integradas (en la clase separada) en lugar de cargarlas en tiempo de ejecución.

Hay algunas buenas razones por las que no querrías hacer esto. Aparte del hecho de que cualquier archivo generado de este tipo (no sabía acerca de la función de eclipse) no va a distinguir entre cadenas que está configurando, por ejemplo, como argon de constructor en clases de prueba y cosas que realmente desea tener como constantes, el problema más grande es que todas sus finales públicas estáticas se comstackrán en sus clases, y si desea alterar el comportamiento de las clases, deberá modificar no solo la clase que contiene las constantes, sino todo lo que la haga referencia.

Reconozco completamente lo que dijo Pax Diablo. Estamos usando esa función también.

Cuando se aplica a un archivo de clase, la función “Externalizar cadenas” creará dos archivos, una clase Messages.class y un archivo de propiedades messages.properties. A continuación, redirigirá todos los usos directos de los literales de cadenas a una llamada a Messages.get (clave String) y utilizando la clave que ingresó para la cadena en el asistente “Ext. String”.

Por cierto: ¿qué hay de malo en los archivos de propiedades? Como dijo, puedes simplemente cambiar el archivo de propiedades y no tienes que cambiar la clase si necesitas cambiar el texto.

Otra ventaja es esta: la forma de extraer los literales de cadena en un archivo de propiedad te deja libre para traducir el idioma de origen en cualquier idioma que desees sin modificar ningún código . El cargador de archivos de propiedades carga el archivo de idioma de destino automáticamente utilizando el archivo correspondiente con el código de idioma ISO. Para que no tenga que preocuparse por la plataforma en la que se ejecuta su código, seleccionará el idioma apropiado (casi) automáticamente. Consulte la documentación de la clase ResourceBundle para ver cómo funciona esto en detalle.

Es posible que desee comprobar el motor de transformación de fuente Jackpot en NetBeans que le permitiría crear un script de las transformaciones de origen.