Java 日食中的游客

Java 日食中的游客,java,eclipse,abstract-syntax-tree,visitor,Java,Eclipse,Abstract Syntax Tree,Visitor,我正在学习如何为项目创建一个ASTVisitor,所以我开始使用Eclipse,它有一个全面的API 我已从本网站下载了打包的示例项目: 但是我意识到这些代码没有main()方法,但我能够运行这个程序!有人知道为什么吗?[qn 1] 然而,这些代码似乎太过复杂,无法使用,而且执行基本操作的说明也不是很清楚 所以我也继续看这个: 有人知道我如何编写一个main方法来调用execute(ExecutionEvent)吗是否提供一个示例代码段?[qn 2] 我不知道如何使用ExecutionEve

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

我已从本网站下载了打包的示例项目:

但是我意识到这些代码没有main()方法,但我能够运行这个程序!有人知道为什么吗?[qn 1]

然而,这些代码似乎太过复杂,无法使用,而且执行基本操作的说明也不是很清楚

所以我也继续看这个:

有人知道我如何编写一个main方法来调用execute(ExecutionEvent)吗是否提供一个示例代码段?[qn 2] 我不知道如何使用ExecutionEvent


我一直在获取“线程中的异常”main“java.lang.IllegalStateException:Workspace is closed”。即使我删除了执行事件的参数(也需要删除扩展部分)或使用了main中的部分代码。它似乎与
IWorkspaceRoot=ResourcesPlugin.getWorkspace().getRoot()中的“ResourcesPlugin”有关。有人知道为什么吗?[qn 3]

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

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


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

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

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


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

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

创建插件项目:

ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...);
要创建插件项目,请访问包资源管理器并右键单击或打开“文件”菜单。选择顶部项目“新建…”将打开一个子菜单,您可以在其中选择“其他…”。 此时将打开“新建”对话框。打开文件夹“插件开发”并选择“插件项目”

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

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

您将看到如下页面:

单击“启动一个eclipse应用程序”,另一个eclipse将在新插件启动并运行的情况下启动。点击第二级eclipse中的sample action按钮,查看一些甜美的动作

现在,您可以继续使用所需的任何代码替换操作代码。在本例中,创建并启动访问操作

创建ASTVisitor:

ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...);
创建一个扩展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(...);
替换省略号对应的项目和文件名(字符串)


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

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

创建插件项目:

ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...);
要创建插件项目,请访问包资源管理器并右键单击或打开“文件”菜单。选择顶部项目“新建…”将打开一个子菜单,您可以在其中选择“其他…”。 此时将打开“新建”对话框。打开文件夹“插件开发”并选择“插件项目”

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

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

您将看到如下页面:

单击“启动一个eclipse应用程序”,另一个eclipse将在新插件启动并运行的情况下启动。点击第二级eclipse中的sample action按钮,查看一些甜美的动作

现在,您可以继续使用所需的任何代码替换操作代码。在本例中,创建并启动访问操作

创建ASTVisitor:

ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...);
创建一个扩展ASTVisitor的类,以便您可以添加自己的代码

  • preVisit(ASTNode)对AST进行前序遍历
  • postVisit(ASTNode)对AST进行后序遍历
  • 访问(…)检查特定节点
向访问者添加类似的内容: