Fixed infinite recursion in Injector.toString().
git-svn-id: https://google-guice.googlecode.com/svn/trunk@364 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/guice.ipr b/guice.ipr
index c76bd5c..9324bc7 100644
--- a/guice.ipr
+++ b/guice.ipr
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project version="4" relativePaths="true">
+<project version="4" relativePaths="false">
<component name="AntConfiguration">
<defaultAnt bundledAnt="true" />
<buildFile url="file://$PROJECT_DIR$/build.xml">
diff --git a/src/com/google/inject/BinderImpl.java b/src/com/google/inject/BinderImpl.java
index a2444fb..34299b3 100644
--- a/src/com/google/inject/BinderImpl.java
+++ b/src/com/google/inject/BinderImpl.java
@@ -271,7 +271,10 @@
proxyFactoryBuilder.create(), bindings, scopes);
// Create default bindings.
- bind(Injector.class, SourceProviders.UNKNOWN_SOURCE).toInstance(injector);
+ // We use toProvider() instead of toInstance() to avoid infinite recursion
+ // in toString().
+ bind(Injector.class, SourceProviders.UNKNOWN_SOURCE)
+ .toProvider(new InjectorProvider(injector));
injector.setErrorHandler(configurationErrorHandler);
@@ -603,4 +606,21 @@
return "Provider<Logger>";
}
}
+
+ static class InjectorProvider implements Provider<Injector> {
+
+ final Injector injector;
+
+ InjectorProvider(Injector injector) {
+ this.injector = injector;
+ }
+
+ public Injector get() {
+ return injector;
+ }
+
+ public String toString() {
+ return "Provider<Injector>";
+ }
+ }
}
diff --git a/test/com/google/inject/InjectorTest.java b/test/com/google/inject/InjectorTest.java
index 23d13ce..06d2974 100644
--- a/test/com/google/inject/InjectorTest.java
+++ b/test/com/google/inject/InjectorTest.java
@@ -34,6 +34,10 @@
@Retention(RUNTIME)
@BindingAnnotation @interface I {}
+ public void testToStringDoesNotInfinitelyRecurse() {
+ Guice.createInjector().toString();
+ }
+
public void testProviderMethods() throws CreationException {
SampleSingleton singleton = new SampleSingleton();
SampleSingleton other = new SampleSingleton();