2010-01-22 2 views
1

Я хочу написать плагин Eclipse, который выполняет действие с выбранным проектом. Я использовал шаблон плагина с подменю. Мой файл plugin.xml выглядит так:Eclipse-Plugin с подменю. Как обращаться с JavaProjects и проектами?

<extension 
     point="org.eclipse.ui.popupMenus"> 
    <objectContribution 
     objectClass="org.eclipse.core.internal.resources.Project" 
     id="testplugin2.contribution1"> 
     <menu 
      label="Propertie Manager" 
      path="additions" 
      id="testplugin2.menu1"> 
     <separator 
       name="group1"> 
     </separator> 
     </menu> 
     <action 
      label="list all *.properties" 
      class="testplugin2.popup.actions.ListPropertiesAction" 
      menubarPath="testplugin2.menu1/group1" 
      enablesFor="1" 
      id="testplugin2.projectAction"> 
     </action> 
    </objectContribution> 
</extension> 

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

Как создать подменю, если вы выбрали javaProject или Project?

+0

Я решил проблему с обходом. Я сделал два действия один для IJavaProjects и один для IProjects и перенаправил их. – Zwarn

ответ

1

Я не проверял, но, возможно, это работает:

<objectcontribution ...> 
    <visibility> 
     <objectClass 
      name="org.eclipse.jdt.core.IJavaProject" /> 
    </visibility> 
</objectContribution> 

Вы также можете попробовать «ВОЗМОЖНОСТИ» вместо «видимости».

eclipse help pages on popup menus

+0

Я тестировал его, но я не работал. Если я просто добавлю тег, то действие не появится вообще. Если я изменяю objectcontribution objectclass = "java.lang.Object", чем действие появляется только для JavaProjects.Невозможно добавить второй тег видимости, и включение не помогло. – Zwarn

0

Вы не должны ссылаться на внутренний класс в вас класс объектов. Вы должны использовать общедоступный интерфейс вместо

objectClass="org.eclipse.core.internal.resources.Project" 

Попробуйте

objectClass="org.eclipse.core.IProject" 

Я не пробовал это, но IJavaProject должны адаптироваться к IProject, так что это должно работать для обоих.

+0

Я тестировал его, и я не работал. Я думаю, вы имеете в виду org.eclipse.core.ressources.IProject, и это удивительно не суперинтерфейс org.eclipse.jdt.core.IJavaProject. – Zwarn

0

Убедитесь адаптируется свойства вашего объекта вклада устанавливается в истинных (значения по умолчанию равно ложных):

adaptable="true" 

@iain предложение целевого интерфейса является хорошей практикой.

Просто попробовал ваш пример, и меню отображалось как ожидалось в проекте Java.

Всегда имейте в виде adpatability к org.eclipse.core.resources.IResource в целом, чтобы обеспечить ваше меню, действия, которые будут последовательно отображаться и включены (независимо от исследователя или фактический класс объекта, оказываемый).

И, наконец, остерегайтесь того, что точка расширения org.eclipse.ui.popupMenus устарела.

Хотя в моем опыте, используя это быстрее и проще, чем рекомендованные org.eclipse.ui.commands, вы можете в конечном итоге с трудом мигрирующей все ваши меню, когда он удаляется (то есть, если удалено в некоторой степени).

Cheers,

Смежные вопросы