diff options
-rwxr-xr-x | extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java | 6 | ||||
-rwxr-xr-x | extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java | 16 |
2 files changed, 21 insertions, 1 deletions
diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java index cde1f777..0022c5de 100755 --- a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java +++ b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider.java @@ -209,8 +209,12 @@ public class FactoryProvider<F, R> implements Provider<F> { InvocationHandler invocationHandler = new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] creationArgs) throws Throwable { + // pass methods from Object.class to the proxy + if (method.getDeclaringClass().equals(Object.class)) { + return method.invoke(this, creationArgs); + } + AssistedConstructor<?> constructor = factoryMethodToConstructor.get(method); - Object[] constructorArgs = gatherArgsForConstructor( constructor, creationArgs); Object objectToReturn = constructor.newInstance(constructorArgs); diff --git a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java index 0ca95d91..23b5b4f8 100755 --- a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java +++ b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProviderTest.java @@ -518,6 +518,22 @@ public class FactoryProviderTest extends TestCase { "Parameter of type 'double' is not injectable or annotated with @Assisted"); } } + + public void testMethodsDeclaredInObject() { + Injector injector = Guice.createInjector(new AbstractModule() { + @Override protected void configure() { + bind(Double.class).toInstance(5.0d); + bind(ColoredCarFactory.class) + .toProvider(FactoryProvider.newFactory(ColoredCarFactory.class, Mustang.class)); + } + }); + + ColoredCarFactory carFactory = injector.getInstance(ColoredCarFactory.class); + + carFactory.equals(carFactory); + carFactory.hashCode(); + carFactory.toString(); + } // TODO(jessewilson): test for duplicate constructors }
\ No newline at end of file |