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() {