Resolve fragments when attempting to dynamically import. (FELIX-1435)


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@799660 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index ced9680..524f79b 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -2598,7 +2598,7 @@
             for (int i = 0; i < listenerHooks.size(); i++)
             {
                 m_registry.invokeHook((ServiceReference) listenerHooks.get(i), this, removedCallback);
-            };
+            }
         }
 
         // Invoke the ListenerHook.added() on all hooks.
@@ -2730,7 +2730,7 @@
 
         // Check to see if this a listener hook; if so, then we need
         // to invoke the callback with all existing service listeners.
-        if (m_registry.isHook(classNames, ListenerHook.class, svcObj))
+        if (ServiceRegistry.isHook(classNames, ListenerHook.class, svcObj))
         {
             m_registry.invokeHook(reg.getReference(), this, new InvokeHookCallback()
             {
@@ -3873,8 +3873,8 @@
                     }
 
                     // Before trying to resolve, tell the resolver state to
-                    // merge all fragments into host, which may result in the
-                    // rootModule changing if the real root is a module.
+                    // merge all fragments into hosts, which may result in the
+                    // rootModule changing if the root is a fragment.
                     IModule newRootModule;
                     try
                     {
@@ -3932,6 +3932,18 @@
                         }
                     }
 
+                    // Before trying to resolve, tell the resolver state to
+                    // merge all fragments into their hosts.
+                    try
+                    {
+                        m_resolverState.mergeFragments(null);
+                    }
+                    catch (Exception ex)
+                    {
+                        ex.printStackTrace();
+                        throw new ResolveException("Unable to merge fragments", importer, null);
+                    }
+
                     Object[] result = m_resolver.resolveDynamicImport(m_resolverState, importer, pkgName);
                     if (result != null)
                     {
diff --git a/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java b/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
index 88894d7..c3dad18 100644
--- a/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
+++ b/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
@@ -24,7 +24,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import org.apache.felix.framework.ModuleImpl;
 import org.apache.felix.framework.searchpolicy.Resolver;
 import org.apache.felix.framework.searchpolicy.PackageSource;
 import org.apache.felix.framework.util.Util;
diff --git a/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java b/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java
index 1dca93d..3531402 100644
--- a/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java
+++ b/framework/src/main/java/org/apache/felix/framework/searchpolicy/Resolver.java
@@ -39,7 +39,6 @@
 import org.apache.felix.moduleloader.IModule;
 import org.apache.felix.moduleloader.IRequirement;
 import org.apache.felix.moduleloader.IWire;
-import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 
 public class Resolver