Use stack in MetricsVisitor

This commit is contained in:
oowekyala
2017-06-12 20:50:14 +02:00
parent 8e495cb5e1
commit f9095f4480

View File

@ -4,6 +4,8 @@
package net.sourceforge.pmd.lang.java.oom; package net.sourceforge.pmd.lang.java.oom;
import java.util.Stack;
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
@ -20,37 +22,32 @@ import net.sourceforge.pmd.lang.java.oom.signature.OperationSignature;
*/ */
public class MetricsVisitor extends JavaParserVisitorAdapter { public class MetricsVisitor extends JavaParserVisitorAdapter {
private ClassStats classContext = null; private Stack<ClassStats> stack = new Stack<>();
@Override @Override
public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
stack.push(((PackageStats) data).getClassStats(node.getQualifiedName(), true));
super.visit(node, data);
stack.pop();
classContext = ((PackageStats) data).getClassStats(node.getQualifiedName(), true); return data;
return super.visit(node, data);
} }
@Override @Override
public Object visit(ASTConstructorDeclaration node, Object data) { public Object visit(ASTConstructorDeclaration node, Object data) {
stack.peek().addOperation(node.getQualifiedName().getOperation(), OperationSignature.buildFor(node));
classContext.addOperation(node.getQualifiedName().getOperation(), OperationSignature.buildFor(node));
return super.visit(node, data); return super.visit(node, data);
} }
@Override @Override
public Object visit(ASTMethodDeclaration node, Object data) { public Object visit(ASTMethodDeclaration node, Object data) {
stack.peek().addOperation(node.getQualifiedName().getOperation(), OperationSignature.buildFor(node));
classContext.addOperation(node.getQualifiedName().getOperation(), OperationSignature.buildFor(node));
return super.visit(node, data); return super.visit(node, data);
} }
@Override @Override
public Object visit(ASTFieldDeclaration node, Object data) { public Object visit(ASTFieldDeclaration node, Object data) {
stack.peek().addField(node.getVariableName(), FieldSignature.buildFor(node));
classContext.addField(node.getVariableName(), FieldSignature.buildFor(node));
return data; // end recursion return data; // end recursion
} }