Home | History | Annotate | Download | only in producerstest
      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 package producerstest;
     17 
     18 import com.google.common.collect.ImmutableSet;
     19 import com.google.common.util.concurrent.Futures;
     20 import com.google.common.util.concurrent.ListenableFuture;
     21 import com.google.common.util.concurrent.SettableFuture;
     22 import dagger.producers.Produced;
     23 import dagger.producers.Producer;
     24 import dagger.producers.ProducerModule;
     25 import dagger.producers.Produces;
     26 import java.io.IOException;
     27 import java.util.Set;
     28 import javax.inject.Provider;
     29 import javax.inject.Qualifier;
     30 
     31 import static dagger.producers.Produces.Type.SET;
     32 import static dagger.producers.Produces.Type.SET_VALUES;
     33 
     34 /**
     35  * A module that contains various signatures of produces methods. This is not used in any
     36  * components.
     37  */
     38 @ProducerModule
     39 final class SimpleProducerModule {
     40   @Qualifier @interface Qual {
     41     int value();
     42   }
     43 
     44   // Unique bindings.
     45 
     46   @Produces
     47   @Qual(-2)
     48   static ListenableFuture<String> throwingProducer() {
     49     throw new RuntimeException("monkey");
     50   }
     51 
     52   @Produces
     53   @Qual(-1)
     54   static ListenableFuture<String> settableFutureStr(SettableFuture<String> future) {
     55     return future;
     56   }
     57 
     58   @Produces
     59   @Qual(0)
     60   static String str() {
     61     return "str";
     62   }
     63 
     64   @Produces
     65   @Qual(1)
     66   static ListenableFuture<String> futureStr() {
     67     return Futures.immediateFuture("future str");
     68   }
     69 
     70   @Produces
     71   @Qual(2)
     72   static String strWithArg(int i) {
     73     return "str with arg";
     74   }
     75 
     76   @Produces
     77   @Qual(3)
     78   static ListenableFuture<String> futureStrWithArg(int i) {
     79     return Futures.immediateFuture("future str with arg");
     80   }
     81 
     82   @Produces
     83   @Qual(4)
     84   static String strThrowingException() throws IOException {
     85     return "str throwing exception";
     86   }
     87 
     88   @Produces
     89   @Qual(5)
     90   static ListenableFuture<String> futureStrThrowingException() throws IOException {
     91     return Futures.immediateFuture("future str throwing exception");
     92   }
     93 
     94   @Produces
     95   @Qual(6)
     96   static String strWithArgThrowingException(int i) throws IOException {
     97     return "str with arg throwing exception";
     98   }
     99 
    100   @Produces
    101   @Qual(7)
    102   static ListenableFuture<String> futureStrWithArgThrowingException(int i) throws IOException {
    103     return Futures.immediateFuture("future str with arg throwing exception");
    104   }
    105 
    106   @Produces
    107   @Qual(8)
    108   static String strWithArgs(int i, Produced<Double> b, Producer<Object> c, Provider<Boolean> d) {
    109     return "str with args";
    110   }
    111 
    112   @Produces
    113   @Qual(9)
    114   static String strWithArgsThrowingException(
    115       int i, Produced<Double> b, Producer<Object> c, Provider<Boolean> d) throws IOException {
    116     return "str with args throwing exception";
    117   }
    118 
    119   @Produces
    120   @Qual(10)
    121   static ListenableFuture<String> futureStrWithArgs(
    122       int i, Produced<Double> b, Producer<Object> c, Provider<Boolean> d) {
    123     return Futures.immediateFuture("future str with args");
    124   }
    125 
    126   @Produces
    127   @Qual(11)
    128   static ListenableFuture<String> futureStrWithArgsThrowingException(
    129       int i, Produced<Double> b, Producer<Object> c, Provider<Boolean> d) throws IOException {
    130     return Futures.immediateFuture("str with args throwing exception");
    131   }
    132 
    133   // Set bindings.
    134 
    135   @Produces(type = SET)
    136   static String setOfStrElement() {
    137     return "set of str element";
    138   }
    139 
    140   @Produces(type = SET)
    141   static String setOfStrElementThrowingException() throws IOException {
    142     return "set of str element throwing exception";
    143   }
    144 
    145   @Produces(type = SET)
    146   static ListenableFuture<String> setOfStrFutureElement() {
    147     return Futures.immediateFuture("set of str element");
    148   }
    149 
    150   @Produces(type = SET)
    151   static ListenableFuture<String> setOfStrFutureElementThrowingException() throws IOException {
    152     return Futures.immediateFuture("set of str element throwing exception");
    153   }
    154 
    155   @Produces(type = SET)
    156   static String setOfStrElementWithArg(int i) {
    157     return "set of str element with arg";
    158   }
    159 
    160   @Produces(type = SET)
    161   static String setOfStrElementWithArgThrowingException(int i) throws IOException {
    162     return "set of str element with arg throwing exception";
    163   }
    164 
    165   @Produces(type = SET)
    166   static ListenableFuture<String> setOfStrFutureElementWithArg(int i) {
    167     return Futures.immediateFuture("set of str element with arg");
    168   }
    169 
    170   @Produces(type = SET)
    171   static ListenableFuture<String> setOfStrFutureElementWithArgThrowingException(int i)
    172       throws IOException {
    173     return Futures.immediateFuture("set of str element with arg throwing exception");
    174   }
    175 
    176   @Produces(type = SET_VALUES)
    177   static Set<String> setOfStrValues() {
    178     return ImmutableSet.of("set of str 1", "set of str 2");
    179   }
    180 
    181   @Produces(type = SET_VALUES)
    182   static Set<String> setOfStrValuesThrowingException() throws IOException {
    183     return ImmutableSet.of("set of str 1", "set of str 2 throwing exception");
    184   }
    185 
    186   @Produces(type = SET_VALUES)
    187   static ListenableFuture<Set<String>> setOfStrFutureValues() {
    188     return Futures.<Set<String>>immediateFuture(ImmutableSet.of("set of str 1", "set of str 2"));
    189   }
    190 
    191   @Produces(type = SET_VALUES)
    192   static ListenableFuture<Set<String>> setOfStrFutureValuesThrowingException() throws IOException {
    193     return Futures.<Set<String>>immediateFuture(
    194         ImmutableSet.of("set of str 1", "set of str 2 throwing exception"));
    195   }
    196 
    197   @Produces(type = SET_VALUES)
    198   static Set<String> setOfStrValuesWithArg(int i) {
    199     return ImmutableSet.of("set of str with arg 1", "set of str with arg 2");
    200   }
    201 
    202   @Produces(type = SET_VALUES)
    203   static Set<String> setOfStrValuesWithArgThrowingException(int i) throws IOException {
    204     return ImmutableSet.of("set of str with arg 1", "set of str with arg 2 throwing exception");
    205   }
    206 
    207   @Produces(type = SET_VALUES)
    208   static ListenableFuture<Set<String>> setOfStrFutureValuesWithArg(int i) {
    209     return Futures.<Set<String>>immediateFuture(
    210         ImmutableSet.of("set of str with arg 1", "set of str with arg 2"));
    211   }
    212 
    213   @Produces(type = SET_VALUES)
    214   static ListenableFuture<Set<String>> setOfStrFutureValuesWithArgThrowingException(int i)
    215       throws IOException {
    216     return Futures.<Set<String>>immediateFuture(
    217         ImmutableSet.of("set of str with arg 1", "set of str with arg 2 throwing exception"));
    218   }
    219 }
    220