Improved array shrinking algorithm.


git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@420900 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java b/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
index 5e74629..51bf370 100755
--- a/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
+++ b/org.apache.felix.framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
@@ -1549,30 +1549,25 @@
             return m_emptyModules;
         }
 
-        int count = 0;
+        // Move all non-null values to one end of the array.
+        int lower = 0;
         for (int i = 0; i < modules.length; i++)
         {
-            if (modules[i] == null)
+            if (modules[i] != null)
             {
-                count++;
+                modules[lower++] = modules[i];
             }
         }
 
-        if (count > 0)
+        if (lower == 0)
         {
-            IModule[] newModules = new IModule[modules.length - count];
-            count = 0;
-            for (int i = 0; i < modules.length; i++)
-            {
-                if (modules[i] != null)
-                {
-                    newModules[count++] = modules[i];
-                }
-            }
-            modules = newModules;
+            return m_emptyModules;
         }
 
-        return modules;
+        // Copy non-null values into a new array and return.
+        IModule[] newModules = new IModule[lower];
+        System.arraycopy(modules, 0, newModules, 0, lower);
+        return newModules;
     }
 
     //