Eclipse 如何将JDT中修改后的抽象语法树反映回原始java源文件。?

Eclipse 如何将JDT中修改后的抽象语法树反映回原始java源文件。?,eclipse,eclipse-plugin,eclipse-jdt,ajdt,Eclipse,Eclipse Plugin,Eclipse Jdt,Ajdt,请参考文章的“写下来”部分 我正在解析一个java源代码文件,其中包含使用cofoja编写的契约的方法。现在,当我创建输入文件的抽象语法树(ast)并对其进行修改时。它可以向我显示正在修改的文档、对象。但当我试图将此文档反映回原始源文件时,以下声明引发了一个异常: // get the buffer manager ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); MyVis

请参考文章的“写下来”部分

我正在解析一个java源代码文件,其中包含使用cofoja编写的契约的方法。现在,当我创建输入文件的抽象语法树(ast)并对其进行修改时。它可以向我显示正在修改的文档、对象。但当我试图将此文档反映回原始源文件时,以下声明引发了一个异常:

 // get the buffer manager  
 ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); 
MyVisitor.java中的
ITextFileBufferManager
声明引发以下异常

Exception in thread "main" java.lang.ExceptionInInitializerError
    at ASTModifier.main(ASTModifier.java:205)
Caused by: java.lang.IllegalStateException: Workspace is closed.
at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:340)
at org.eclipse.core.filebuffers.FileBuffers.<clinit>(FileBuffers.java:52)
... 1 more
线程“main”java.lang.ExceptionInInitializeError中的异常 在ASTModifier.main(ASTModifier.java:205) 原因:java.lang.IllegalStateException:工作区已关闭。 位于org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:340) 位于org.eclipse.core.filebuffers.filebuffers.(filebuffers.java:52) ... 还有一个 因此,我无法更改原始java文件。我在网上找到的一个链接是:isclosed/#comment-1939

它说:简言之,这是由于简单地将依赖jar文件添加到常规java项目中造成的。要使用JDT,您需要让程序作为插件(或者至少是支持OSGi的应用程序)运行,而不是将其用作jar


因为我正在创建一个简单的java项目,所以使用FileBuffers类会有问题吗?我需要创建插件吗

简短回答:是的。只有当您在打开的工作区中运行时(即,您已经编写了Eclipse插件),才能使用JDTAPI

如果您想编写一个使用EclipseAPI的简单程序,您可能需要编写一个RCP应用程序。这允许您使用一组Eclipse插件来创建一些功能

下面是关于RCP的一个很好的教程:


嘿..如果我创建一个eclipse插件而不是RCP应用程序呢?我是否能够在eclipse插件中使用JDT?我是否能够在控制台窗口上显示输出?是的。您可以创建插件而不是RCP应用程序。但是,如果您只创建一个插件,那么它将只能作为eclipse应用程序的一部分运行(因此您需要一种方法将插件插入eclipse以调用其功能)。如果您自己创建应用程序,您可以完全控制如何调用您的功能。