- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过获取 ExpressionStatements 并返回它们的子节点及其子子节点来获取 AST 节点的所有子节点,但算法卡在第一个 ExpStat 中,我找不到原因。
首先,我创建了一个访问者函数来查找我的类的所有 ExpressionStatements,然后调用该函数来查找您的子项
private void analyseClass(ICompilationUnit classe) throws JavaModelException {
// ICompilationUnit unit == class
// now create the AST for the ICompilationUnits
CompilationUnit parse = parse(classe);
// Calls the method for visit node in AST e return your information
ExpressionStatementVisitor visitor = new ExpressionStatementVisitor();
parse.accept(visitor);
// Write in the screen: ExpressionStatement and your type next
for (ExpressionStatement method : visitor.getExpression()) {
//String t = null;
// 32 -> METHOD_INVOCATION type
if (method.getExpression().getNodeType() == 32) {
getChildren(method);
results.append("\n\n");
}
// 48 -> SUPER_METHOD_INVOCATION type
else if (method.getExpression().getNodeType() == 48) {
// results.append("\n SuperMethodInvocation: " + t);
//getChildren(method);
//results.append("\n\n");
} else {
//getChildren(method);
//results.append("\n\n");
}
}
}
递归查找子级的函数:
public static void getChildren(ASTNode node) {
if (node != null) {
List<ASTNode> children = new ArrayList<ASTNode>();
List list = node.structuralPropertiesForType();
for (int i = 0; i < list.size(); i++) {
Object child = node.getStructuralProperty((StructuralPropertyDescriptor) list.get(i));
if (child instanceof ASTNode) {
children.add((ASTNode) child);
}
if (children.get(0) != null) {
String c = children.toString();
results.append("Children Node: " + c + "\n");
getChildren(children.get(0));
}
}
} else {
return;
}
}
假设类里面有:
a.getTheDataA().getTheDataB().getTheDataC().getTheData();
b.getTheDataA().getTheDataB().getTheDataC().getTheData();
c.getTheE(a,b).getTheF(getTheDataB).getTheH();
getChildren 函数仅读取 a.getTheDataA().getTheDataB().getTheDataC().getTheData();并像这样返回他的 child 和 child 的 child :
有一天我被困在这个问题上,我需要递归方面的帮助
最佳答案
据我所知,您只能获得 children
的第一个元素,我认为您需要取出语句检查以查看 children
element 是否不为 null进入一个单独的 for
循环,并检查其中的每个元素。
类似于:
public static void getChildren(ASTNode node) {
if (node != null) {
List<ASTNode> children = new ArrayList<ASTNode>();
List list = node.structuralPropertiesForType();
for (int i = 0; i < list.size(); i++) {
Object child = node.getStructuralProperty((StructuralPropertyDescriptor) list.get(i));
if (child instanceof ASTNode) {
children.add((ASTNode) child);
}
}
for(ASTNode node : children){
if (node != null) {
String c = children.toString();
results.append("Children Node: " + c + "\n");
getChildren(node);
}
}
}else {
return;
}
}
我还没有运行代码,但我认为问题是你只得到children
的第一个元素
关于java - 如何查找 ASTNode 的所有子节点(子节点和子节点的子节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547714/
eclipse中给定一个ASTNode,有什么办法可以得到对应的源代码行号吗? 最佳答案 您可以获取 ASTNode 的行号使用下面的代码 int lineNumber = compilati
我实现了一些在编译时应用的 AST 转换,出于日志记录的目的,我想发出反射(reflect)注入(inject)的 AST 节点的“源”代码。 toString()/getText()方法返回非常不可
我如何在基本的情况下实现这个方法class ASTNode 以便我可以更轻松地获取不同的 ASTNode 行号?例如,如果我想获取 MethodDeclaration 位置,我需要编写代码 @Over
我编写了一个插件,它可以在我的光标所在的编辑器中返回该代码的完全限定名称。 当光标位于jButton[i].setForeground(Color.WHITE);行内的WHITE上时,我需要获取以下信
我试图通过获取 ExpressionStatements 并返回它们的子节点及其子子节点来获取 AST 节点的所有子节点,但算法卡在第一个 ExpStat 中,我找不到原因。 首先,我创建了一个访问者
我从 Eclipse wiki (http://wiki.eclipse.org/JDT/FAQ#From_an_IJavaElement_to_its_declaring_ASTNode) 阅读了这
我有一个 JDT AST MethodDeclaration 定义如下: MethodDeclaration md = ast.newMethodDeclaration(); SimpleName s
我正在为IntelliJ Idea编写一个插件,现在我需要一个ASTNode标识符之类的东西,它对于AST中的每个节点都必须是唯一的。 我应该使用什么? 最佳答案 如果您正在为自定义语言编写插件,我会
我最近使用我们的 CI 服务器构建了我的 React 应用程序(使用 Create React App 搭建脚手架,使用 yarn build)并得到如下所示的构建错误: Error: Variabl
我正在使用source_gen解析一些Dart文件,通过Dart analyzer 。 我正在延长 GeneratorForAnnotation<> ,以及重写方法 FutureOr generate
我将 js 字符串解析为抽象语法树,然后更改 StringLiteral 节点的值,并且需要将整个 Ast 内容写回字符串。但是当我使用 toSource 方法时,StringLiterals 值中的
ASTNode 的accept 方法是干什么的(javadoc 帮不了什么忙。。。)什么时候调用visit(Expression node) 方法?这是我需要如何使用它的示例代码: final Lis
使用 Eclise JDT,我需要检索任何 ASTNode 的子节点。有没有我可以使用的实用方法? 我现在能想到的唯一方法是子类化 ASTVisitor 并手动处理每种节点以找到其子节点。但是研究每种
我是一名优秀的程序员,十分优秀!