Fala galera, mais uma vez preciso de vocês.
Estou tentando criar rules para o PMD mas esta dificil navegar na AST!
Quero pegar o nome de variaveis locais e não consigo!
Parte da minha AST
...
<LocalVariableDeclaration abstract="false" array="false" arrayDepth="0" beginColumn="17" beginLine="8" endColumn="33" endLine="8" final="false" native="false" packagePrivate="true" private="false" protected="false" public="false" static="false" strictfp="false" synchronized="false" transient="false" volatile="false">
<Type array="false" arrayDepth="0" beginColumn="17" beginLine="8" endColumn="19" endLine="8" typeImage="int">
<PrimitiveType array="false" arrayDepth="0" beginColumn="17" beginLine="8" boolean="false" endColumn="19" endLine="8" image="int"/>
</Type>
<VariableDeclarator beginColumn="21" beginLine="8" endColumn="33" endLine="8">
<VariableDeclaratorId array="false" arrayDepth="0" beginColumn="21" beginLine="8" endColumn="33" endLine="8" exceptionBlockParameter="false" image="variavelLocal" typeNameNode="PrimitiveType" typeNode="Type"/>
</VariableDeclarator>
</LocalVariableDeclaration>
...
Codigo que eu escrevi mas da pau! Não consigo pegar os nos filhos!
package net.sourceforge.pmd.rules;
import net.sourceforge.pmd.AbstractRule;
import net.sourceforge.pmd.ast.ASTLocalVariableDeclaration;
import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;
public class PatternLocalVariable extends AbstractRule {
public Object visit(ASTLocalVariableDeclaration node, Object data){
ASTVariableDeclaratorId node2 = (ASTVariableDeclaratorId) node.jjtGetChild(2).jjtGetChild(1);
boolean paramCarac = node2.getImage().charAt(0) == '_';
boolean localCarac = node2.getImage().charAt(node2.getImage().length()-1) == 'L';
if((paramCarac) || (! localCarac))
addViolation(data, node);
return data;
}
}
Se alguem puder ajudar!!!