我正在学习如何为项目做一个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]
答案 0 :(得分:3)
我没有足够的信心断言你需要编写一个插件来使用ASTVisitor,但这是最简单的方法。找到一些简单的插件代码,可以创建一个按钮或者您可以按下的内容并开始运行代码。插件开发环境中有一个示例插件可以执行此操作(如果没有,请下载相应版本的Eclipse)。
创建插件项目:
要创建插件项目,请访问包浏览器并右键单击或打开文件菜单。选择顶部项目“new ...”这将打开一个子菜单,您可以在其中选择“其他...”。 将打开“新建”对话框。打开文件夹“plug-in development”并选择“插件项目”。
单击下一步,输入必要的信息,直至到达以下页面:
这里的第一个示例“Hello World”会在您的二级日食中创建一个菜单。通过转到新项目的plugin.xml运行二级eclipse,转到选项卡概述。
你会看到这样一个页面:
点击“启动eclipse应用程序”,另一个eclipse将在你的新插件启动并运行时启动。单击此二级日食中的示例操作按钮以查看一些甜蜜动作。
现在您可以继续使用您想要的任何内容替换操作代码。在这种情况下,创建并开始访问操作。
创建ASTVisitor:
创建一个扩展ASTVisitor的类,以便添加自己的代码。
向访问者添加以下内容:
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-post或postvisit中打印出每个ASTNode,这是非常有见地的。)
答案 1 :(得分:1)
您的项目应该是Eclipse插件项目,而不是带有main()方法的简单Java项目。
这是一个建议:看看AST View工具。它是一种用于检查AST的工具。使用源代码,运行它,调试它,放置断点,修改代码,看看它是如何工作的。
此外,请确保您拥有所有JDT源。 ASTVisitors有很多例子(只是确保不使用任何内部方法)。