Как программно создать новый Java-класс, который реализует заданный интерфейс в разработке плагинов Eclipse - PullRequest
0 голосов
/ 08 июня 2011

Друзья,

Сейчас мы разрабатываем плагин eclipse, он содержит действие для создания интерфейса службы и его заглушку.

Теперь интерфейс сгенерирован, я хочу использовать eclipse JDT для создания Java-класса, который реализует указанный интерфейс, но не знаю как.

Информация, которую мы имеем: имя интерфейса, имя класса impl, имя пакета, проект java содержит их.

Заранее благодарим за помощь.

Ответы [ 4 ]

1 голос
/ 08 июня 2011

Вероятно, минимальные шаги, которые вам нужно будет сделать, - это просто сгенерировать исходный контент в правильно размещенное IFile.Пример:

public Object execute(ExecutionEvent event) throws ExecutionException {
    final String PACKAGE_PATH = "z.ex/src/z/ex/go";
    final String CONTENT = "package z.ex.go;\n"
            + "public class RunAway {\npublic static void main(String[] args) {\n"
            + "System.out.println(\"Run Away\");\n}\n}\n";
    final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
    final IResource packageResource = root.findMember(PACKAGE_PATH);
    if (packageResource instanceof IFolder) {
        IFolder packageFolder = (IFolder) packageResource;
        final IFile file = packageFolder.getFile("RunAway.java");
        try {
            if (!file.exists()) {
                file.create(new ByteArrayInputStream(CONTENT.getBytes()),
                        true, new NullProgressMonitor());
            } else {
                file.setContents(
                        new ByteArrayInputStream(CONTENT.getBytes()),
                        IFile.FORCE | IFile.KEEP_HISTORY,
                        new NullProgressMonitor());
            }
        } catch (CoreException e) {
            e.printStackTrace();
        }
    }
    return null;
}

См. AbstractNewClassWizard для меньшего примера, который похож на NewTypeWizardPage и использует некоторые из API JDT.

1 голос
/ 10 декабря 2012

Вы можете использовать мастер создания классов для создания классов.

Это запросит у пользователя имя класса и так далее.Вы можете инициализировать значения на странице мастера.Ниже я устанавливаю только исходную папку (и сообщаю мастеру, что она не может быть изменена, таким образом, второй параметр false).Возможно, вы захотите установить интерфейс и, возможно, пакет.

    OpenNewClassWizardAction wizard = new OpenNewClassWizardAction();
    wizard.setOpenEditorOnFinish(false);
    NewClassWizardPage page = new NewClassWizardPage();
    page.setPackageFragmentRoot(sourceFolder, false);
    wizard.setConfiguredWizardPage(page);
    wizard.run();
    return (IType) wizard.getCreatedElement();

Надеюсь, это поможет!

1 голос
/ 08 июня 2011

При быстром просмотре того, как это делает мастер новых классов, кажется, что для этого нет общедоступного и простого в использовании API. Вы можете взглянуть на org.eclipse.jdt.ui.wizards.NewTypeWizardPage.createType(IProgressMonitor) метод, чтобы увидеть, как сам JDT создает новые классы.

Должно быть возможно расширить org.eclipse.jdt.ui.wizards.NewTypeWizardPage, чтобы вы могли использовать метод createType().

0 голосов
/ 06 апреля 2015

Создайте весь файл Java, используя JDT - AST . Сначала создайте AST, а затем запишите его в файл Java. Это может выглядеть как здоровенная работа, но это лучший. Вы будете иметь полный контроль.

...