Implemented a filter index that speeds up aspects.
Some bugfixes.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1095365 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
index 5ac4974..07ec03a 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
@@ -35,6 +35,7 @@
 import org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl;
 import org.apache.felix.dm.impl.dependencies.TemporalServiceDependencyImpl;
 import org.apache.felix.dm.impl.metatype.PropertyMetaDataImpl;
+import org.apache.felix.dm.index.AspectFilterIndex;
 import org.apache.felix.dm.index.MultiPropertyExactFilter;
 import org.apache.felix.dm.index.ServiceRegistryCache;
 import org.osgi.framework.BundleContext;
@@ -78,13 +79,18 @@
     private static ServiceRegistryCache m_serviceRegistryCache;
     static {
         String index = System.getProperty(SERVICEREGISTRY_CACHE_INDICES);
-        m_serviceRegistryCache = new ServiceRegistryCache(FrameworkUtil.getBundle(DependencyManager.class).getBundleContext());
-        m_serviceRegistryCache.open(); // TODO close it somewhere
         if (index != null) {
+            m_serviceRegistryCache = new ServiceRegistryCache(FrameworkUtil.getBundle(DependencyManager.class).getBundleContext());
+            m_serviceRegistryCache.open(); // TODO close it somewhere
             String[] props = index.split(";");
             for (int i = 0; i < props.length; i++) {
-                String[] propList = props[i].split(",");
-                m_serviceRegistryCache.addFilterIndex(new MultiPropertyExactFilter(propList));
+                if (props[i].equals("*aspect*")) {
+                    m_serviceRegistryCache.addFilterIndex(new AspectFilterIndex());
+                }
+                else {
+                    String[] propList = props[i].split(",");
+                    m_serviceRegistryCache.addFilterIndex(new MultiPropertyExactFilter(propList));
+                }
 //                System.out.println("DM: Creating index on " + props[i]);
             }
         }