Вот отправная точка (это относится к Eclipse 3.4 и более поздним версиям, когда был представлен репозиторий P2, более ранние версии хранят свою конфигурацию по-другому. Во IIRC вы можете увидеть все плагины и функции в platform.xml).
Создайте новый проект плагина (New-> Other-> Plug-in Development-> Plug-in Project) с шаблоном «Hello World», затем перетащите этот код в метод run SampleAction.
Запустите плагин как тестовое приложение Eclipse и выберите Sample Menu-> Sample Action, плагины, которые не принадлежат какой-либо функции, будут выводиться на консоль родительского рабочего пространства. Когда я запустил это, их было намного больше, чем я ожидал, я немного просмотрел и не могу обнаружить логическую ошибку.
Редактировать, обнаружена логическая ошибка, использовался неверный индекс массива, использованный в самом внутреннем цикле. Тем не менее, не совсем верно.
Редактировать 2. (Момент Facepalm) Нашел проблему. Обязательно запустите целевое рабочее пространство с всем рабочим пространством и включенными целевыми подключаемыми модулями, включенными , иначе это, очевидно, приведет к искажению ваших результатов. Если вы установите плагин и оденете его немного, у вас не возникнет этой проблемы.
//get all the plugins that belong to features
IBundleGroupProvider[] providers = Platform.getBundleGroupProviders();
Map<Long, IBundleGroup> bundlesMap = new HashMap<Long, IBundleGroup>();
if (providers != null) {
for (int i = 0; i < providers.length; i++) {
IBundleGroup[] bundleGroups = providers[i].getBundleGroups();
System.out.println("Bundle groups:");
for (int j = 0; j < bundleGroups.length; j++) {
Bundle[] bundles = bundleGroups[j] == null ? new Bundle[0] : bundleGroups[j]
.getBundles();
System.out.println(bundleGroups[j].getIdentifier());
for (int k = 0; k < bundles.length; k++) {
bundlesMap.put(bundles[k].getBundleId(), bundleGroups[j]);
}
}
}
}
BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext();
if(bundleContext instanceof BundleContextImpl) {
Bundle[] bundles = ((BundleContextImpl)bundleContext).getBundles();
System.out.println("Orphan Bundles:");
for (int i = 0; i < bundles.length; i++) {
if(!bundlesMap.containsKey(bundles[i].getBundleId())) {
System.out.println(bundles[i].getSymbolicName());
}
}
}