PMD 可以用于 Java 上的数据流分析吗?
Can PMD be used for dataflow analysis on Java?
我想知道我是否可以使用 PMD 来执行一些基本的数据流分析操作。这是一项任务,所以它是否微不足道并不重要。
我在网上找不到任何代码示例。
DFA 模块是否正常工作?我应该采用逆向工程的方式来查看发生了什么吗?
非常感谢
PMD 的数据流分析模块正在运行。有使用 PMD 附带的规则,例如 DataflowAnomalyAnalysis.
但是,PMD 团队 plans to revamp that implementation 在未来的某个时候确实如此。
DFA 只能通过 Java 规则使用(不能使用 XPath 规则)。编写 DFA 规则包括:
编写访问者,在其中获取要分析的方法/构造函数的 DFA 节点:
public Object visit(ASTMethodDeclaration methodDeclaration, Object data) {
final DataFlowNode node = methodDeclaration.getDataFlowNode().getFlow().get(0);
final DAAPathFinder pathFinder = new DAAPathFinder(node, executable, getProperty(MAX_PATH_DESCRIPTOR));
pathFinder.run();
return data;
}
编写适当的 Executable
来执行您的规则。
public void execute(CurrentPath path) {
// your code here to analyze the current path
}
可以找到一个工作示例here
我想知道我是否可以使用 PMD 来执行一些基本的数据流分析操作。这是一项任务,所以它是否微不足道并不重要。 我在网上找不到任何代码示例。
DFA 模块是否正常工作?我应该采用逆向工程的方式来查看发生了什么吗?
非常感谢
PMD 的数据流分析模块正在运行。有使用 PMD 附带的规则,例如 DataflowAnomalyAnalysis.
但是,PMD 团队 plans to revamp that implementation 在未来的某个时候确实如此。
DFA 只能通过 Java 规则使用(不能使用 XPath 规则)。编写 DFA 规则包括:
编写访问者,在其中获取要分析的方法/构造函数的 DFA 节点:
public Object visit(ASTMethodDeclaration methodDeclaration, Object data) { final DataFlowNode node = methodDeclaration.getDataFlowNode().getFlow().get(0); final DAAPathFinder pathFinder = new DAAPathFinder(node, executable, getProperty(MAX_PATH_DESCRIPTOR)); pathFinder.run(); return data; }
编写适当的
Executable
来执行您的规则。public void execute(CurrentPath path) { // your code here to analyze the current path }
可以找到一个工作示例here