1

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

我已经从这个网站下载了打包的示例项目:http: //www.eclipse.org/articles/article.php? file=Article-JavaCodeManipulation_AST/index.html

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

然而,这些代码似乎过于编译而无法使用,并且做一些基本操作的说明也不是很清楚。

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

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

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

4

2 回答 2

3

我没有足够的信心明确地说你需要编写一个插件来使用 ASTVisitor,但这是最简单的方法。找到一些简单的插件代码来创建一个按钮或你可以按下的东西并开始运行你的代码。插件开发环境中有一个示例插件可以做到这一点(如果没有,请下载适当版本的 Eclipse)。

创建插件项目:

要创建一个插件项目,请到您的包资源管理器并右键单击或打开文件菜单。选择顶部项目“新...”这将打开一个子菜单,您可以在其中选择“其他...”。“新建”对话框打开。打开文件夹“插件开发”,选择“插件项目”。

替代文字

单击next几次,输入必要的信息,直到到达以下页面:

替代文字

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

你会看到这样的页面:

替代文字

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

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

创建 ASTVisitor:

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

  • preVisit(ASTNode) 对 AST 进行前序遍历
  • postVisit(ASTNode) 对 AST 进行后序遍历
  • visit(...) 检查特定节点

向您的访问者添加这样的内容:

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(...);

为省略号替换适当的项目和文件名(字符串)。

现在,每次您按下按钮时,文件都会被访问,并且您输入的代码将在适当的时间执行(在访问前或访问后打印出每个 ASTNode 非常有见地)。

于 2009-09-03T11:49:17.243 回答
1

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

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

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

于 2009-09-03T10:09:15.207 回答