Как отразить измененное дерево абстрактного синтаксиса в 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 здесь:

http://www.vogella.de/articles/EclipseRCP/article.html

Другие вопросы по тегам