Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Watson2012-08-07 19:02:40 +0000
committerThomas Watson2012-08-07 19:02:40 +0000
commit8d3e59c290937b4d14db39707f9ee61d9dedddfb (patch)
tree7bb875d035f62a558a2771d211edff87b083def9 /bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
parent7f77483bb4a46c86a4a3104c5dee52c216cb8952 (diff)
downloadrt.equinox.framework-8d3e59c290937b4d14db39707f9ee61d9dedddfb.tar.gz
rt.equinox.framework-8d3e59c290937b4d14db39707f9ee61d9dedddfb.tar.xz
rt.equinox.framework-8d3e59c290937b4d14db39707f9ee61d9dedddfb.zip
Aggressively resolve extension bundles.
Diffstat (limited to 'bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java')
-rw-r--r--bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java26
1 files changed, 24 insertions, 2 deletions
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
index 9c942f680..2341b7e48 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
@@ -10,8 +10,7 @@
*******************************************************************************/
package org.eclipse.osgi.internal.framework;
-import java.util.EnumSet;
-import java.util.Map;
+import java.util.*;
import org.eclipse.osgi.container.*;
import org.eclipse.osgi.container.Module.Settings;
import org.eclipse.osgi.internal.loader.*;
@@ -19,7 +18,9 @@ import org.eclipse.osgi.storage.BundleInfo.Generation;
import org.eclipse.osgi.storage.Storage;
import org.osgi.framework.*;
import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+import org.osgi.framework.namespace.HostNamespace;
import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.service.resolver.ResolutionException;
public class EquinoxContainerAdaptor extends ModuleContainerAdaptor {
private final EquinoxContainer container;
@@ -82,6 +83,27 @@ public class EquinoxContainerAdaptor extends ModuleContainerAdaptor {
if (publisher != null) {
publisher.publishBundleEvent(getType(type), module.getBundle(), origin.getBundle());
}
+ checkFrameworkExtensions(type, module);
+ }
+
+ private void checkFrameworkExtensions(ModuleEvent type, Module module) {
+ if (ModuleEvent.INSTALLED.equals(type)) {
+ ModuleRevision current = module.getCurrentRevision();
+ if ((BundleRevision.TYPE_FRAGMENT & current.getTypes()) != 0) {
+ Module systemModule = storage.getModuleContainer().getModule(0);
+ List<ModuleCapability> candidates = systemModule == null ? Collections.<ModuleCapability> emptyList() : systemModule.getCurrentRevision().getModuleCapabilities(HostNamespace.HOST_NAMESPACE);
+ List<ModuleRequirement> hostReqs = current.getModuleRequirements(HostNamespace.HOST_NAMESPACE);
+ if (!hostReqs.isEmpty() && !candidates.isEmpty()) {
+ if (hostReqs.get(0).matches(candidates.get(0))) {
+ try {
+ storage.getModuleContainer().resolve(Arrays.asList(module), true);
+ } catch (ResolutionException e) {
+ publishContainerEvent(ContainerEvent.ERROR, module, e);
+ }
+ }
+ }
+ }
+ }
}
@Override

Back to the top