Fix to not allow fragments to attach if host is resolved and fragment imports/requires/exports new resources.
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
index cb0b9ce..0f9cc3f 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
@@ -381,13 +381,21 @@
if (isFragment())
return new ResolverExport[0]; // cannot attach to fragments;
+ ImportPackageSpecification[] newImports = fragment.getBundle().getImportPackages();
+ BundleSpecification[] newRequires = fragment.getBundle().getRequiredBundles();
+ ExportPackageDescription[] newExports = fragment.getBundle().getExportPackages();
+
+ if (newImports.length > 0 || newRequires.length > 0 || newExports.length > 0) {
+ if (isResolved())
+ return new ResolverExport[0];
+ }
+
initFragments();
if (fragments.contains(fragment))
return new ResolverExport[0];
fragments.add(fragment);
fragment.getHost().addMatchingBundle(this);
- ImportPackageSpecification[] newImports = fragment.getBundle().getImportPackages();
if (newImports.length > 0) {
ArrayList hostImports = new ArrayList(newImports.length);
for (int i = 0; i < newImports.length; i++)
@@ -396,7 +404,6 @@
fragmentImports.put(fragment.bundleID, hostImports);
}
- BundleSpecification[] newRequires = fragment.getBundle().getRequiredBundles();
if (newRequires.length > 0) {
ArrayList hostRequires = new ArrayList(newRequires.length);
for (int i = 0; i < newRequires.length; i++)
@@ -405,7 +412,6 @@
fragmentRequires.put(fragment.bundleID, hostRequires);
}
- ExportPackageDescription[] newExports = fragment.getBundle().getExportPackages();
ArrayList hostExports = new ArrayList(newExports.length);
if (newExports.length > 0 && addExports) {
StateObjectFactory factory = bundle.getContainingState().getFactory();