h5. Introdução O conjunto de ferramentas de qualidade de código Java contém uma grande quantidade de software excelente e de código aberto. PMD é uma ferramenta que verifica seu código-fonte Java em relação a um conjunto de regras e relata qualquer discrepância que encontrar. Esta postagem no blog contém uma introdução ao PMD e exemplos de como escrever suas próprias regras em Java e XPath. h5. O que é o PMD? [PMD |
http://pmd.sourceforge.net
] é uma ferramenta de análise estática. Isso significa que o PMD funciona inspecionando o código-fonte, enquanto, por exemplo, o JUnit funciona executando realmente seu código. O PMD converte cada arquivo-fonte Java em uma chamada Árvore de Sintaxe Abstrata (AST), que é uma representação em árvore do código-fonte. Esta árvore é então examinada por regras do PMD, que procuram padrões indesejados no código. Uma regra poderia, por exemplo, procurar loops while cujos corpos de loop não estão entre chaves. Outra regra poderia procurar coleções que estão sendo iteradas sem o uso do idiom for (Iterator i = collection.iterator(); i.hasNext(); ). O PMD vem com uma série de regras úteis agrupadas em conjuntos de regras. Para obter mais informações sobre os conjuntos de regras integrados, consulte a página inicial do PMD. h5. Uso da ferramenta Rule Designer Para escrever regras do PMD, é necessário entender como navegar pela Árvore de Sintaxe Abstrata. O Rule Designer é uma ferramenta útil que permite transformar uma classe Java arbitrária em um AST. Execute o Rule Designer executando bin\designer.bat dentro do diretório do PMD, digite ou cole o código Java que deseja analisar e clique em "Go". Aqui está um exemplo:
h5. Escrevendo uma regra PMD As regras do PMD percorrem o AST usando o padrão de design visitor (
http://en.wikipedia.org/wiki/Visitor_pattern
). Cada nó no AST aceita objetos visitantes. Quando um visitante é passado para um nó, o nó chama o método visit no visitante, passando uma referência a si mesmo. A classe do nó determina qual dos vários métodos visit sobrecarregados será chamado no objeto visitante. Na prática, as novas regras do PMD estendem a classe net.sourceforge.pmd.AbstractRule. AbstractRule contém vários métodos visit sobrecarregados, herdados de net.sourceforge.pmd.ast.JavaParserVisitorAdapter. Ao escrever uma nova regra, você só precisa anular os métodos que lidam com os nós relevantes para a regra. Vamos escrever uma nova regra. O objetivo de nossa regra é garantir que os nomes das constantes de classe (ou seja, os campos que são estáticos e finais) consistam apenas em letras maiúsculas e o caractere de sublinhado. Ao observar mais de perto o exemplo do Rule Designer anterior, aprendemos que precisamos visitar todos os nós FieldDeclarator no AST. Isso significa que devemos anular o método visit(ASTFieldDeclaration node, Object data) em nossa classe de regra. O código-fonte completo da regra segue abaixo. ISENÇÃO DE RESPONSABILIDADE: Observe que o código-fonte a seguir é fornecido apenas para fins educacionais. Não é destinado a uso em produção. UpperCaseConstantsRule.java package dk.applicon.java.pmd.rules; import net.sourceforge.pmd.AbstractRule; import net.sourceforge.pmd.ast.ASTFieldDeclaration; public class UpperCaseConstantsRule extends AbstractRule { private static final String CONSTANT_NAME_PATTERN = "[A-Z]+(?:_[A-Z]+)*"; public Object visit(ASTFieldDeclaration node, Object data) { if (node.isFinal() && node.isStatic()) { // O campo é estático e final String name = node.getVariableName(); if (!name.matches(CONSTANT_NAME_PATTERN)) { // Adicionar uma violação de regra ao relatório addViolation(data, node); } } return super.visit(node, data); } } O código é bastante simples. A declaração de retorno, no entanto, pode não fazer sentido imediatamente. Ao chamar o método visit anulado na superclasse, garantimos que também os filhos do nó atual sejam visitados. h5. Criando um documento XML de conjunto de regras h5. Executando o PMD Agora estamos prontos para executar o PMD. Supondo que a classe de regra está em seu caminho de classe, execute o script pmd.bat da seguinte maneira:
O primeiro parâmetro é o nome de um arquivo-fonte ou um diretório de arquivos-fonte. O segundo parâmetro é o formato do relatório. O terceiro parâmetro é o nome do documento XML de conjunto de regras. Neste exemplo, estou executando a regra recém-criada contra seu próprio código-fonte. A classe UpperCaseConstantsRule contém uma constante de classe, mas o nome não viola a regra. Vamos mudar isso: private static final String constantNamePattern = "[A-Z]+(?:_[A-Z]+)*"; Ao executar o PMD novamente, agora obtemos um relatório de erro que indica um problema na linha 8 de UpperCaseConstantsRule.java:
Quitar espacios en una consulta SQL
Quitar espacios en una consulta SQL
Cuando trabajamos con consultas SQL, a menudo nos encontramos con la necesidad de limpiar o mani...
Transacciones MIGO y MIRO en SAP MM
Transacciones MIGO y MIRO en SAP MM
1. ¿Qué es la transacción MIGO?
La transacción MIGO (Entrada de Mercancías) se utiliza para registrar las mercancías que...
HOLA EXPERTOS,
¿QUÉ ESQUEMA DE CÁLCULO ME SIRVE PARA CALCULAR EL IVA EN BOLIVIA?
EL PORCENTAJE DE IVA EN BOLIVIA ES EL 13%.
LA FACTURA QUE TENGO COMO EJEMPLO ES LA...