Подтвердить что ты не робот

Есть ли API-интерфейс для рефакторинга Eclipse, который я могу назвать программным?

Мне нужно реорганизовать код в широком смысле. Я знаю, что изнутри Eclipse IDE я могу реорганизовать свои классы. Но есть ли какой-либо API, который я могу использовать в проекте java, чтобы я мог реорганизовывать проекты динамически через код?


Мне нужна идея о том, как добиться следующего: программа, которая вызывает все рефакторинги Eclipse для переименования и перемещения в цикле для реорганизации всего проекта за один снимок!


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

4b9b3361

Ответ 1

Ответ ниже велик, но я ответил с более широкой перспективой для людей, которым нужен более громоздкий и вкусный хруст этого замечательного cake:

    RefactoringStatus status = new RefactoringStatus();
    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IWorkspaceRoot root = workspace.getRoot();
    IProject[] projects = root.getProjects();

затем:

for (ICompilationUnit unit : mypackage.getCompilationUnits()) {
    IType primary = unit.findPrimaryType();
    IMethod[] methods = primary.getMethods();
    int i = 1;
    for (IMethod method : methods) {
        if (method.isConstructor()) {
            continue;
        }
    makeChangetoMethods(status, method,"changedMethodVersion_" + i);
    ++i;
    }
}

После этого:

IProgressMonitor monitor = new NullProgressMonitor();
status = new RefactoringStatus();
Refactoring refactoring = performMethodsRefactoring(status, methodToRename, newName);

затем:

Change change = refactoring.createChange(monitor);
change.perform(monitor);

найдите ниже код для установки descriptor:

String id = IJavaRefactorings.RENAME_METHOD;
RefactoringContribution contrib = RefactoringCore.getRefactoringContribution(id);
RenameJavaElementDescriptor desc = contrib.createDescriptor();
desc.setUpdateReferences(true);
desc.setJavaElement(methodToRename);
desc.setNewName(newName);
desc.createRefactoring(status);

Ответ 2

Что-то вроде this?

Любой, кто поддерживает язык программирования в среде IDE на основе Eclipse будет предложено рано или поздно предложить автоматические рефакторинги - аналогично тому, что предоставляется инструментами разработки Java (JDT). поскольку выпуск Eclipse 3.1, по крайней мере, часть этой задачи (которой нет означает простой) поддерживается с помощью нейтрального интерфейса API: Язык Инструментарий (ЛТК). Но как этот API используется?

EDIT:

Если вы хотите программно запускать рефакторинг без использования пользовательского интерфейса, RefactoringDescriptors (см. article) можно использовать для заполнения параметров и выполнять программный рефакторинг. Если вы создадите плагин, который зависит от org.eclipse.core.runtime и добавьте расширение org.eclipse.core.runtime.applications, вы сможете запустить класс IApplication из eclipse, аналогичный классу main(String[]), в простых Java-приложениях. Пример вызова API можно найти на post.

ICompilationUnit cu = ... // an ICompilationUnit to rename

RefactoringContribution contribution =
    RefactoringCore.getRefactoringContribution(IJavaRefactorings .RENAME_COMPILATION_UNIT);
RenameJavaElementDescriptor descriptor =
    (RenameJavaElementDescriptor) contribution.createDescriptor();
descriptor.setProject(cu.getResource().getProject().getName( ));
descriptor.setNewName("NewClass"); // new name for a Class
descriptor.setJavaElement(cu);

RefactoringStatus status = new RefactoringStatus();
try {
    Refactoring refactoring = descriptor.createRefactoring(status);

    IProgressMonitor monitor = new NullProgressMonitor();
    refactoring.checkInitialConditions(monitor);
    refactoring.checkFinalConditions(monitor);
    Change change = refactoring.createChange(monitor);
    change.perform(monitor);

} catch (CoreException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Если у вас есть более подробные вопросы об использовании JDT-API (AST, Refactoring и т.д.), я предлагаю вам обратиться к JDT Forum.