Bug 185977 InvalidRegistryObjectException thrown when refreshingPackages
diff --git a/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
index 6bdcf61..ecdb124 100644
--- a/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.registry; singleton:=true
-Bundle-Version: 3.3.0.qualifier
+Bundle-Version: 3.3.1.qualifier
Bundle-Localization: plugin
Export-Package: org.eclipse.core.internal.registry;x-friends:="org.eclipse.core.runtime",
org.eclipse.core.internal.registry.osgi;x-friends:="org.eclipse.core.runtime",
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
index 66d7013..805e08b 100644
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
+++ b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
@@ -678,8 +678,28 @@
if (tmp == null) // already removed
continue;
Integer extensionIndex = new Integer(extensions[j]);
- if (!associatedObjects.containsKey(extensionIndex))
+ if (!associatedObjects.containsKey(extensionIndex)) {
result.put(extensionIndex, tmp);
+ collectChildren(tmp, 0, result);
+ }
+ }
+ }
+ else if (object instanceof ExtensionPoint) {
+ // by now extensions of this extension point have been marked as orphans
+ Map orphans = getOrphans();
+ String name = ((ExtensionPoint)object).getUniqueIdentifier();
+ int[] extensions = (int[]) orphans.get(name);
+ if (extensions != null) {
+ for (int j = 0; j < extensions.length; j++) {
+ Extension tmp = (Extension) basicGetObject(extensions[j], RegistryObjectManager.EXTENSION);
+ if (tmp == null) // already removed
+ continue;
+ Integer extensionIndex = new Integer(extensions[j]);
+ if (!associatedObjects.containsKey(extensionIndex)) {
+ result.put(extensionIndex, tmp);
+ collectChildren(tmp, 0, result);
+ }
+ }
}
}
}