Make ServletModule work with requireExplicitBinding().
Revision created by MOE tool push_codebase.
MOE_MIGRATION=3207
git-svn-id: https://google-guice.googlecode.com/svn/trunk@1581 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java b/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
index cbbc912..c0a9669 100644
--- a/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
+++ b/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
@@ -91,6 +91,7 @@
bind(FilterPipeline.class).to(ManagedFilterPipeline.class).asEagerSingleton();
bind(ServletContext.class).toProvider(BackwardsCompatibleServletContextProvider.class);
+ bind(BackwardsCompatibleServletContextProvider.class);
}
@Provides @RequestScoped HttpServletRequest provideHttpServletRequest() {
diff --git a/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java b/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java
index 2e5c693..e6ca1cf 100644
--- a/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java
+++ b/extensions/servlet/test/com/google/inject/servlet/ExtensionSpiTest.java
@@ -37,22 +37,22 @@
/**
* A very basic test that servletmodule works with bindings.
- *
+ *
* @author sameb@google.com (Sam Berlin)
*/
public class ExtensionSpiTest extends TestCase {
-
+
private DummyFilterImpl dummyFilter1 = new DummyFilterImpl();
private DummyFilterImpl dummyFilter2 = new DummyFilterImpl();
private DummyFilterImpl dummyFilter3 = new DummyFilterImpl();
private DummyFilterImpl dummyFilter4 = new DummyFilterImpl();
-
+
private DummyServlet dummyServlet1 = new DummyServlet();
private DummyServlet dummyServlet2 = new DummyServlet();
private DummyServlet dummyServlet3 = new DummyServlet();
private DummyServlet dummyServlet4 = new DummyServlet();
-
- public final void testSpiOnElements() {
+
+ public final void testSpiOnElements() {
ServletSpiVisitor visitor = new ServletSpiVisitor(false);
int count = 0;
for(Element element : Elements.getElements(new Module())) {
@@ -62,7 +62,7 @@
}
validateVisitor(visitor);
}
-
+
public final void testSpiOnInjector() {
ServletSpiVisitor visitor = new ServletSpiVisitor(true);
int count = 0;
@@ -72,10 +72,10 @@
}
validateVisitor(visitor);
}
-
+
private void validateVisitor(ServletSpiVisitor visitor) {
assertEquals(48, visitor.currentCount - visitor.otherCount);
-
+
// This is the expected param list, in order..
List<Params> expected = ImmutableList.of(
new Params("/class", Key.get(DummyFilterImpl.class), ImmutableMap.of(), SERVLET),
@@ -90,7 +90,7 @@
new Params("/key/keyvalues/2", Key.get(DummyFilterImpl.class, Names.named("foo")), ImmutableMap.of("key", "value"), SERVLET),
new Params("/instance/keyvalues", dummyFilter2, ImmutableMap.of("key", "value"), SERVLET),
new Params("/instance/keyvalues/2", dummyFilter2, ImmutableMap.of("key", "value"), SERVLET),
-
+
new Params("/class[0-9]", Key.get(DummyFilterImpl.class), ImmutableMap.of(), REGEX),
new Params("/class[0-9]/2", Key.get(DummyFilterImpl.class), ImmutableMap.of(), REGEX),
new Params("/key[0-9]", Key.get(DummyFilterImpl.class, Names.named("foo")), ImmutableMap.of(), REGEX),
@@ -103,7 +103,7 @@
new Params("/key[0-9]/keyvalues/2", Key.get(DummyFilterImpl.class, Names.named("foo")), ImmutableMap.of("key", "value"), REGEX),
new Params("/instance[0-9]/keyvalues", dummyFilter4, ImmutableMap.of("key", "value"), REGEX),
new Params("/instance[0-9]/keyvalues/2", dummyFilter4, ImmutableMap.of("key", "value"), REGEX),
-
+
new Params("/class", Key.get(DummyServlet.class), ImmutableMap.of(), SERVLET),
new Params("/class/2", Key.get(DummyServlet.class), ImmutableMap.of(), SERVLET),
new Params("/key", Key.get(DummyServlet.class, Names.named("foo")), ImmutableMap.of(), SERVLET),
@@ -116,7 +116,7 @@
new Params("/key/keyvalues/2", Key.get(DummyServlet.class, Names.named("foo")), ImmutableMap.of("key", "value"), SERVLET),
new Params("/instance/keyvalues", dummyServlet2, ImmutableMap.of("key", "value"), SERVLET),
new Params("/instance/keyvalues/2", dummyServlet2, ImmutableMap.of("key", "value"), SERVLET),
-
+
new Params("/class[0-9]", Key.get(DummyServlet.class), ImmutableMap.of(), REGEX),
new Params("/class[0-9]/2", Key.get(DummyServlet.class), ImmutableMap.of(), REGEX),
new Params("/key[0-9]", Key.get(DummyServlet.class, Names.named("foo")), ImmutableMap.of(), REGEX),
@@ -130,7 +130,7 @@
new Params("/instance[0-9]/keyvalues", dummyServlet4, ImmutableMap.of("key", "value"), REGEX),
new Params("/instance[0-9]/keyvalues/2", dummyServlet4, ImmutableMap.of("key", "value"), REGEX)
);
-
+
assertEquals(expected.size(), visitor.actual.size());
Iterator<Params> actualIterator = visitor.actual.iterator();
int i = 0;
@@ -142,6 +142,8 @@
private class Module extends ServletModule {
@Override
protected void configureServlets() {
+ binder().requireExplicitBindings();
+
filter("/class", "/class/2").through(DummyFilterImpl.class);
filter("/key", "/key/2").through(
Key.get(DummyFilterImpl.class, Names.named("foo")));
@@ -186,6 +188,5 @@
serveRegex("/instance[0-9]/keyvalues", "/instance[0-9]/keyvalues/2").with(
dummyServlet4, ImmutableMap.of("key", "value"));
}
- };
-
+ }
}
diff --git a/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java b/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java
index c155cf3..cddb85d 100644
--- a/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java
+++ b/extensions/servlet/test/com/google/inject/servlet/ServletSpiVisitor.java
@@ -42,49 +42,50 @@
/**
* A visitor for testing the servlet SPI extension.
- *
+ *
* @author sameb@google.com (Sam Berlin)
*/
class ServletSpiVisitor
extends DefaultBindingTargetVisitor<Object, Integer>
implements ServletModuleTargetVisitor<Object, Integer> {
-
+
int otherCount = 0;
int currentCount = 0;
List<Params> actual = Lists.newArrayList();
-
+
/* The set of classes that are allowed to be "other" bindings. */
Set<Class> allowedClasses;
-
+
ServletSpiVisitor(boolean forInjector) {
ImmutableSet.Builder<Class> builder = ImmutableSet.builder();
// always ignore these things...
builder.add(ServletRequest.class,
ServletResponse.class, ManagedFilterPipeline.class, ManagedServletPipeline.class,
FilterPipeline.class, ServletContext.class, HttpServletRequest.class, Filter.class,
- HttpServletResponse.class, HttpSession.class, Map.class, HttpServlet.class);
+ HttpServletResponse.class, HttpSession.class, Map.class, HttpServlet.class,
+ InternalServletModule.BackwardsCompatibleServletContextProvider.class);
if(forInjector) {
// only ignore these if this is for the live injector, any other time it'd be an error!
builder.add(Injector.class, Stage.class, Logger.class);
}
this.allowedClasses = builder.build();
}
-
+
public Integer visit(InstanceFilterBinding binding) {
actual.add(new Params(binding, binding.getFilterInstance()));
return currentCount++;
}
-
+
public Integer visit(InstanceServletBinding binding) {
actual.add(new Params(binding, binding.getServletInstance()));
return currentCount++;
}
-
+
public Integer visit(LinkedFilterBinding binding) {
actual.add(new Params(binding, binding.getLinkedKey()));
return currentCount++;
}
-
+
public Integer visit(LinkedServletBinding binding) {
actual.add(new Params(binding, binding.getLinkedKey()));
return currentCount++;
@@ -98,27 +99,27 @@
otherCount++;
return currentCount++;
}
-
+
static class Params {
private final String pattern;
private final Object keyOrInstance;
private final Map<String, String> params;
private final UriPatternType patternType;
-
+
Params(ServletModuleBinding binding, Object keyOrInstance) {
this.pattern = binding.getPattern();
this.keyOrInstance = keyOrInstance;
this.params = binding.getInitParams();
this.patternType = binding.getUriPatternType();
}
-
+
Params(String pattern, Object keyOrInstance, Map params, UriPatternType patternType) {
this.pattern = pattern;
this.keyOrInstance = keyOrInstance;
this.params = params;
this.patternType = patternType;
}
-
+
@Override
public boolean equals(Object obj) {
if(obj instanceof Params) {
@@ -136,7 +137,7 @@
public int hashCode() {
return Objects.hashCode(pattern, keyOrInstance, params, patternType);
}
-
+
@Override
public String toString() {
return Objects.toStringHelper(Params.class)