h5. Introducción El conjunto de herramientas de calidad de código Java contiene una gran cantidad de software excelente y de código abierto. PMD es una herramienta que verifica su código fuente Java contra un conjunto de reglas e informa cualquier discrepancia que encuentre. Esta entrada de blog contiene una introducción a PMD y ejemplos de cómo escribir sus propias reglas en Java y XPath. h5. ¿Qué es PMD? [PMD |
http://pmd.sourceforge.net
] es una herramienta de análisis estático. Esto significa que PMD funciona inspeccionando el código fuente, mientras que por ejemplo JUnit funciona ejecutando realmente su código. PMD convierte cada archivo fuente Java en un llamado Árbol de Sintaxis Abstracta (AST), que es una representación en árbol del código fuente. Este árbol es luego examinado por reglas de PMD, que buscan patrones no deseados en el código. Una regla podría, por ejemplo, buscar bucles while cuyos cuerpos de bucle no están encerrados entre llaves. Otra regla podría buscar colecciones que se están iterando sin el uso del idiom for (Iterator i = collection.iterator(); i.hasNext(); ). PMD viene con una serie de reglas útiles agrupadas en conjuntos de reglas. Para obtener más información sobre los conjuntos de reglas integrados, consulte la página de inicio de PMD. h5. Uso de la utilidad Rule Designer Para escribir reglas de PMD, es necesario entender cómo navegar por el Árbol de Sintaxis Abstracta. El Rule Designer es una útil herramienta que le permite convertir una clase Java arbitraria en un AST. Ejecute Rule Designer ejecutando bin\designer.bat debajo del directorio de PMD, escriba o pegue el código Java que desea analizar y haga clic en "Go". Aquí hay un ejemplo:
h5. Escribir una regla PMD Las reglas de PMD recorren el AST utilizando el patrón de diseño visitor (
http://en.wikipedia.org/wiki/Visitor_pattern
). Cada nodo en el AST acepta objetos visitantes. Cuando se pasa un visitante a un nodo, el nodo llama al método visit en el visitante, pasándole una referencia a sí mismo. La clase del nodo determina cuál de los varios métodos visit sobrecargados se llamará en el objeto visitante. En la práctica, las nuevas reglas de PMD extienden la clase net.sourceforge.pmd.AbstractRule. AbstractRule contiene varios métodos visit sobrecargados, heredados de net.sourceforge.pmd.ast.JavaParserVisitorAdapter. Al escribir una nueva regla, solo necesita anular los métodos que manejan los nodos relevantes para la regla. Escribamos una nueva regla. El propósito de nuestra regla es asegurar que los nombres de las constantes de clase (es decir, los campos que son estáticos y finales) consistan solo en letras mayúsculas y el carácter de guion bajo. Al observar más de cerca el ejemplo de Rule Designer anterior, aprendemos que necesitamos visitar todos los nodos FieldDeclarator en el AST. Esto significa que debemos anular el método visit(ASTFieldDeclaration node, Object data) en nuestra clase de regla. El código fuente completo de la regla sigue a continuación. DESCARGO DE RESPONSABILIDAD: Tenga en cuenta que el siguiente código fuente se proporciona únicamente con fines educativos. No está destinado para uso en producción. 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()) { // El campo es estático y final String name = node.getVariableName(); if (!name.matches(CONSTANT_NAME_PATTERN)) { // Agregar una violación de regla al informe addViolation(data, node); } } return super.visit(node, data); } } El código es bastante sencillo. La declaración de retorno, sin embargo, puede no tener sentido inmediato. Al llamar al método visit anulado en la superclase, nos aseguramos de que también se visiten los hijos del nodo actual. h5. Creación de un documento XML de conjunto de reglas h5. Ejecutando PMD Ahora estamos listos para ejecutar PMD. Suponiendo que la clase de regla está en su ruta de clase, ejecute el script pmd.bat de la siguiente manera:
El primer parámetro es el nombre de un archivo fuente o un directorio de archivos fuente. El segundo parámetro es el formato de informe. El tercer parámetro es el nombre del documento XML de conjunto de reglas. En este ejemplo, estoy ejecutando la regla recién creada contra su propio código fuente. La clase UpperCaseConstantsRule contiene una constante de clase, pero el nombre no viola la regla. Cambiemos eso: private static final String constantNamePattern = "[A-Z]+(?:_[A-Z]+)*"; Al ejecutar PMD nuevamente, ahora obtenemos un informe de error que indica un problema en la línea 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 a todos,
¿Alguien puede decirme sobre java.lang.NullPointerException?
Cuándo recibiremos este tipo de error y cómo solucionarlo.
Si obtenemos este error, ¿dónde debemo...
Pasos para abrir y cerrar período - MM FI CO
Muchos de nosotros luchamos con los cambios de períodos en nuestros entornos DEV y QA, aquí tienes una referencia rápida para abrir y...