Pregunta

Tengo un número bastante grande de archivos de origen que necesito analizar y extraer todos los literales de cadena y colocarlos en un archivo como constante de Java antiguo de reproducción.
Por ejemplo:

Label l = new Label("Cat");

Se convertiría en:

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.
La otra es que nuestro código de cliente utiliza GWT , que no admite el mecanismo de archivos de texto de propiedad de Java.

¿Podría escribir algún tipo de analizador (quizás con la tarea ant replace)?
Pero me pregunté si un IDE ya hace este tipo de cosas automáticamente.

¿Fue útil?

Solución

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

Luego puedes escribir un programa AST que analice tu código fuente y haga lo que quieras.

Un ejemplo completo está disponible en este esquina del eclipse artículo , también más detalles en eclipse help .
Y puede encontrar algunos ejemplos en Listado 5 de la sección " Implementación de en el lugar traducción " de automatizar la incorporación de lenguajes específicos de dominio en Eclipse JDT , junto a múltiples ejemplos en proyectos de GitHub .

Otros consejos

Eclipse hace esto automáticamente. Haga clic con el botón derecho en el archivo, seleccione " 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 puede cargarse dinámicamente dependiendo de su ubicación Tenerlos en un archivo fuente de Java por separado, como sugiere, significa que tendrá TODOS los idiomas en su aplicación de una sola vez o enviará 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 do los quiere en un archivo Java, a pesar de las deficiencias ya mencionadas, es mucho más fácil escribir un programa para transformar el archivo de propiedades en un archivo fuente Java que intentarlo. extraiga las cadenas de código fuente de Java de forma libre.

Todo lo que necesitas hacer es modificar la clase de Accessor para usar las cadenas incorporadas (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 (no sabía acerca de la función de eclipse) no va a distinguir entre las cadenas que está configurando, por ejemplo, como argumentos de constructor en clases de prueba y cosas que realmente desea tener como constantes, el problema más importante es que todas las finales públicas estáticas se compilarán en sus clases y, si desea modificar el comportamiento de las clases, tendrá que alterar no solo la clase que contiene las constantes, sino todo lo que la referencia.

Reconozco completamente lo que dijo Pax Diablo. También estamos usando esa funció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. Luego, redireccionará todos los usos directos de los literales de cadena a una llamada a Messages.get (clave de cadena) y utilizando la clave que ingresó para la cadena en la sección " Ext. Cadena " mago.

BTW: ¿Qué tiene de malo los archivos de propiedades? Como dijo, solo puedes 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 en libertad de traducir el idioma de origen a 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 iso de idioma. Para no tener 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 cómo funciona esto en detalle.

Es posible que desee consultar el motor de transformación de origen de Jackpot en NetBeans, lo que le permitiría programar su Transformaciones de origen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top