Eclipse JDT: программно назвать «правильный отступ» - PullRequest
6 голосов
/ 20 мая 2010

Я работаю над плагином Eclipse, который изменяет код Java в проекте пользователя.

В основном результатом этого плагина является то, что Java-аннотации добавляются к некоторым методам, поэтому

void foo() { ... }

становится

@MyAnnotation
void foo() { ... }

За исключением того, что это не совсем так; отступ во вновь вставленной аннотации - это дурак (в частности, новая аннотация находится до левой части строки). Я хотел бы внести все свои изменения в файл, а затем программно вызвать «Правильный отступ».

Кто-нибудь знает, как это сделать? Я не могу найти ответ здесь или на форумах JDT, и все классы, которые выглядят важными (IndentAction, JavaIndenter), находятся во внутренних пакетах, которые я не должен использовать ...

Спасибо!

Ответы [ 2 ]

6 голосов
/ 20 мая 2010

Ну, я думаю, я мог найти решение, которое я хочу. Думаю, мне следовало потратить больше времени на поиск, прежде чем спрашивать ... но для дальнейшего использования вот что я сделал! Хорошие вещи были в ToolFactory ...

import org.eclipse.jdt.core.ToolFactory;
import org.eclipse.jdt.core.formatter.CodeFormatter;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.text.edits.TextEdit;
import org.eclipse.jdt.core.ICompilationUnit;

...

ICompilationUnit cu = ...

...

CodeFormatter formatter = ToolFactory.createCodeFormatter(null);
ISourceRange range = cu.getSourceRange();
TextEdit indent_edit =
  formatter.format(CodeFormatter.K_COMPILATION_UNIT, 
    cu.getSource(), range.getOffset(), range.getLength(), 0, null);
cu.applyTextEdit(indent_edit, null);

cu.reconcile();

Это переформатирует весь файл. Есть и другие варианты, если вам нужно меньше переформатировать ...

0 голосов
/ 20 мая 2010

Вероятно, проще добавить отступ при обработке кода Java.

Ваш плагин Eclipse должен был прочитать строку void foo() { ... }, чтобы добавить @MyAnnotation, верно? Просто получите отступ от строки Java и добавьте аннотацию к отступу.

...