diff options
author | Thomas Watson | 2012-08-07 19:02:40 +0000 |
---|---|---|
committer | Thomas Watson | 2012-08-07 19:02:40 +0000 |
commit | 8d3e59c290937b4d14db39707f9ee61d9dedddfb (patch) | |
tree | 7bb875d035f62a558a2771d211edff87b083def9 /bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java | |
parent | 7f77483bb4a46c86a4a3104c5dee52c216cb8952 (diff) | |
download | rt.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.java | 26 |
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 |