• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Dagger Authors.
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 dagger.internal.codegen.binding;
18 
19 import androidx.room.compiler.processing.XConstructorElement;
20 import androidx.room.compiler.processing.XFieldElement;
21 import androidx.room.compiler.processing.XMethodElement;
22 import com.google.errorprone.annotations.CanIgnoreReturnValue;
23 import dagger.Component;
24 import dagger.Provides;
25 import dagger.internal.codegen.base.SourceFileGenerationException;
26 import dagger.internal.codegen.base.SourceFileGenerator;
27 import dagger.spi.model.Key;
28 import java.util.Optional;
29 import javax.inject.Inject;
30 
31 /**
32  * Maintains the collection of provision bindings from {@link Inject} constructors and members
33  * injection bindings from {@link Inject} fields and methods known to the annotation processor. Note
34  * that this registry <b>does not</b> handle any explicit bindings (those from {@link Provides}
35  * methods, {@link Component} dependencies, etc.).
36  */
37 public interface InjectBindingRegistry {
38   /**
39    * Returns a {@link ProvisionBinding} for {@code key}. If none has been registered yet, registers
40    * one.
41    */
getOrFindProvisionBinding(Key key)42   Optional<ProvisionBinding> getOrFindProvisionBinding(Key key);
43 
44   /**
45    * Returns a {@link MembersInjectionBinding} for {@code key}. If none has been registered yet,
46    * registers one, along with all necessary members injection bindings for superclasses.
47    */
getOrFindMembersInjectionBinding(Key key)48   Optional<MembersInjectionBinding> getOrFindMembersInjectionBinding(Key key);
49 
50   /**
51    * Returns a {@link ProvisionBinding} for a {@link dagger.MembersInjector} of {@code key}. If none
52    * has been registered yet, registers one.
53    */
getOrFindMembersInjectorProvisionBinding(Key key)54   Optional<ProvisionBinding> getOrFindMembersInjectorProvisionBinding(Key key);
55 
56   @CanIgnoreReturnValue
tryRegisterInjectConstructor(XConstructorElement constructorElement)57   Optional<ProvisionBinding> tryRegisterInjectConstructor(XConstructorElement constructorElement);
58 
59   @CanIgnoreReturnValue
tryRegisterInjectField(XFieldElement fieldElement)60   Optional<MembersInjectionBinding> tryRegisterInjectField(XFieldElement fieldElement);
61 
62   @CanIgnoreReturnValue
tryRegisterInjectMethod(XMethodElement methodElement)63   Optional<MembersInjectionBinding> tryRegisterInjectMethod(XMethodElement methodElement);
64 
65   /**
66    * This method ensures that sources for all registered {@link Binding bindings} (either explicitly
67    * or implicitly via {@link #getOrFindMembersInjectionBinding} or {@link
68    * #getOrFindProvisionBinding}) are generated.
69    */
generateSourcesForRequiredBindings( SourceFileGenerator<ProvisionBinding> factoryGenerator, SourceFileGenerator<MembersInjectionBinding> membersInjectorGenerator)70   void generateSourcesForRequiredBindings(
71       SourceFileGenerator<ProvisionBinding> factoryGenerator,
72       SourceFileGenerator<MembersInjectionBinding> membersInjectorGenerator)
73       throws SourceFileGenerationException;
74 }
75