NodeVisitorAcceptor
public class UsageGraph extends java.lang.Object implements NodeVisitorAcceptor
The UsageGraph is composed of ClassNodes. Each ClassNode has various MemberNodes, specifically ConstructorNodes, FieldNodes, and MethodNodes. Each of these MemberNodes keeps track of other MemberNodes which it uses and other MemberNodes which are users of it. In this sense, the graph can navigated bi-directionally across the use relationship between MemberNodes.
Great effort is taken to keep the bookkeeping of the UsageGraph as tight as possible, so that rather large code bases can be analyzed. While nodes can grant access to the underlying Java Reflection APIs (e.g. Class, Constructor, Field, Member), the results are stored using WeakReferences to assist with memory usage.
A class Filter can be specified to limit the set of classes on which usage
references will be tracked. This is often done to limit memory usage to
interesting classes. For example, the java.util
package is very
often used, and tracking usages would require a massive bookkeeping effort
which has little value.
Modifier and Type | Field | Description |
---|---|---|
protected Filter<java.lang.String> |
classFilter |
Constructor | Description |
---|---|
UsageGraph(Filter<java.lang.String> classFilter) |
Modifier and Type | Method | Description |
---|---|---|
java.lang.Object |
accept(NodeVisitor visitor,
java.lang.Object data) |
|
ClassNode |
defineClass(java.lang.String className) |
|
MemberNode |
defineConstructor(java.lang.String className,
java.lang.String name,
java.lang.String desc) |
|
FieldNode |
defineField(java.lang.String className,
java.lang.String name,
java.lang.String desc) |
|
MemberNode |
defineMethod(java.lang.String className,
java.lang.String name,
java.lang.String desc) |
|
boolean |
isClass(java.lang.String className) |
|
void |
usageField(java.lang.String className,
java.lang.String name,
java.lang.String desc,
MemberNode usingMemberNode) |
|
void |
usageMethod(java.lang.String className,
java.lang.String name,
java.lang.String desc,
MemberNode usingMemberNode) |
protected final Filter<java.lang.String> classFilter
public UsageGraph(Filter<java.lang.String> classFilter)
public java.lang.Object accept(NodeVisitor visitor, java.lang.Object data)
accept
in interface NodeVisitorAcceptor
public boolean isClass(java.lang.String className)
public ClassNode defineClass(java.lang.String className)
public FieldNode defineField(java.lang.String className, java.lang.String name, java.lang.String desc)
public MemberNode defineConstructor(java.lang.String className, java.lang.String name, java.lang.String desc)
public MemberNode defineMethod(java.lang.String className, java.lang.String name, java.lang.String desc)
public void usageField(java.lang.String className, java.lang.String name, java.lang.String desc, MemberNode usingMemberNode)
public void usageMethod(java.lang.String className, java.lang.String name, java.lang.String desc, MemberNode usingMemberNode)
Copyright © 2002–2018 PMD. All rights reserved.