Author: limpbizkit
Date: Sun Apr 26 14:00:24 2009
New Revision: 936
Modified:
trunk/src/com/google/inject/BindingProcessor.java
trunk/src/com/google/inject/internal/Errors.java
trunk/test/com/google/inject/spi/ProviderMethodsTest.java
Log:
Tests and fix for issue 340.
Modified: trunk/src/com/google/inject/BindingProcessor.java
==============================================================================
--- trunk/src/com/google/inject/BindingProcessor.java (original)
+++ trunk/src/com/google/inject/BindingProcessor.java Sun Apr 26 14:00:24
2009
@@ -28,6 +28,7 @@
import com.google.inject.internal.LinkedProviderBindingImpl;
import com.google.inject.internal.Lists;
import com.google.inject.internal.ProviderInstanceBindingImpl;
+import com.google.inject.internal.ProviderMethod;
import com.google.inject.internal.Scoping;
import com.google.inject.internal.UntargettedBindingImpl;
import com.google.inject.spi.BindingTargetVisitor;
@@ -66,7 +67,12 @@
final Object source = command.getSource();
if (Void.class.equals(command.getKey().getRawType())) {
- errors.missingConstantValues();
+ if (command instanceof ProviderInstanceBinding
+ && ((ProviderInstanceBinding) command).getProviderInstance()
instanceof ProviderMethod) {
+ errors.voidProviderMethod();
+ } else {
+ errors.missingConstantValues();
+ }
return true;
}
Modified: trunk/src/com/google/inject/internal/Errors.java
==============================================================================
--- trunk/src/com/google/inject/internal/Errors.java (original)
+++ trunk/src/com/google/inject/internal/Errors.java Sun Apr 26 14:00:24
2009
@@ -218,6 +218,10 @@
annotationType, scope);
}
+ public Errors voidProviderMethod() {
+ return addMessage("Provider methods must return a value. Do not return
void.");
+ }
+
public Errors missingConstantValues() {
return addMessage("Missing constant value. Please call to(...).");
}
Modified: trunk/test/com/google/inject/spi/ProviderMethodsTest.java
==============================================================================
--- trunk/test/com/google/inject/spi/ProviderMethodsTest.java (original)
+++ trunk/test/com/google/inject/spi/ProviderMethodsTest.java Sun Apr 26
14:00:24 2009
@@ -17,7 +17,7 @@
package com.google.inject.spi;
import com.google.inject.AbstractModule;
-import com.google.inject.Asserts;
+import static com.google.inject.Asserts.assertContains;
import com.google.inject.Binder;
import com.google.inject.BindingAnnotation;
import com.google.inject.CreationException;
@@ -190,7 +190,7 @@
});
fail();
} catch (CreationException expected) {
- Asserts.assertContains(expected.getMessage(),
+ assertContains(expected.getMessage(),
"more than one annotation annotated with
@BindingAnnotation:", "Named", "Blue",
"at " +
getClass().getName(), ".provideString(ProviderMethodsTest.java:");
}
@@ -352,5 +352,20 @@
Provider provider = binding.getProviderInstance();
assertEquals(ProviderMethod.class, provider.getClass());
assertEquals(methodsObject, ((ProviderMethod) provider).getInstance());
+ }
+
+ public void testVoidProviderMethods() {
+ try {
+ Guice.createInjector(new AbstractModule() {
+ protected void configure() {}
+
+ @Provides void provideFoo() {}
+ });
+ fail();
+ } catch (CreationException expected) {
+ assertContains(expected.getMessage(),
+ "1) Provider methods must return a value. Do not return void.",
+ getClass().getName(), ".provideFoo(ProviderMethodsTest.java:");
+ }
}
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en
-~----------~----~----~----~------~----~------~--~---