public static <T> RealOptionalBinder<T> newRealOptionalBinder(Binder binder, Key<T> type) { binder = binder.skipSources(RealOptionalBinder.class); RealOptionalBinder<T> optionalBinder = new RealOptionalBinder<>(binder, type); binder.install(optionalBinder); return optionalBinder; }
/** * Returns the key to use for the actual binding, overrides the default if set. * * <p>As a side effect this installs support for the 'direct type', so a binding for {@code T} * will be made available. */ Key<T> getKeyForActualBinding() { bindingSelection.checkNotInitialized(); addDirectTypeBinding(binder); return bindingSelection.getKeyForActualBinding(); }
new RealOptionalProviderProvider<T>(bindingSelection); binder .bind(key.ofType(optionalOfProvider(key.getTypeLiteral()))) .toProvider(optionalProviderFactory); (InternalProviderInstanceBindingImpl.Factory) optionalProviderFactory; binder .bind(key.ofType(optionalOfJavaxProvider(key.getTypeLiteral()))) .toProvider(optionalJavaxProviderFactory); Key<Optional<T>> optionalKey = key.ofType(optionalOf(key.getTypeLiteral())); binder .bind(optionalKey) bindJava8Optional(binder);
@SuppressWarnings("unchecked") private void bindJava8Optional(Binder binder) { if (JAVA_OPTIONAL_CLASS != null) { Key<?> key = bindingSelection.getDirectKey(); TypeLiteral<?> typeLiteral = key.getTypeLiteral(); InternalProviderInstanceBindingImpl.Factory<Object> javaOptionalProviderFactory = new JavaOptionalProviderProvider(bindingSelection); binder .bind(key.ofType(javaOptionalOfProvider(typeLiteral))) .toProvider((Provider) javaOptionalProviderFactory); // Provider is assignable to javax.inject.Provider and the provider that the factory contains // cannot be modified so we can use some rawtypes hackery to share the same implementation. binder .bind(key.ofType(javaOptionalOfJavaxProvider(typeLiteral))) .toProvider((Provider) javaOptionalProviderFactory); Key<?> javaOptionalKey = key.ofType(javaOptionalOf(typeLiteral)); binder .bind(javaOptionalKey) .toProvider(new JavaOptionalProvider(bindingSelection, javaOptionalKey)); } }
return RealOptionalBinder.newRealOptionalBinder(binder, key).getKeyForDefaultBinding(); case ACTUAL: return RealOptionalBinder.newRealOptionalBinder(binder, key).getKeyForActualBinding();
/** * Returns java.util.Optional.empty() if the parameter is null, calls {@link * #invokeJavaOptionalOf} otherwise. */ private static Object invokeJavaOptionalOfNullable(Object o) { if (o == null) { return JAVA_OPTIONAL_EMPTY; } return invokeJavaOptionalOf(o); }
@Override public int hashCode() { return delegate.hashCode(); } }
@Override public boolean equals(Object obj) { if (obj instanceof OptionalBinder) { return delegate.equals(((OptionalBinder<?>) obj).delegate); } return false; }
public LinkedBindingBuilder<T> setDefault() { return binder.bind(getKeyForDefaultBinding()); }
public LinkedBindingBuilder<T> setBinding() { return binder.bind(getKeyForActualBinding()); }
@SuppressWarnings("unchecked") private void bindJava8Optional(Binder binder) { if (JAVA_OPTIONAL_CLASS != null) { Key<?> key = bindingSelection.getDirectKey(); TypeLiteral<?> typeLiteral = key.getTypeLiteral(); InternalProviderInstanceBindingImpl.Factory<Object> javaOptionalProviderFactory = new JavaOptionalProviderProvider(bindingSelection); binder .bind(key.ofType(javaOptionalOfProvider(typeLiteral))) .toProvider((Provider) javaOptionalProviderFactory); // Provider is assignable to javax.inject.Provider and the provider that the factory contains // cannot be modified so we can use some rawtypes hackery to share the same implementation. binder .bind(key.ofType(javaOptionalOfJavaxProvider(typeLiteral))) .toProvider((Provider) javaOptionalProviderFactory); Key<?> javaOptionalKey = key.ofType(javaOptionalOf(typeLiteral)); binder .bind(javaOptionalKey) .toProvider(new JavaOptionalProvider(bindingSelection, javaOptionalKey)); } }
return RealOptionalBinder.newRealOptionalBinder(binder, key).getKeyForDefaultBinding(); case ACTUAL: return RealOptionalBinder.newRealOptionalBinder(binder, key).getKeyForActualBinding();
/** * Returns java.util.Optional.empty() if the parameter is null, calls {@link * #invokeJavaOptionalOf} otherwise. */ private static Object invokeJavaOptionalOfNullable(Object o) { if (o == null) { return JAVA_OPTIONAL_EMPTY; } return invokeJavaOptionalOf(o); }
@Override public int hashCode() { return delegate.hashCode(); } }
@Override public boolean equals(Object obj) { if (obj instanceof OptionalBinder) { return delegate.equals(((OptionalBinder<?>) obj).delegate); } return false; }
public LinkedBindingBuilder<T> setDefault() { return binder.bind(getKeyForDefaultBinding()); }
public LinkedBindingBuilder<T> setBinding() { return binder.bind(getKeyForActualBinding()); }
new RealOptionalProviderProvider<T>(bindingSelection); binder .bind(key.ofType(optionalOfProvider(key.getTypeLiteral()))) .toProvider(optionalProviderFactory); (InternalProviderInstanceBindingImpl.Factory) optionalProviderFactory; binder .bind(key.ofType(optionalOfJavaxProvider(key.getTypeLiteral()))) .toProvider(optionalJavaxProviderFactory); Key<Optional<T>> optionalKey = key.ofType(optionalOf(key.getTypeLiteral())); binder .bind(optionalKey) bindJava8Optional(binder);
@SuppressWarnings("unchecked") private void bindJava8Optional(Binder binder) { if (JAVA_OPTIONAL_CLASS != null) { Key<?> key = bindingSelection.getDirectKey(); TypeLiteral<?> typeLiteral = key.getTypeLiteral(); InternalProviderInstanceBindingImpl.Factory<Object> javaOptionalProviderFactory = new JavaOptionalProviderProvider(bindingSelection); binder .bind(key.ofType(javaOptionalOfProvider(typeLiteral))) .toProvider((Provider) javaOptionalProviderFactory); // Provider is assignable to javax.inject.Provider and the provider that the factory contains // cannot be modified so we can use some rawtypes hackery to share the same implementation. binder .bind(key.ofType(javaOptionalOfJavaxProvider(typeLiteral))) .toProvider((Provider) javaOptionalProviderFactory); Key<?> javaOptionalKey = key.ofType(javaOptionalOf(typeLiteral)); binder .bind(javaOptionalKey) .toProvider(new JavaOptionalProvider(bindingSelection, javaOptionalKey)); } }
return RealOptionalBinder.newRealOptionalBinder(binder, key).getKeyForDefaultBinding(); case ACTUAL: return RealOptionalBinder.newRealOptionalBinder(binder, key).getKeyForActualBinding();