Ваша проблема заключается в том, что при вызове getItems() на IMenuManager он будет возвращать только дочерние элементы, а не дочерние элементы других IMenuManagers, которые добавляются в ваш корень IMenuManager. Если вы хотите получить все элементы, а дочерние элементы IMenuManager - это функция, которая сделает это. Хотя, если вы делаете это, чтобы добавить IContributionItems, вы можете просто использовать .addItem (item itemPath), который будет внутренне ходить по графику и добавлять свой вклад в нужное место. Если вы хотите удалить существующий взнос, вам нужно сначала получить все элементы вклада в дереве меню, а затем вызвать remove() в IMenuManager с экземпляром ContributionItem, который вы хотите удалить. Попробуйте эту функцию, и вы увидите элементы импорта и экспорта, а также другие элементы подменю в вашем корневом менеджере. Надеюсь, что это поможет, если вы все еще застряли, ответьте. - Duncan Krebs
private IContributionItem[] getMenuTreeItems(IMenuManager rootManager) {
List<IContributionItem> items = new ArrayList<IContributionItem>();
addMenuManagerItems(rootManager, items);
return items.toArray(new IContributionItem[items.size()]);
}
private void addMenuManagerItems(IMenuManager manager, List<IContributionItem> items) {
for (IContributionItem item : manager.getItems()) {
if (item instanceof IMenuManager) {
IMenuManager childManager = (IMenuManager) item;
addMenuManagerItems(childManager, items);
} else {
items.add(item);
}
}
}
Duncan Krebs, я делаю то же, что и вы предлагали. Несмотря на наличие подменю, которое я вижу во всплывающем окне, они не отображаются через код. Я получаю некоторые элементы, разделители и группы вклада только через код и без менеджеров меню. – Sajja