Domanda

Ho un numero piuttosto grande di file sorgente di cui ho bisogno per analizzare ed estrarre tutti i letterali di stringa e inserirli in un file mentre riproduco la vecchia costante java.
Ad esempio:

Label l = new Label("Cat");

Diventerebbe:

Label l = new Label(Constants.CAT);

E in Constants.java avrei:

public final static String CAT = "Cat";

Non voglio che le stringhe vengano esternalizzate in un file di testo di proprietà.
Uno dei motivi è la coerenza e la leggibilità del codice.
L'altro è che il nostro codice client utilizza GWT , che non supporta il meccanismo del file di testo delle proprietà Java.

Potrei scrivere una sorta di parser (forse usando il compito di sostituire la formica)?
Ma mi chiedevo se un IDE fa già questo genere di cose automaticamente.

È stato utile?

Soluzione

Per completare la risposta di Peter Kelley, potresti considerare per l'IDE di eclissi la soluzione AST .

Potresti quindi scrivere un programma AST che analizza il tuo codice sorgente e fa quello che vuoi.

Un esempio completo è disponibile in questo corner eclipse articolo , anche maggiori dettagli nell ' guida di eclipse .
E puoi trovare alcuni esempi nel Listato 5 della sezione " Implementazione di sul posto Traduzione " di Automatizzare l'incorporamento di lingue specifiche del dominio in Eclipse JDT , insieme a più esempi nei progetti GitHub .

Altri suggerimenti

Eclipse lo fa automaticamente. Fai clic con il pulsante destro del mouse sul file, scegli " Sorgente " ;, quindi " Esternalizza stringhe "

Questo non fa esattamente quello che hai richiesto (avendo le stringhe in un file Constants.java come stringhe) ma il metodo usato è davvero molto potente. Li sposta in un file delle proprietà che può essere caricato in modo dinamico a seconda delle impostazioni internazionali. Avendoli in un file sorgente Java separato come suggerisci significa che avrai TUTTE le lingue nella tua applicazione contemporaneamente o spedirai diverse applicazioni a seconda delle impostazioni locali.

Lo usiamo per le nostre applicazioni in cui anche le cose di base devono essere fornite in inglese e giapponese - le nostre applicazioni più complicate vengono fornite in 12 lingue - non siamo affatto una piccola società di sviluppo software: -).

Se li li vuoi in un file Java, nonostante le carenze già menzionate, è molto più facile scrivere un programma per trasformare il file delle proprietà in un file sorgente Java piuttosto che provare e estrarre le stringhe dalla sorgente Java in formato libero.

Tutto ciò che devi fare è modificare la classe Accessor per utilizzare le stringhe integrate (nella classe separata) anziché caricarle in fase di esecuzione.

Ci sono alcuni buoni motivi per cui non vorresti farlo. A parte il fatto che un tale file generato (non sapevo della funzione eclipse) non farà distinzioni tra le stringhe che stai impostando, ad esempio, come sostiene il costruttore nelle classi di test e le cose che vuoi effettivamente avere come costanti, il problema più grande è che tutte le tue finali statiche pubbliche verranno compilate nelle tue classi, e se vuoi cambiare il comportamento delle classi dovrai cambiare non solo la classe che contiene le costanti ma tutto ciò che le fa riferimento.

Riconosco pienamente ciò che ha detto Pax Diablo. Stiamo usando anche quella funzione.

Se applicata a un file di classe, la funzione " Esternalizza stringhe " creerà due file, una classe Messages.class e un file delle proprietà message.properties. Quindi reindirizzerà tutti gli usi diretti dei letterali di stringa a una chiamata a Messages.get (chiave di stringa) e utilizzando il tasto inserito per la stringa in " Ext. Stringa " procedura guidata.

A proposito: cosa c'è di male nei file delle proprietà? Come ha detto, puoi semplicemente cambiare il file delle proprietà e non devi cambiare la classe se devi cambiare il testo.

Un altro vantaggio è questo: il modo di estrarre i valori letterali delle stringhe in un file di proprietà ti lascia libero di tradurre la lingua di origine in qualsiasi lingua tu voglia senza modificare alcun codice . Il caricatore di file delle proprietà carica automaticamente il file della lingua di destinazione utilizzando il file corrispondente con il codice ISO della lingua. Quindi non devi preoccuparti della piattaforma su cui viene eseguito il codice, selezionerà la lingua appropriata (quasi) automaticamente. Consulta la documentazione della classe ResourceBundle per come funziona in dettaglio.

Potresti dare un'occhiata al motore di trasformazione della fonte del jackpot in NetBeans che ti permetterebbe di scrivere il tuo script trasformazioni di origine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top