我正在尝试使用nodeJs构建一个返回给定Java源代码的所有方法的模块。到目前为止,我可以使用“java-parser”模块构建AST树,但我需要遍历它以过滤掉方法。
code = ' public class CallingMethodsInSameClass
{
public static void main(String[] args) {
printOne();
printOne();
printTwo();
}
public static void printOne() {
System.out.println("Hello World");
}
public static void printTwo() {
printOne();
printOne();
} }';
var javaParser = require("java-parser");
var traverse = require("babel-traverse").default;
var methodsList = [];
traverse(ast, {
enter(path){
//do extraction
}
}
我知道babel-traverse适用于Js但是我想要一种遍历的方法,所以我可以过滤这些方法。 我收到此错误
throw new Error(messages.get("traverseNeedsParent", parent.type));
^
Error: You must pass a scope and parentPath unless traversing a
Program/File. Instead of that you tried to traverse a undefined node
without passing scope and parentPath.
如果记录的AST看起来像
{ node: 'CompilationUnit',
types:
[ { node: 'TypeDeclaration',
name: [Object],
superInterfaceTypes: [],
superclassType: null,
bodyDeclarations: [Array],
typeParameters: [],
interface: false,
modifiers: [Array] } ],
package: null,
imports: [] }
其中方法将由 types 中的“MethodDeclaration”标识。任何帮助表示赞赏。
答案 0 :(得分:2)
AST只是另一个JSON对象。试试jsonpath
。
npm install jsonpath
要提取所有方法,只需按条件node=="MethodDeclaration"
进行过滤:
var jp = require('jsonpath');
var methods = jp.query(ast, '$.types..[?(@.node=="MethodDeclaration")]');
console.log(methods);
有关更多JSON路径语法,请参阅here。