Вопрос или проблема
Я написал проект PlugIn в Eclipse, который должен разрешать переменные особым образом. Идея возникла для более быстрого внедрения методов getter/setter:
public ${type} get${varNameUpper}(${type}${varNameLower}) {
return ${varNameLower};
}
Этот шаблон должен брать переменную “varNameUpper/Lower” и одновременно подстраивать её. Для этого я написал классы PlugIn:
public class Lower extends SimpleTemplateVariableResolver {
public Lower() {
super("varNameLower", "Преобразует первую букву в строчную");
}
@Override
protected String resolve(TemplateContext context) {
String variableName = context.getVariable("variableName");
if (variableName != null && !variableName.isEmpty()) {
return variableName.substring(0, 1).toLowerCase() + variableName.substring(1);
}
return "";
}
И
public class Context extends TemplateContextType {
public Context() {
super("de.s231371.plugin.context");
// Регистрация разрешителей переменных
addResolver(new Lower());
addResolver(new Upper());
}
}
Проблема заключается в том, что я смог включить PlugIn в Eclipse, так что Eclipse перечисляет его под “Установленное ПО”, но в разделе Шаблонов, где я могу установить контекст для своего разрешителя шаблонов, он не указан.
Я экспортировал его как .jar файл и добавил в папку eclipse/dropins, что, по крайней мере, кажется, интегрирует его в eclipse.
Мой манифест и Plugin.xml:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Automatic-Module-Name: de.s231371.plugin
Bundle-Name: templateHandler
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-SymbolicName: de.s231371.plugin;singleton:=true
Bundle-Version: 1.1.1
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.jface.text;bundle-version="3.25.0"
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<!-- Регистрация контекста шаблона -->
<extension
point="org.eclipse.ui.editors.templates">
<contextType
class="de.s231371.plugin.Context"
id="de.s231371.plugin.context"
name="Контекст шаблона пользовательского плагина">
</contextType>
<!-- Определение шаблона -->
<template
id="de.s231371.plugin.template"
name="Пользовательский шаблон"
contextTypeId="de.s231371.plugin.context"
description="Пользовательский шаблон для демонстрационных целей">
<pattern>
<![CDATA[
public ${type} get${varNameUpper}(${type} ${varNameLower}) {
return ${varNameLower};
}
public void set${varNameUpper}(${type} ${varNameLower}) {
this.${varNameLower} = ${varNameLower};
}
]]>
</pattern>
</template>
</extension>
</plugin>
Я также пытался запустить PlugIn напрямую в режиме отладки, что снова включает его в Eclipse, но не отображает в меню контекста шаблонов.
Ответ или решение
Вопрос о корректном включении проекта Eclipse PlugIn в Eclipse Committers требует внимательного анализа процесса регистрации шаблонов и контекстов в платформе Eclipse. Давайте рассмотрим шаги, которые необходимо выполнить, чтобы ваш плагин корректно отображался в разделе шаблонов.
1. Проверка структуры проекта
Убедитесь, что ваша структура проекта соответствует стандартам Eclipse Plug-In Development Environment ( PDE). Важно, чтобы ваш плагин был правильно организован и содержал все необходимые файлы.
2. Регистрация контекста шаблона
Для того чтобы ваш контекст шаблона появился в меню Eclipse, необходимо убедиться, что он правильно зарегистрирован в файле plugin.xml
. У вас уже есть следующая запись:
<extension
point="org.eclipse.ui.editors.templates">
<contextType
class="de.s231371.plugin.Context"
id="de.s231371.plugin.context"
name="Custom Plugin Template Context">
</contextType>
...
</extension>
Убедитесь, что:
- Вы правильно указываете класс контекста (
de.s231371.plugin.Context
). - Контекст действительно создаёт экземпляры своих переменных и их резолверов.
3. Проверка шапки манифеста
В вашем файле MANIFEST.MF
вы перечисляете необходимые зависимости. Убедитесь, что вы включили все нужные точки расширения:
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.jface.text;bundle-version="3.25.0",
org.eclipse.ui.editors.templates
Добавление org.eclipse.ui.editors.templates
может помочь вашей реализации в забирании контекстов шаблонов.
4. Проверка работы классов резолверов
Ваши классы Lower
и Upper
являются резолверами переменных. Убедитесь, что:
- Вы создали класс
Upper
аналогичным образом, как это сделано дляLower
. - В методе
resolve
ваших классов вы правильно работаете с передаваемыми переменными. Нужно проверить корректность использования переменнойvariableName
.
5. Перезагрузка Eclipse
После того как вы внесли изменения, обязательно перезагрузите ваш экземпляр Eclipse. В некоторых случаях изменения в plugin.xml
могут не обновляться без полной перезагрузки.
6. Проверка запуска в режиме отладки
Если вы запускаете плагин в режиме отладки, убедитесь, что:
- Вы запустили правильный конфигурационный файл (Eclipse Application).
- Ваши файлы корректно компилируются.
Если всё сделано правильно, ваш контекст шаблона должен появиться в списке доступных при создании или редактировании шаблона.
Заключение
Следуя вышеуказанным шагам, вы сможете правильно зарегистрировать свой плагин и гарантировать отображение вашего контекста и шаблона в Eclipse. Проверьте все детали во избежание ошибок, а также используйте отладку, чтобы получить больше информации о процессе загрузки вашего плагина. В случае возникновения дальнейших вопросов или проблем, общение с сообществом Eclipse или просмотр документации Eclipse может дать дополнительные подсказки.