Estou usando um gerador de analisador que cria um código meio feio. Como resultado, meu projeto Eclipse tem várias dezenas de avisos provenientes de arquivos de origem gerados. Sei que posso usar a @SuppressWarning
anotação para suprimir avisos específicos em elementos específicos, mas qualquer anotação que adicionar manualmente será perdida quando o gerador do analisador for executado novamente. Existe uma maneira de configurar o Eclipse para suprimir avisos para um arquivo ou diretório específico?
java
eclipse
suppress-warnings
generated-code
Chris Conway
fonte
fonte
Respostas:
A partir da versão 3.8 M6, o Eclipse (para ser exato: o JDT) tem funcionalidade integrada para isso. É configurável por meio do caminho de construção de um projeto: Propriedades do projeto> Caminho de construção Java> Compilador> Código-fonte
Anunciado aqui: Eclipse 3.8 e 4.2 M6 - Novo e notável , chamado Ignorar erros / avisos seletivamente das pastas de origem . É também de onde vem a imagem. Este é o novo recurso desenvolvido no Bug 220928 anteriormente vinculado .
fonte
Há um tíquete para isso, Bug 220928 , que já foi concluído para o Eclipse 3.8. Por favor, veja esta resposta para detalhes.
Se você estiver preso ao Eclipse 3.7 ou inferior: O usuário "Marc" comentando sobre esse tíquete criou (ou pelo menos se vincula a) um plugin chamado 'warningcleaner' em comentário 35 . Estou usando isso com muito sucesso enquanto espero que esse recurso seja integrado ao Eclipse.
É realmente muito simples:
fonte
Eu resolvi isso usando o plugin maven regexp replace - ele não resolve a causa, mas cura a dor:
Observe que eu não consegui fazer a notação ** funcionar, então você pode ter que especificar o caminho exatamente.
Veja o comentário abaixo para uma melhoria em como não gerar @SupressWarnings duplicados
fonte
^(@SuppressWarnings\(.*?\)\s+)?public class
. Ao incluir a anotação no padrão, ela não é duplicada se já estiver lá.${basedir}/
antestarget
na<include>
tag. Parece meio desagradável, mas como só funciona em arquivos gerados, vou aceitar!Acho que o melhor que você pode fazer é habilitar as configurações específicas do projeto para a exibição de avisos.
No topo do formulário está um link para definir as configurações específicas do projeto.
fonte
O usuário @Jorn sugeriu que o código Ant fizesse isso. Aqui está o que eu tenho
Observe que o <replace> do Ant faz a substituição de texto, não a substituição de expressão regular, portanto, ele não pode usar o metacaractere ^ no token para corresponder ao início da linha como o plug-in maven regexp replace faz.
Estou fazendo isso ao mesmo tempo em que executo o Antlr do maven-antrun-plugin no meu pom Maven, porque o plugin ANTLR maven não funcionou bem com o plugin maven Cobertura.
(Eu percebo que esta não é uma resposta à pergunta original, mas não posso formatar o código Ant em um comentário / resposta a outra resposta, apenas em uma resposta)
fonte
Eu não acho que o Eclipse inerentemente fornece uma maneira de fazer isso no nível do diretório (mas não tenho certeza).
Você poderia fazer com que os arquivos gerados fossem para um projeto Java separado e controlar os avisos para esse projeto específico.
Eu geralmente prefiro colocar o código gerado automaticamente em um projeto separado de qualquer maneira.
fonte
Você só pode suprimir avisos no nível do projeto. No entanto, você pode configurar a guia de problemas para suprimir avisos de arquivos ou pacotes. Vá para o menu Configurar Conteúdo e trabalhe com o escopo "No conjunto de trabalho:".
fonte
Este pequeno script python "corrige" os
.classpath
arquivos gerados por M2E e adiciona a tag XML necessária a todas as pastas de origem, começando comtarget/generated-sources
. Você pode simplesmente executá-lo da pasta raiz do seu projeto. Obviamente, você precisa executá-lo novamente quando as informações do projeto Eclipse forem geradas novamente a partir do M2E. E tudo por sua própria conta e risco, obviamente ;-)fonte
Estou fazendo isso com algumas gramáticas ANTLR, que geram um analisador Java usando Ant. O script de construção Ant inclui o
@SuppressWarnings("all")
em um arquivo Java e@Override
alguns métodos em outro. Posso pesquisar como é feito exatamente, se você estiver interessado.fonte
No caso do ANTLR 2, é possível suprimir avisos no código gerado por appenidng
@SuppressWarnings
antes da declaração da classe no arquivo de gramática, por exemplofonte
Isso pode ser feito excluindo certos diretórios do caminho de construção (o exemplo a seguir é fornecido usando o Eclipse 3.5)
[1] Abra o caminho de construção Java
[2] Adicionar diretórios para excluir
fonte
Já faz um tempo desde que lancei o plugin de limpeza de avisos e agora que estou usando o Eclipse 3.8, não preciso mais dele. No entanto, para aqueles que ainda precisam desse plugin, eu o lancei no github com o site de atualização no bintray. Se você ainda estiver usando o Eclipse 3.7 ou antes, isso pode ser útil. Verifique este site para detalhes de instalação.
fonte
Se o projeto eclipse for gerado a partir do gradle usando o
eclipse
comando do plugin Eclipse, aSelectively ignore errors/warnings from source folders
opção pode ser definida adicionando-se isto no nível superior do seubuild.gradle
arquivo:Isso pressupõe que as fontes geradas estão na
build/generated/parser
pasta.fonte