Запуск метода извлечения в Eclipse Refactoring/LTK API

В настоящее время я разрабатываю подключаемый модуль Eclipse, который позволит мне запускать рефакторинг с помощью жестов. Я уже некоторое время пытаюсь программно вызвать "метод извлечения" в Eclipse, но постоянно сталкиваюсь с проблемами. Большинство предложений, которые я нашел при поиске решения, требуют использования внутренних классов.

Я застрял в этом шаблоне кода. Проблема в том, что я не могу найти место, где я мог бы дать код, который я хочу извлечь, как ISelection или что-то подобное.

RefactoringContribution rc = RefactoringCore.getRefactoringContribution(IJavaRefactorings.EXTRACT_METHOD);
ExtractMethodDescriptor rd = (ExtractMethodDescriptor) rc.createDescriptor();

rd.setProject(staticHelper.getIProject().getName());
//There should be some more rd.setXXXXX() here.

RefactoringStatus rs = new RefactoringStatus();

try {
    Refactoring r = rd.createRefactoring(rs);
    IProgressMonitor pm = new NullProgressMonitor();

    r.checkInitialConditions(pm);
    r.checkFinalConditions(pm);

    Change change = r.createChange(pm);
    change.perform(pm);
}

catch(Exception e) {e.printStackTrace();}
}

Следующий метод работает, но он использует внутренний API:

@SuppressWarnings("restriction")    //Works but is INTERNAL USE ONLY
public static void extractMethodRefactoring() {
    ITextSelection selection = staticHelper.getITextSelection();
    int start = selection.getOffset();
    int length = selection.getLength();


    //The following line is part of the internal API
    ExtractMethodRefactoring tempR = new ExtractMethodRefactoring(staticHelper.getICompilationUnit(), start, length);

    try {
        NullProgressMonitor pm = new NullProgressMonitor();
        tempR.checkAllConditions(pm);
        Change change = tempR.createChange(pm);
        change.perform(pm);
    } catch (Exception e) {e.printStackTrace();}

}

Опять же, для этого требуется внутренний класс ExtractMethodRefactoring, который не должен использоваться.

0 ответов

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