我正在尝试使用Tree API找到一种在netbeans中解析java代码源的方法,我通过这个guide学习了如何访问高级语言元素(类,方法,字段......)。 / p>
我正在寻找的是一种解析if语句(开始)的方法,因为我之后尝试将替换类型代码与状态策略重构。得到if条件对我来说非常重要。任何帮助都将深表感谢。
答案 0 :(得分:0)
在深入了解编译器树API文档后,我发现如何在我的案例中访问低级代码所选if语句的条件,这里是一段代码片段
@Override
public Void visitIf(IfTree node, Void p) {
try {
JTextComponent editor = EditorRegistry.lastFocusedComponent();
if (editor.getDocument() == info.getDocument()) {
InputOutput io = IOProvider.getDefault().getIO("Analysis of " + info.getFileObject().getName(),
true);
ExpressionTree exTree = node.getCondition();
if (exTree.getKind() == Tree.Kind.PARENTHESIZED) {
ParenthesizedTree parTree = (ParenthesizedTree) exTree;
BinaryTree conditionTree = (BinaryTree) parTree.getExpression();
ExpressionTree identTree = conditionTree.getLeftOperand();
if (identTree.getKind() == Tree.Kind.IDENTIFIER) {
Name name = ((IdentifierTree) identTree).getName();
io.getOut().println("Hurray, this is the name of the identifier in the left operand: " + name.toString());
}
io.getOut().close();
}
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
return null;
}
值得庆幸的是,代码命名很直观,否则文档没什么帮助。使用println进行调试对于了解接下来要处理的树类非常有用。