[jboss-cvs] JBossAS SVN: r75680 - projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 11 07:06:04 EDT 2008


Author: alesj
Date: 2008-07-11 07:06:04 -0400 (Fri, 11 Jul 2008)
New Revision: 75680

Modified:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java
Log:
Optimize search - only check related controllers.

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java	2008-07-11 11:00:53 UTC (rev 75679)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java	2008-07-11 11:06:04 UTC (rev 75680)
@@ -96,19 +96,45 @@
        */
       private AbstractController findMatchingScopedController(AbstractController current)
       {
+         boolean related = true; // by default it's related
+
          if (current instanceof ScopedController)
          {
             ScopedController scopedController = (ScopedController)current;
-            if (scopeKey.equals(scopedController.getScopeKey()))
-               return current;
+            ScopeKey key = scopedController.getScopeKey();
+            // see if this is even related, so that we don't go fwd for nothing
+            if (key != null)
+            {
+               // exact match
+               if (scopeKey.equals(key))
+                  return current;
+
+               related = false; // we have key, should prove that it's related
+               ScopeKey ck = scopeKey;
+               int keySize = key.getScopes().size();
+               int ckSize = ck.getScopes().size();
+               while(ck != null && keySize < ckSize)
+               {
+                  if (key.isParent(ck))
+                  {
+                     related = true;
+                     break;
+                  }
+                  ck = ck.getParent();
+                  ckSize--;
+               }
+            }
          }
 
-         Set<AbstractController> children = current.getControllers();
-         for (AbstractController child : children)
+         if (related)
          {
-            AbstractController found = findMatchingScopedController(child);
-            if (found != null)
-               return found;
+            Set<AbstractController> children = current.getControllers();
+            for (AbstractController child : children)
+            {
+               AbstractController found = findMatchingScopedController(child);
+               if (found != null)
+                  return found;
+            }
          }
 
          return null;




More information about the jboss-cvs-commits mailing list