1 /** 2 * Copyright (C) 2015 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.inject.multibindings; 18 19 import static java.lang.annotation.ElementType.METHOD; 20 import static java.lang.annotation.RetentionPolicy.RUNTIME; 21 22 import com.google.inject.Module; 23 24 import java.lang.annotation.Documented; 25 import java.lang.annotation.Retention; 26 import java.lang.annotation.Target; 27 28 /** 29 * Annotates methods of a {@link Module} to add items to a {@link Multibinder}. 30 * The method's return type and binding annotation determines what Optional this will 31 * contribute to. For example, 32 * 33 * <pre> 34 * {@literal @}ProvidesIntoOptional(DEFAULT) 35 * {@literal @}Named("url") 36 * String provideFooUrl(FooManager fm) { returm fm.getUrl(); } 37 * 38 * {@literal @}ProvidesIntoOptional(ACTUAL) 39 * {@literal @}Named("url") 40 * String provideBarUrl(BarManager bm) { return bm.getUrl(); } 41 * </pre> 42 * 43 * will set the default value of {@code @Named("url") Optional<String>} to foo's URL, 44 * and then override it to bar's URL. 45 * 46 * @author sameb (at) google.com (Sam Berlin) 47 * @since 4.0 48 */ 49 @Documented 50 @Target(METHOD) 51 @Retention(RUNTIME) 52 public @interface ProvidesIntoOptional { 53 /** 54 * @since 4.0 55 */ 56 enum Type { 57 /** Corresponds to {@link OptionalBinder#setBinding}. */ 58 ACTUAL, 59 60 /** Corresponds to {@link OptionalBinder#setDefault}. */ 61 DEFAULT 62 } 63 64 /** Specifies if the binding is for the actual or default value. */ 65 Type value(); 66 } 67