Pergunta

Eu tenho um bastante grande número de arquivos de origem que eu preciso analisar e extrair todas as strings literais e colocá-los em um arquivo como peça antiga constante java.
Por exemple:

Label l = new Label("Cat");

Quer tornar-se:

Label l = new Label(Constants.CAT);

E em Constants.java eu teria:

public final static String CAT = "Cat";

Não quero que as cordas para ser exteriorizada em um arquivo de texto propriedade.
Uma das razões é a consistência e legibilidade do código.
A outra é que o nosso cliente usa código GWT, que não suporta Java mecanismo de arquivo de texto propriedade.

Eu poderia escrever algum tipo de analisador (usando formiga substituir tarefa talvez)?
Mas eu me perguntava se um IDE já faz esse tipo de coisa automaticamente.

Foi útil?

Solução

Para completar resposta Peter Kelley, que você pode considerar para eclipse IDE do AST solução.

Você pode, em seguida, escrever um programa AST que analisar seu código-fonte e faz o que quiser.

Um exemplo completo está disponível neste canto eclipse artigo , também mais detalhes no eclipse ajuda .
E você pode encontrar alguns exemplos em Listagem 5 da seção "Implementação de tradução in-place "de Automatizar a incorporação de Domain Specific Languages ??em Eclipse JDT , ao lado de noreferrer vários exemplos em projetos GitHub .

Outras dicas

Eclipse faz isso automaticamente. Direito do mouse no arquivo, escolha "Fonte", então "exteriorizar cordas"

Esta não faz exatamente o que você solicitado (tendo as cordas em um arquivo Constants.java como cordas), mas o método utilizado é muito poderoso. Ele move-los em um arquivo de propriedades que pode ser carregado dinamicamente, dependendo da sua localidade. Tê-los em um arquivo de origem Java separado como você sugere significa que você quer vai ter todos os idiomas em seu aplicativo de uma vez ou você vai enviar aplicações diferentes, dependendo do local.

Vamos utilizá-lo para nossas aplicações onde até mesmo o material básico tem para ser lançado em Inglês e Japonês - nossas aplicações mais complicado enviar com 12 línguas - não somos uma pequena empresa de desenvolvimento de software por qualquer meio: -).

Se você do os quer em um arquivo Java, apesar das deficiências já mencionadas, é muito mais fácil de escrever um programa para transformar o arquivo de propriedades em um arquivo de origem Java do que está a tentar extrair as cordas de forma livre fonte Java.

Tudo o que você precisa então de fazer é modificar a classe Accessor usar as cordas embutido (na classe separado) em vez de carregá-los em tempo de execução.

Existem algumas boas razões pelas quais você não gostaria de fazer isso. Afora o fato de que qualquer arquivo gerado (eu não sabia sobre a função eclipse) não vai distinguir entre cadeias de caracteres que você está definindo, por exemplo, como args construtor em classes de teste e coisas que você realmente quer ter como constantes, o maior problema é que todos os seus finais estáticos públicos vão ser compilados em suas aulas, e se você quiser alterar o comportamento classes que você vai precisar de alterar não só a classe segurando as constantes, mas tudo o que faz referência a ele.

I totalmente reconhecer o que Pax Diablo disse. Estamos usando essa função também.

Quando aplicado a um arquivo de classe a função de "externalização cordas" criará dois arquivos, uma classe Messages.class e um messages.properties propriedades do arquivo. Em seguida, ele irá redirecionar todos os usos diretos de strings literais a uma chamada para Messages.get (String chave) e usando a chave que você entrou para a cadeia no assistente "Ext. String".

BTW: O que é tão ruim sobre arquivos de propriedade? Como ele disse, você pode simplesmente mudar o arquivo de propriedades e não têm para alterar a classe, se você precisa mudar o texto.

Outra vantagem é esta: A maneira de extrair as strings literais em um folhas de arquivo propriedade-o livre para traduzir o idioma de origem em qualquer idioma que você deseja sem modificar qualquer código . o arquivo de propriedades cargas carregadora o ficheiro de linguagem de destino automaticamente utilizando o ficheiro que corresponde com o código da linguagem iso. Então você não precisa se preocupar com a plataforma de seu código é executado, ele irá selecionar o idioma apropriado (quase) automaticamente. Consulte a documentação de classe ResourceBundle para como isso funciona na detalhes.

Você pode querer verificar o Jackpot transformação fonte motor no NetBeans que lhe permitiria roteiro seu transformações fonte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top