You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
4.5 KiB
178 lines
4.5 KiB
/*
|
|
* Copyright (C) 2016 The Dagger Authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package dagger.functional.producers.binds;
|
|
|
|
import com.google.common.util.concurrent.MoreExecutors;
|
|
import dagger.Binds;
|
|
import dagger.Module;
|
|
import dagger.Provides;
|
|
import dagger.multibindings.ElementsIntoSet;
|
|
import dagger.multibindings.IntKey;
|
|
import dagger.multibindings.IntoMap;
|
|
import dagger.multibindings.IntoSet;
|
|
import dagger.producers.ProducerModule;
|
|
import dagger.producers.Produces;
|
|
import dagger.producers.Production;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.TreeSet;
|
|
import java.util.concurrent.Executor;
|
|
import javax.inject.Named;
|
|
import javax.inject.Qualifier;
|
|
import javax.inject.Singleton;
|
|
|
|
@ProducerModule(includes = {
|
|
SimpleBindingModule.ExecutorModule.class,
|
|
SimpleBindingModule.ProvisionModuleForMap.class
|
|
})
|
|
abstract class SimpleBindingModule {
|
|
@Binds
|
|
abstract Object bindObject(FooOfStrings impl);
|
|
|
|
@Binds
|
|
abstract Foo<String> bindFooOfStrings(FooOfStrings impl);
|
|
|
|
@Binds
|
|
abstract Foo<? extends Number> bindFooOfNumbers(Foo<Integer> fooOfIntegers);
|
|
|
|
@Binds
|
|
@Singleton
|
|
@SomeQualifier
|
|
abstract Foo<String> bindQualifiedFooOfStrings(FooOfStrings impl);
|
|
|
|
@Produces
|
|
static FooOfStrings produceFooOfStrings() {
|
|
return new FooOfStrings();
|
|
}
|
|
|
|
@Produces
|
|
static Foo<Integer> produceFooOfIntegers() {
|
|
return new Foo<Integer>() {};
|
|
}
|
|
|
|
@Produces
|
|
static Foo<Double> produceFooOfDoubles() {
|
|
return new Foo<Double>() {};
|
|
}
|
|
|
|
@Binds
|
|
@IntoSet
|
|
abstract Foo<? extends Number> bindFooOfIntegersIntoSet(Foo<Integer> fooOfIntegers);
|
|
|
|
@Binds
|
|
@IntoSet
|
|
abstract Foo<? extends Number> bindFooExtendsNumberIntoSet(Foo<Double> fooOfDoubles);
|
|
|
|
@Binds
|
|
@ElementsIntoSet
|
|
abstract Set<Object> bindSetOfFooNumbersToObjects(Set<Foo<? extends Number>> setOfFooNumbers);
|
|
|
|
@Binds
|
|
@IntoSet
|
|
abstract Object bindFooOfStringsIntoSetOfObjects(FooOfStrings impl);
|
|
|
|
@Produces
|
|
static HashSet<String> produceStringHashSet() {
|
|
return new HashSet<>(Arrays.asList("hash-string1", "hash-string2"));
|
|
}
|
|
|
|
@Produces
|
|
static TreeSet<CharSequence> produceCharSequenceTreeSet() {
|
|
return new TreeSet<CharSequence>(Arrays.asList("tree-charSequence1", "tree-charSequence2"));
|
|
}
|
|
|
|
@Produces
|
|
static Collection<CharSequence> produceCharSequenceCollection() {
|
|
return Arrays.<CharSequence>asList("list-charSequence");
|
|
}
|
|
|
|
@Binds
|
|
@ElementsIntoSet
|
|
abstract Set<CharSequence> bindHashSetOfStrings(HashSet<String> set);
|
|
|
|
@Binds
|
|
@ElementsIntoSet
|
|
abstract Set<CharSequence> bindTreeSetOfCharSequences(TreeSet<CharSequence> set);
|
|
|
|
@Binds
|
|
@ElementsIntoSet
|
|
abstract Set<CharSequence> bindCollectionOfCharSequences(Collection<CharSequence> collection);
|
|
|
|
@Qualifier
|
|
@Retention(RetentionPolicy.RUNTIME)
|
|
@interface SomeQualifier {}
|
|
|
|
@Module
|
|
static final class ExecutorModule {
|
|
@Provides @Production
|
|
static Executor provideExecutor() {
|
|
return MoreExecutors.directExecutor();
|
|
}
|
|
}
|
|
|
|
@Binds
|
|
@IntoMap
|
|
@IntKey(123)
|
|
abstract Object bind123ForMap(@Named("For-123") String string);
|
|
|
|
@Binds
|
|
@IntoMap
|
|
@IntKey(456)
|
|
abstract Object bind456ForMap(@Named("For-456") String string);
|
|
|
|
@Produces
|
|
@IntoMap
|
|
@IntKey(789)
|
|
static Object produce789ForMap() {
|
|
return "789-string";
|
|
}
|
|
|
|
@Module
|
|
abstract static class ProvisionModuleForMap {
|
|
@Provides @Named("Provision string") static String provideProvisionString() {
|
|
return "provision-string";
|
|
}
|
|
|
|
@Binds
|
|
@IntoMap
|
|
@IntKey(-1)
|
|
abstract Object bindNegative1ForMap(@Named("Provision string") String string);
|
|
}
|
|
|
|
@Binds
|
|
@IntoMap
|
|
@IntKey(123)
|
|
@SomeQualifier
|
|
abstract Object bindFooOfStringsIntoQualifiedMap(FooOfStrings fooOfStrings);
|
|
|
|
@Produces
|
|
@Named("For-123")
|
|
static String produce123String() {
|
|
return "123-string";
|
|
}
|
|
|
|
@Produces
|
|
@Named("For-456")
|
|
static String produce456String() {
|
|
return "456-string";
|
|
}
|
|
}
|