Voici un point de départ (cela s'applique à Eclipse 3.4 et versions ultérieures, lorsque le référentiel P2 a été introduit, les versions antérieures stockent leur configuration différemment.) Vous pouvez voir tous les plugins et fonctionnalités dans platform.xml). Créez un nouveau projet de plug-in (Nouveau-> Autre-> Développement de plug-in-> Projet de plug-in) avec le modèle "Hello World" puis déposez ce code dans la méthode d'exécution de SampleAction. Exécutez le plug-in en tant qu'application Eclipse de test et sélectionnez Sample Menu-> Sample Action, les plug-ins n'appartenant pas à une fonctionnalité seront affichés dans la console de l'espace de travail parent. Quand j'ai couru cela, il y en avait un peu plus que ce à quoi je m'attendais, j'ai regardé à travers et je ne peux pas repérer l'erreur de logique. Edit, erreur logique trouvée, utilisait le mauvais index de tableau utilisé dans la boucle la plus interne. Encore pas tout à fait raison.
Édition 2. (Moment Facepalm) a trouvé le problème. Veillez à exécuter l'espace de travail cible avec tous les espaces de travail et les plug-ins cibles activés activés, ou cela faussera vos résultats, évidemment. Si vous installez le plugin et l'habillez un peu, vous n'aurez pas ce problème.
//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());
}
}
}
Impressionnant ... +1 – VonC
Merci beaucoup, ont réussi à déterminer quels plug-ins étaient orphelins – dilig0
Vous êtes les bienvenus, mais il est ennuyeux que cela ne fait pas partie de la boîte de dialogue standard. Depuis, j'ai regardé et AboutFeaturesPage a presque exactement le même code que la première partie (juste envelopper avec quelques objets Info). Il serait trivial d'ajouter un bouton "montrer les orphelins" à cette page. –