Guice Servlet now uses findBindingsByType. Should improve startup performance.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@816 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java b/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
index 3c6eed3..23491e3 100755
--- a/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
+++ b/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
@@ -26,7 +26,6 @@
 import java.io.IOException;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import javax.servlet.FilterChain;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletContext;
@@ -75,13 +74,11 @@
    */
   private List<FilterDefinition> collectFilterDefinitions(Injector injector) {
     List<FilterDefinition> filterDefinitions = Lists.newArrayList();
-    for (Map.Entry<Key<?>, Binding<?>> entry : injector.getBindings().entrySet()) {
-      if (FILTER_DEFS.equals(entry.getKey().getTypeLiteral())) {
+    for (Binding<?> entry : injector.findBindingsByType(FILTER_DEFS)) {
 
-        @SuppressWarnings("unchecked")
-        Key<List<FilterDefinition>> defsKey = (Key<List<FilterDefinition>>) entry.getKey();
-        filterDefinitions.addAll(injector.getInstance(defsKey));
-      }
+      @SuppressWarnings("unchecked") //guarded by findBindingsByType()
+      Key<List<FilterDefinition>> defsKey = (Key<List<FilterDefinition>>) entry.getKey();
+      filterDefinitions.addAll(injector.getInstance(defsKey));
     }
 
     return filterDefinitions;
diff --git a/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java b/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
index 14cceb9..466568f 100755
--- a/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
+++ b/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
@@ -25,7 +25,6 @@
 import java.io.IOException;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -58,13 +57,11 @@
    */
   private List<ServletDefinition> collectServletDefinitions(Injector injector) {
     List<ServletDefinition> servletDefinitions = Lists.newArrayList();
-    for (Map.Entry<Key<?>, Binding<?>> entry : injector.getBindings().entrySet()) {
-      if (SERVLET_DEFS.equals(entry.getKey().getTypeLiteral())) {
+    for (Binding<?> entry : injector.findBindingsByType(SERVLET_DEFS)) {
 
-        @SuppressWarnings("unchecked")
+        @SuppressWarnings("unchecked") //guarded by findBindingsByType()
         Key<List<ServletDefinition>> defsKey = (Key<List<ServletDefinition>>) entry.getKey();
         servletDefinitions.addAll(injector.getInstance(defsKey));
-      }
     }
 
     return servletDefinitions;
diff --git a/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java b/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
index f5b5d41..0b04931 100644
--- a/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
+++ b/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
@@ -33,6 +33,7 @@
 import javax.servlet.http.HttpServletResponse;
 import junit.framework.TestCase;
 import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
 import static org.easymock.EasyMock.replay;
@@ -78,18 +79,19 @@
     expect(injector.getInstance(HTTP_SERLVET_KEY))
         .andReturn(mockServlet);
 
+
     final Key<List<ServletDefinition>> servetDefsKey = Key
         .get(new TypeLiteral<List<ServletDefinition>>() {});
-    expect(injector.getBindings())
-        .andReturn(new HashMap<Key<?>, Binding<?>>() {{
 
-          put(servetDefsKey, createMock(Binding.class));
-        }});
+    Binding mockBinding = createMock(Binding.class);
+    expect(mockBinding.getKey()).andReturn(servetDefsKey);
+    expect(injector.findBindingsByType(eq(servetDefsKey.getTypeLiteral())))
+        .andReturn(ImmutableList.<Binding<List<ServletDefinition>>>of(mockBinding));
 
     expect(injector.getInstance(servetDefsKey))
         .andReturn(ImmutableList.of(servletDefinition));
 
-    replay(injector, mockRequest);
+    replay(injector, mockRequest, mockBinding);
 
     // Have to init the Servlet before we can dispatch to it.
     servletDefinition.init(null, injector);
@@ -103,7 +105,7 @@
 
     assertTrue("Include did not dispatch to our servlet!", run[0]);
 
-    verify(injector, mockRequest);
+    verify(injector, mockRequest, mockBinding);
   }
 
   public final void testForwardToManagedServlet() throws IOException, ServletException {
@@ -144,16 +146,16 @@
 
     final Key<List<ServletDefinition>> servetDefsKey = Key
         .get(new TypeLiteral<List<ServletDefinition>>() {});
-    expect(injector.getBindings())
-        .andReturn(new HashMap<Key<?>, Binding<?>>() {{
 
-          put(servetDefsKey, createMock(Binding.class));
-        }});
+    Binding mockBinding = createMock(Binding.class);
+    expect(mockBinding.getKey()).andReturn(servetDefsKey);
+    expect(injector.findBindingsByType(eq(servetDefsKey.getTypeLiteral())))
+        .andReturn(ImmutableList.<Binding<List<ServletDefinition>>>of(mockBinding));
 
     expect(injector.getInstance(servetDefsKey))
         .andReturn(ImmutableList.of(servletDefinition));
 
-    replay(injector, mockRequest, mockResponse);
+    replay(injector, mockRequest, mockResponse, mockBinding);
 
     // Have to init the Servlet before we can dispatch to it.
     servletDefinition.init(null, injector);
@@ -166,7 +168,7 @@
 
     assertTrue("Include did not dispatch to our servlet!", run[0]);
 
-    verify(injector, mockRequest, mockResponse);
+    verify(injector, mockRequest, mockResponse, mockBinding);
   }
 
   public final void testForwardToManagedServletFailureOnCommittedBuffer()
@@ -214,16 +216,16 @@
 
     final Key<List<ServletDefinition>> servetDefsKey = Key
         .get(new TypeLiteral<List<ServletDefinition>>() {});
-    expect(injector.getBindings())
-        .andReturn(new HashMap<Key<?>, Binding<?>>() {{
 
-          put(servetDefsKey, createMock(Binding.class));
-        }});
+    Binding mockBinding = createMock(Binding.class);
+    expect(mockBinding.getKey()).andReturn(servetDefsKey);
+    expect(injector.findBindingsByType(eq(servetDefsKey.getTypeLiteral())))
+        .andReturn(ImmutableList.<Binding<List<ServletDefinition>>>of(mockBinding));
 
     expect(injector.getInstance(servetDefsKey))
         .andReturn(ImmutableList.of(servletDefinition));
 
-    replay(injector, mockRequest, mockResponse);
+    replay(injector, mockRequest, mockResponse, mockBinding);
 
     // Have to init the Servlet before we can dispatch to it.
     servletDefinition.init(null, injector);
@@ -237,7 +239,7 @@
       dispatcher.forward(mockRequest, mockResponse);
     }
     finally {
-      verify(injector, mockRequest, mockResponse);
+      verify(injector, mockRequest, mockResponse, mockBinding);
     }
 
   }