記事の「書き留める」セクションを参照して ください http://www.eclipse.org/articles/article.php?file=Article-javaCodeManipulation_AST/index.html
cofoja を使用して記述されたコントラクトを持つメソッドを持つ Java ソース コード ファイルを解析しています。ここで、入力ファイルの抽象構文木 (ast) を作成し、それを変更します。Document ドキュメント、オブジェクトが変更されていることがわかります。しかし、このドキュメントを元のソース ファイルに反映させようとすると、次の宣言で例外がスローされます。
// get the buffer manager
ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager();
ITextFileBufferManager bufferManager
MyVisitor.java での宣言に対して、次の例外がスローされます。
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
このため、元の Java ファイルを変更できません。ネットで見つけたリンクの 1 つ : http://www.programcreek.com/2011/05/java-lang-illegalstateexception-workspace-is-closed/#comment-1939
簡単に言えば、これは、依存するjarファイルを通常のJavaプロジェクトに追加するだけで発生します。JDT を使用するには、プログラムを jar として使用するのではなく、プラグイン (または少なくとも OSGi 対応アプリケーション) として実行する必要があります。
私は単純なJavaプロジェクトを作成しているので、FileBuffersクラスを使用するのに問題はありますか? 代わりにプラグインを作成する必要がありますか?