/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.dcd;
import net.sourceforge.pmd.dcd.graph.ClassNode;
import net.sourceforge.pmd.dcd.graph.ConstructorNode;
import net.sourceforge.pmd.dcd.graph.FieldNode;
import net.sourceforge.pmd.dcd.graph.MemberNode;
import net.sourceforge.pmd.dcd.graph.MethodNode;
import net.sourceforge.pmd.dcd.graph.NodeVisitorAdapter;
import net.sourceforge.pmd.dcd.graph.UsageGraph;
/**
* Dump a UsageGraph to System.out.
*/
public class DumpNodeVisitor extends NodeVisitorAdapter {
@Override
public Object visit(UsageGraph usageGraph, Object data) {
System.out.println("----------------------------------------");
super.visit(usageGraph, data);
System.out.println("----------------------------------------");
return data;
}
@Override
public Object visit(ClassNode classNode, Object data) {
System.out.println("Class: " + ClassLoaderUtil.fromInternalForm(classNode.getName()));
return super.visit(classNode, data);
}
@Override
public Object visitFields(ClassNode classNode, Object data) {
System.out.println("\tFields (" + classNode.getFieldNodes().size() + "):");
return super.visitFields(classNode, data);
}
@Override
public Object visit(FieldNode fieldNode, Object data) {
printMember(fieldNode);
return super.visit(fieldNode, data);
}
@Override
public Object visitConstructors(ClassNode classNode, Object data) {
System.out.println("\tConstructors (" + classNode.getConstructorNodes().size() + "):");
return super.visitConstructors(classNode, data);
}
@Override
public Object visit(ConstructorNode constructorNode, Object data) {
printMember(constructorNode);
return super.visit(constructorNode, data);
}
@Override
public Object visitMethods(ClassNode classNode, Object data) {
System.out.println("\tMethods (" + classNode.getMethodNodes().size() + "):");
return super.visitMethods(classNode, data);
}
@Override
public Object visit(MethodNode methodNode, Object data) {
printMember(methodNode);
return super.visit(methodNode, data);
}
@Override
public Object visitUses(MemberNode memberNode, Object data) {
if (Boolean.TRUE == data && !memberNode.getUses().isEmpty()) {
System.out.println("\t\t\tUses:");
}
return super.visitUses(memberNode, data);
}
@Override
public Object visitUse(MemberNode use, Object data) {
if (Boolean.TRUE == data) {
System.out.println("\t\t\t\t" + use.toStringLong());
}
return super.visitUse(use, data);
}
@Override
public Object visitUsers(MemberNode memberNode, Object data) {
if (Boolean.TRUE == data && !memberNode.getUsers().isEmpty()) {
System.out.println("\t\t\tUsers:");
}
return super.visitUsers(memberNode, data);
}
@Override
public Object visitUser(MemberNode user, Object data) {
if (Boolean.TRUE == data) {
System.out.println("\t\t\t\t" + user.toStringLong());
}
return super.visitUser(user, data);
}
protected void printMember(MemberNode memberNode) {
System.out.println("\t\t(" + memberNode.getUses().size() + ", " + memberNode.getUsers().size() + ") "
+ memberNode.toStringLong());
}
}