Changes from Isaac Shum that change the bindings for ServletRequest and ServletResponse to be chained to their HTTP counterparts rather than to be both bound directly to the same provider.

Also changing those bindings to be scoped appropriately.

And finally, changing much of servlet module to leverage provider methods. This cleanup is cosmetic.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@995 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/servlet/src/com/google/inject/servlet/InternalServletModule.java b/servlet/src/com/google/inject/servlet/InternalServletModule.java
index 10e8170..c58ca99 100644
--- a/servlet/src/com/google/inject/servlet/InternalServletModule.java
+++ b/servlet/src/com/google/inject/servlet/InternalServletModule.java
@@ -1,17 +1,16 @@
 package com.google.inject.servlet;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.Provider;
-import com.google.inject.TypeLiteral;
+import com.google.inject.Provides;
 import static com.google.inject.servlet.ServletScopes.REQUEST;
 import static com.google.inject.servlet.ServletScopes.SESSION;
+import java.util.Map;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletContext;
-import java.util.Map;
 
 /**
  * This is a left-factoring of all ServletModules installed in the system.
@@ -24,73 +23,10 @@
 
   @Override
   protected void configure() {
-    // Scopes.
     bindScope(RequestScoped.class, REQUEST);
     bindScope(SessionScoped.class, SESSION);
-
-    // Bind request.
-    Provider<HttpServletRequest> requestProvider =
-        new Provider<HttpServletRequest>() {
-          public HttpServletRequest get() {
-            return GuiceFilter.getRequest();
-          }
-
-          public String toString() {
-            return "RequestProvider";
-          }
-        };
-    bind(HttpServletRequest.class).toProvider(requestProvider);
-    bind(ServletRequest.class).toProvider(requestProvider);
-
-    // Bind response.
-    Provider<HttpServletResponse> responseProvider =
-        new Provider<HttpServletResponse>() {
-          public HttpServletResponse get() {
-            return GuiceFilter.getResponse();
-          }
-
-          public String toString() {
-            return "ResponseProvider";
-          }
-        };
-    bind(HttpServletResponse.class).toProvider(responseProvider);
-    bind(ServletResponse.class).toProvider(responseProvider);
-
-    // Bind session.
-    bind(HttpSession.class).toProvider(new Provider<HttpSession>() {
-      public HttpSession get() {
-        return GuiceFilter.getRequest().getSession();
-      }
-
-      public String toString() {
-        return "SessionProvider";
-      }
-    });
-
-    // Bind servlet context.
-    bind(ServletContext.class).toProvider(new Provider<ServletContext>() {
-      public ServletContext get() {
-        return GuiceFilter.getServletContext();
-      }
-
-      public String toString() {
-        return "ServletContextProvider";
-      }
-    });
-
-    // Bind request parameters.
-    bind(new TypeLiteral<Map<String, String[]>>() {})
-        .annotatedWith(RequestParameters.class)
-        .toProvider(new Provider<Map<String, String[]>>() {
-              @SuppressWarnings({"unchecked"})
-              public Map<String, String[]> get() {
-                return GuiceFilter.getRequest().getParameterMap();
-              }
-
-              public String toString() {
-                return "RequestParametersProvider";
-              }
-            });
+    bind(ServletRequest.class).to(HttpServletRequest.class);
+    bind(ServletResponse.class).to(HttpServletResponse.class);
 
     // inject the pipeline into GuiceFilter so it can route requests correctly
     // Unfortunate staticness... =(
@@ -100,6 +36,27 @@
     bind(FilterPipeline.class).to(ManagedFilterPipeline.class).asEagerSingleton();
   }
 
+  @Provides @RequestScoped HttpServletRequest provideHttpServletRequest() {
+    return GuiceFilter.getRequest();
+  }
+
+  @Provides @RequestScoped HttpServletResponse provideHttpServletResponse() {
+    return GuiceFilter.getResponse();
+  }
+
+  @Provides HttpSession provideHttpSession() {
+    return GuiceFilter.getRequest().getSession();
+  }
+
+  @Provides ServletContext provideServletContext() {
+    return GuiceFilter.getServletContext();
+  }
+
+  @SuppressWarnings({"unchecked"})
+  @Provides @RequestScoped @RequestParameters Map<String, String[]> provideRequestParameters() {
+    return GuiceFilter.getRequest().getParameterMap();
+  }
+
   @Override
   public boolean equals(Object o) {
     // Is only ever installed internally, so we don't need to check state.