Кажется, что с EventManager
, как упоминалось в моих комментариях к вопросу, он больше не работает.
Я создал New → Project ... → Plugin-Project → ... → Шаблон: вклад меню с использованием API 4.x и адаптированный HelloWorldHandler
:
@Execute
public void execute( @Named( IServiceConstants.ACTIVE_SHELL ) final Shell s ) {
//MessageDialog.openInformation(s, "E4 Information Dialog", "Hello world from a pure Eclipse 4 plug-in");
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if ( window instanceof WorkbenchWindow ) {
final MenuManager menu = ( (WorkbenchWindow) window ).getMenuManager();
final Set<IContributionItem> result = new HashSet<>();
collectContributions( menu, result );
result.stream()
.filter( ci -> ci.getId().equals( "about" ) )
.forEach( ci -> {
final IAction a = ( (ActionContributionItem) ci ).getAction();
System.out.println( a.getDescription() );
//((Action)a).addListenerObject(null);
// The method addListenerObject(Object) from the type EventManager is not visible
} );
}
}
private void collectContributions( final MenuManager menu, final Set<IContributionItem> result ) {
final IContributionItem[] items = menu.getItems();
for ( final IContributionItem item2 : items ) {
IContributionItem item = item2;
if ( item instanceof SubContributionItem )
item = ( (SubContributionItem) item ).getInnerItem();
if ( item instanceof MenuManager )
collectContributions( (MenuManager) item, result );
else if ( item instanceof ActionContributionItem && item.isEnabled() )
result.add( item );
}
}
Вывод
About Eclipse Platform
Итак, я могу получить Action
по его идентификатору, но вопреки do c из Action
и вопреки источнику, отображаемому с F3 в Eclipse (EventManager
← AbstractAction
← Action
) он не предоставляет методы EventManager
s (« Метод addListenerObject (Object) из типа EventManager не отображается ») . Вероятно, поскольку do c последнего читает:
Предупреждение: Не используйте этот класс! Используйте ListenerList
напрямую. См. ошибка 486067 .
AFAICS, если поставщик стороннего плагина не использует этот ListenerList
и не предлагает addListener()
в своем плагине, нас нет удачи.