Eclipse中的ASTVisitor

问题描述 投票:1回答:2

我正在学习如何为项目做一个ASTVisitor,所以我开始使用Eclipse,它有一个全面的API。

我从这个网站下载了Packed Example Project:http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

但我意识到代码没有main()方法,但我可以运行程序!谁知道为什么? [qn 1]

然而,这些代码似乎太过于无法使用,并且基本的操作说明并不十分清楚。

所以我也继续看看:http://www.vogella.de/articles/EclipsePreferences/article.html

任何人都知道如何编写一个main方法来调用execute(ExecutionEvent事件)? - 提供示例代码段? [qn 2]我不知道如何使用ExecutionEvent ...

我一直得到“线程中的异常”主“java.lang.IllegalStateException:工作区已关闭。”即使我删除执行事件的参数(也需要删除扩展部分)或使用我的主要部分代码。它似乎与IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot()中的“ResourcesPlugin”有关。谁知道为什么? [qn 3]

java eclipse abstract-syntax-tree visitor
2个回答
3
投票

我没有足够的信心断然说你需要编写一个插件来使用ASTVisitor,但这是最简单的方法。找到一些简单的插件代码,可以创建一个按钮或者您可以按下的内容并开始运行代码。插件开发环境中有一个示例插件就是这样做的(如果没有这个,请下载相应版本的Eclipse)。

创建一个插件项目:

要创建插件项目,请访问包浏览器并右键单击或打开文件菜单。选择顶部项目“new ...”这将打开一个子菜单,您可以在其中选择“其他...”。将打开“新建”对话框。打开文件夹“plug-in development”并选择“插件项目”。

单击下一步,输入必要的信息,直到您到达以下页面:

这里的第一个示例“Hello World”会在您的二级日食中创建一个菜单。通过转到新项目的plugin.xml运行二级eclipse,转到选项卡概述。

你会看到这样一个页面:

单击“启动eclipse应用程序”,另一个eclipse将在您的新插件启动并运行时启动。单击此二级日食中的示例操作按钮以查看一些甜蜜动作。

现在,您可以继续使用您想要的任何内容替换操作代码。在这种情况下,创建并开始访问操作。

要创建ASTVisitor:

创建一个扩展ASTVisitor的类,以便添加自己的代码。

  • preVisit(ASTNode)执行AST的前序遍历
  • postVisit(ASTNode)执行AST的后序遍历
  • 访问(...)检查特定节点

将这样的内容添加到访问者:

private void startVisit(IFile file) {
    ICompilationUnit icu = JavaCore.createCompilationUnitFrom(file);

    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setResolveBindings(true);
    parser.setSource(icu);

    CompilationUnit cu = (CompilationUnit) parser.createAST(null);
    cu.accept(this);
}

现在将代码添加到创建访问者的按钮按下操作并调用此函数:

MyVisitor mv = new MyVisitor();
mv.startVisit(...);

获得一个IFile(在这里你需要成为一个插件,否则你将得到你报告的错误):

ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...);

替换省略号的相应项目和文件名(字符串)。

现在每次按下该按钮都会访问该文件,并且您输入的代码将在适当的时间执行(只需打印出pre或postvisit中的每个ASTNode)。


1
投票

您的项目应该是Eclipse插件项目,而不是带有main()方法的简单Java项目。

这是一个建议:看看AST View工具。它是一种用于检查AST的工具。使用源代码,运行它,调试它,放置断点,修改代码,看看它是如何工作的。

此外,请确保您拥有所有JDT源。 ASTVisitors有很多例子(只是确保不使用任何内部方法)。

© www.soinside.com 2019 - 2024. All rights reserved.