Как отразить измененное дерево абстрактного синтаксиса в JDT обратно в исходный файл Java.? - PullRequest
1 голос
/ 07 августа 2011

Пожалуйста, обратитесь к разделу «запишите» 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 Ответ

0 голосов
/ 08 августа 2011

Краткий ответ: да.Вы можете использовать JDT API, только если вы работаете с открытой рабочей областью (т. Е. Вы написали плагин Eclipse).

Если вы хотите написать простую программу, которая использует Eclipse API, вы, вероятно, захотитенаписать заявку RCP.Это позволяет вам использовать sib0set плагинов Eclipse для создания некоторой функциональности.

Хорошее руководство по RCP здесь:

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

...