Lines Matching full:provider
21 import javax.inject.Provider;
24 * A {@link Provider} implementation that memoizes the result of another {@link Provider} using
27 public final class SingleCheck<T> implements Provider<T> {
30 private volatile Provider<T> provider; field in SingleCheck
33 private SingleCheck(Provider<T> provider) { in SingleCheck() argument
34 assert provider != null; in SingleCheck()
35 this.provider = provider; in SingleCheck()
38 @SuppressWarnings("unchecked") // cast only happens when result comes from the delegate provider
43 // provider is volatile and might become null after the check, so retrieve the provider first in get()
44 Provider<T> providerReference = provider; in get()
46 // The provider was null, so the instance must already be set in get()
52 // Null out the reference to the provider. We are never going to need it again, so we can in get()
54 provider = null; in get()
60 /** Returns a {@link Provider} that caches the value from the given delegate provider. */
61 // This method is declared this way instead of "<T> Provider<T> provider(Provider<T> provider)"
63 public static <P extends Provider<T>, T> Provider<T> provider(P provider) { in provider() method in SingleCheck
65 if (provider instanceof SingleCheck || provider instanceof DoubleCheck) { in provider()
66 return provider; in provider()
68 return new SingleCheck<T>(checkNotNull(provider)); in provider()