+ public Map findPackagesExportedTwice() {
+ ServiceReference paSr = bundleContext
+ .getServiceReference(PackageAdmin.class.getName());
+ // TODO: make a cleaner referencing
+ PackageAdmin packageAdmin = (PackageAdmin) bundleContext
+ .getService(paSr);
+
+ // find packages exported twice
+ Bundle[] bundles = bundleContext.getBundles();
+ Map /* <String,Set<String>> */exportedPackages = new TreeMap();
+ for (int i = 0; i < bundles.length; i++) {
+ Bundle bundle = bundles[i];
+ ExportedPackage[] pkgs = packageAdmin.getExportedPackages(bundle);
+ if (pkgs != null)
+ for (int j = 0; j < pkgs.length; j++) {
+ String pkgName = pkgs[j].getName();
+ if (!exportedPackages.containsKey(pkgName)) {
+ exportedPackages.put(pkgName, new TreeSet());
+ }
+ ((Set) exportedPackages.get(pkgName)).add(bundle
+ .getSymbolicName() + "_" + bundle.getVersion());
+ }
+ }
+ Map /* <String,Set<String>> */duplicatePackages = new TreeMap();
+ Iterator it = exportedPackages.keySet().iterator();
+ while (it.hasNext()) {
+ String pkgName = it.next().toString();
+ Set bdles = (Set) exportedPackages.get(pkgName);
+ if (bdles.size() > 1)
+ duplicatePackages.put(pkgName, bdles);
+ }
+ return duplicatePackages;
+ }
+