Use stack in MetricsVisitor
This commit is contained in:
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user