Пожалуйста, обратитесь к разделу «запишите»
http://www.eclipse.org/articles/article.php?file=Article-javaCodeManipulation_AST/index.html
Я анализирую файл исходного кода Java, в котором есть метод с контрактами, написанными с использованием cofoja. Теперь, когда я создаю абстрактное синтаксическое дерево (ast) входного файла, и изменяю его. Это может показать мне тот документ документа, объект которого изменяется. Но когда я пытаюсь отразить этот документ обратно в исходный файл, следующее объявление выдает исключение:
// 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. Одна из ссылок, которые я нашел в сети: http://www.programcreek.com/2011/05/java-lang-illegalstateexception-workspace- is-closed / # comment-1939
В нем говорится: вкратце, это вызвано простым добавлением зависимых jar-файлов в обычный java-проект. Чтобы использовать JDT, вам нужно, чтобы программа работала как плагин (или, по крайней мере, приложение с поддержкой OSG), а не использовала его в качестве jar.
Поскольку я создаю простой проект Java, это проблема для использования класса FileBuffers? Нужно ли вместо этого создавать плагин?