Java 在eclipse.jdt.core AST中为外部对象选择节点类型

Java 在eclipse.jdt.core AST中为外部对象选择节点类型,java,abstract-syntax-tree,lombok,eclipse-jdt,ellipse,Java,Abstract Syntax Tree,Lombok,Eclipse Jdt,Ellipse,如果我们从一个类中创建一个对象,然后在编译时调用该对象上的一个方法并将其添加到AST树中,那么我们应该使用什么类型的节点 例如:newpasswordformate().format() AST中此节点的类型是什么? AST中此节点的子节点类型是什么?通过实现ASTVisitor,您可以了解AST的“外观”。ASTVisitors有一个名为preVisit(和postVisit)的方法,您可以使用该方法以任何形式打印AST(例如,各个ASTNode对象的类) 看看这个: 我将使用上述两种方法实现

如果我们从一个类中创建一个对象,然后在编译时调用该对象上的一个方法并将其添加到AST树中,那么我们应该使用什么类型的节点

例如:
newpasswordformate().format()

AST中此节点的类型是什么?


AST中此节点的子节点类型是什么?

通过实现ASTVisitor,您可以了解AST的“外观”。ASTVisitors有一个名为
preVisit
(和
postVisit
)的方法,您可以使用该方法以任何形式打印AST(例如,各个ASTNode对象的类)

看看这个:

我将使用上述两种方法实现ASTVisitor,并将树打印为字符串。然后可以看到使用了哪些ASTNode类

要启动已实现的AST访问者,请使用访问方法:

ASTParser-ASTParser=ASTParser.newParser(AST.JLS8);//或者使用此处应用的任何常量
setKind(astParser.K_编译单元);
astParser.setSource(单位);
astParser.setResolveBindings(true);//可能是错误的,取决于您的用例?
CompilationUnit CompilationUnit=(CompilationUnit)astParser.createAST(null);
ASTVisitor astPrintingVisitor=新建ASTPrinter();//你需要实现这个
编辑单元访问(astPrintingVisitor);

请将您的问题重新表述一下,这样就可以更清楚地知道什么确切地属于什么。是要创建正在编译的类文件的对象的类吗?您希望“将其添加到AST”中的内容是什么?在这种情况下,“it”是什么?新的
PasswordFormate
是否也在编译中,或者它已经编译并且是编译器的一部分?另外,您希望您的输出代码是什么样子的(如果文件中已经包含了您想要添加的内容,那么它会是什么样子的)?在lombok项目中,我们在库中有一个功能接口,每个类都可以实现这个接口,然后,我们在annotation中给出了这个类,它实现了toString方法中要格式化的字段的format方法@格式(className.class)私有字符串密码;然后创建此类的一个对象,并对其调用format方法,并在编译时将其注入toString方法@TreffnonXSo方法调用的结果已经起作用了,您得到了(一个字符串?)对象,现在您想知道如何通过AST变形将结果字符串集成到toString中?答案是:这取决于toString方法之后的外观。我将为一个示例类手动编写它,然后调用编译器并使用它打印示例方法。然后,如果方法已经包含了您想要“注入”的内容,那么您可以直接看到AST需要什么样子。顺便说一句,您正在做的不是注入,而是AST-transformation。是的,谢谢,事实上,“new PasswordFormat.format()”在编译时插入到toString方法中,直到调用toString方法为止,因此,format方法也被调用,结果显示在tostirn中。我不知道解析器树中节点的类型以及该节点的子节点的类型是否正常工作@特雷弗农