Issue 41: guice should never inject a null value.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@248 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/src/com/google/inject/InternalFactoryToProviderAdapter.java b/src/com/google/inject/InternalFactoryToProviderAdapter.java
index 2ffabea..94e6de8 100644
--- a/src/com/google/inject/InternalFactoryToProviderAdapter.java
+++ b/src/com/google/inject/InternalFactoryToProviderAdapter.java
@@ -16,19 +16,35 @@
 
 package com.google.inject;
 
+import com.google.inject.spi.SourceProviders;
+import com.google.inject.util.Objects;
+
 /**
  * @author crazybob@google.com (Bob Lee)
 */
 class InternalFactoryToProviderAdapter<T> implements InternalFactory<T> {
 
   private final Provider<? extends T> provider;
+  private final Object source;
 
   public InternalFactoryToProviderAdapter(Provider<? extends T> provider) {
-    this.provider = provider;
+    this(provider, SourceProviders.UNKNOWN_SOURCE);
+  }
+
+  public InternalFactoryToProviderAdapter(
+      Provider<? extends T> provider, Object source) {
+    this.provider = Objects.nonNull(provider, "provider");
+    this.source = Objects.nonNull(source, "source");
   }
   
   public T get(InternalContext context) {
-    return provider.get();
+    T provided = provider.get();
+    if (provided != null) {
+      return provided;
+    }
+    String message = String.format(ErrorMessages.NULL_PROVIDED, source);
+    throw new ProvisionException(context.getExternalContext(),
+        new NullPointerException(message));
   }
 
   public String toString() {