Как отразить измененное дерево абстрактного синтаксиса в JDT обратно в исходный файл Java.?
Пожалуйста, обратитесь к разделу "запишите это" в статье 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? Нужно ли вместо этого создавать плагин?
1 ответ
Краткий ответ: да. Вы можете использовать JDT API только в том случае, если вы работаете с открытой рабочей областью (т. Е. Вы написали плагин Eclipse).
Если вы хотите написать простую программу, которая использует Eclipse API, вы, вероятно, захотите написать приложение RCP. Это позволяет вам использовать sib0set плагинов Eclipse для создания некоторой функциональности.
Хороший учебник по RCP здесь: