Установка подключаемого модуля eclipse в singleton при создании проекта подключаемого модуля через интерфейс IPluginContentWizard - PullRequest
0 голосов
/ 26 октября 2018

Я разрабатываю мастер, который реализует интерфейс org.eclipse.pde.ui.IPluginContentWizard.Таким образом, он добавляется в качестве шаблона проекта плагина в конце мастера проекта плагина.Все файлы будут созданы просто отлично, но в проекте есть одна ошибка.Плагин не объявляется одиночным, каким он должен быть при расширении точек расширения.

Как это сделать в мастере?Я подумал, что это нужно сделать в executeFinish (проект IProject, модель IPluginModelBase, монитор IProgressMonitor), но ни проект, ни модель не дают мне такой возможности.

Редактировать: Для будущих читателей: Моя ошибка была,что я добавил расширение не через API, а через генерацию plugin.xml «вручную».Это не привело к тому, что ни один механизм в фоновом режиме не выполнял свою работу, и поэтому директива singleton не была установлена.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

В случае, если кто-то совершает ту же ошибку с новичком, чем я, я хотел опубликовать свое решение, которое я нашел после повторного посещения проекта:

Не создавайте plugin.xml вручную, используйте API-интерфейс PDEмодель плагина для добавления расширений.

В методе org.eclipse.pde.ui.IPluginContentWizard реализации *1005* сделайте это:

try {
    IPluginExtension extension = model.getExtensions().getModel().getFactory().createExtension();
    extension.setPoint("org.eclipse.elk.core.layoutProviders");
    IPluginElement provider = model.getPluginFactory().createElement(extension);
    provider.setName("provider");
    provider.setAttribute("class", id + "." + algorithmName + "MetadataProvider");
            extension.add(provider);
    model.getExtensions().add(extension);
} catch (CoreException e) {
    e.printStackTrace();
}
0 голосов
/ 11 апреля 2019

Этот путь будет слишком длинным, давайте использовать больше API PDE:

Сначала определите раздел шаблона

import org.eclipse.pde.ui.templates.OptionTemplateSection;

public class YourTemplateSection extends OptionTemplateSection {

    //implement abstract methods according your needs

    @Override
    protected void updateModel(IProgressMonitor monitor) throws CoreException {
        IPluginBase plugin = model.getPluginBase();

        //do what is needed

        plugin.add(extension);//here the "singleton" directive will be set

    }
}

, затем используйте раздел с мастером

import org.eclipse.pde.ui.templates.ITemplateSection;
import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;

public class YourContentWizard extends NewPluginTemplateWizard {

    @Override
    public ITemplateSection[] createTemplateSections() {
        return new ITemplateSection[] { new YourTemplateSection() };
    }

}
...