• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.javapoet;
18 
19 import androidx.room.compiler.processing.XType;
20 import com.google.common.collect.ImmutableSet;
21 import com.squareup.javapoet.ClassName;
22 import com.squareup.javapoet.ParameterizedTypeName;
23 import com.squareup.javapoet.TypeName;
24 
25 /** Common names and convenience methods for JavaPoet {@link TypeName} usage. */
26 public final class TypeNames {
27 
28   // Dagger Core classnames
29   public static final ClassName ASSISTED = ClassName.get("dagger.assisted", "Assisted");
30   public static final ClassName ASSISTED_FACTORY =
31       ClassName.get("dagger.assisted", "AssistedFactory");
32   public static final ClassName ASSISTED_INJECT =
33       ClassName.get("dagger.assisted", "AssistedInject");
34   public static final ClassName BINDS = ClassName.get("dagger", "Binds");
35   public static final ClassName BINDS_INSTANCE = ClassName.get("dagger", "BindsInstance");
36   public static final ClassName BINDS_OPTIONAL_OF = ClassName.get("dagger", "BindsOptionalOf");
37   public static final ClassName COMPONENT = ClassName.get("dagger", "Component");
38   public static final ClassName COMPONENT_BUILDER = COMPONENT.nestedClass("Builder");
39   public static final ClassName COMPONENT_FACTORY = COMPONENT.nestedClass("Factory");
40   public static final ClassName DAGGER_PROCESSING_OPTIONS =
41       ClassName.get("dagger", "DaggerProcessingOptions");
42   public static final ClassName ELEMENTS_INTO_SET =
43       ClassName.get("dagger.multibindings", "ElementsIntoSet");
44   public static final ClassName INTO_MAP = ClassName.get("dagger.multibindings", "IntoMap");
45   public static final ClassName INTO_SET = ClassName.get("dagger.multibindings", "IntoSet");
46   public static final ClassName MAP_KEY = ClassName.get("dagger", "MapKey");
47   public static final ClassName MODULE = ClassName.get("dagger", "Module");
48   public static final ClassName MULTIBINDS = ClassName.get("dagger.multibindings", "Multibinds");
49   public static final ClassName PROVIDES = ClassName.get("dagger", "Provides");
50   public static final ClassName REUSABLE = ClassName.get("dagger", "Reusable");
51   public static final ClassName SUBCOMPONENT = ClassName.get("dagger", "Subcomponent");
52   public static final ClassName SUBCOMPONENT_BUILDER = SUBCOMPONENT.nestedClass("Builder");
53   public static final ClassName SUBCOMPONENT_FACTORY = SUBCOMPONENT.nestedClass("Factory");
54 
55   // Dagger Internal classnames
56   public static final ClassName IDENTIFIER_NAME_STRING =
57       ClassName.get("dagger.internal", "IdentifierNameString");
58   public static final ClassName KEEP_FIELD_TYPE = ClassName.get("dagger.internal", "KeepFieldType");
59   public static final ClassName LAZY_CLASS_KEY =
60       ClassName.get("dagger.multibindings", "LazyClassKey");
61   public static final ClassName LAZY_CLASS_KEY_MAP =
62       ClassName.get("dagger.internal", "LazyClassKeyMap");
63   public static final ClassName LAZY_CLASS_KEY_MAP_FACTORY =
64       ClassName.get("dagger.internal", "LazyClassKeyMap", "MapFactory");
65   public static final ClassName LAZY_CLASS_KEY_MAP_PROVIDER_FACTORY =
66       ClassName.get("dagger.internal", "LazyClassKeyMap", "MapProviderFactory");
67   public static final ClassName LAZY_MAP_OF_PRODUCED_PRODUCER =
68       ClassName.get("dagger.producers.internal", "LazyMapOfProducedProducer");
69   public static final ClassName LAZY_MAP_OF_PRODUCER_PRODUCER =
70       ClassName.get("dagger.producers.internal", "LazyMapOfProducerProducer");
71   public static final ClassName LAZY_MAP_PRODUCER =
72       ClassName.get("dagger.producers.internal", "LazyMapProducer");
73 
74   public static final ClassName DELEGATE_FACTORY =
75       ClassName.get("dagger.internal", "DelegateFactory");
76   public static final ClassName DOUBLE_CHECK = ClassName.get("dagger.internal", "DoubleCheck");
77 
78   public static final ClassName FACTORY = ClassName.get("dagger.internal", "Factory");
79   public static final ClassName INJECTED_FIELD_SIGNATURE =
80       ClassName.get("dagger.internal", "InjectedFieldSignature");
81   public static final ClassName INSTANCE_FACTORY =
82       ClassName.get("dagger.internal", "InstanceFactory");
83   public static final ClassName MAP_BUILDER = ClassName.get("dagger.internal", "MapBuilder");
84   public static final ClassName MAP_FACTORY = ClassName.get("dagger.internal", "MapFactory");
85   public static final ClassName MAP_PROVIDER_FACTORY =
86       ClassName.get("dagger.internal", "MapProviderFactory");
87   public static final ClassName MEMBERS_INJECTOR = ClassName.get("dagger", "MembersInjector");
88   public static final ClassName MEMBERS_INJECTORS =
89       ClassName.get("dagger.internal", "MembersInjectors");
90   public static final ClassName PROVIDER = ClassName.get("javax.inject", "Provider");
91   public static final ClassName JAKARTA_PROVIDER = ClassName.get("jakarta.inject", "Provider");
92   public static final ClassName DAGGER_PROVIDER = ClassName.get("dagger.internal", "Provider");
93   public static final ClassName DAGGER_PROVIDERS = ClassName.get("dagger.internal", "Providers");
94   public static final ClassName PROVIDER_OF_LAZY =
95       ClassName.get("dagger.internal", "ProviderOfLazy");
96   public static final ClassName SCOPE_METADATA = ClassName.get("dagger.internal", "ScopeMetadata");
97   public static final ClassName QUALIFIER_METADATA =
98       ClassName.get("dagger.internal", "QualifierMetadata");
99   public static final ClassName SET_FACTORY = ClassName.get("dagger.internal", "SetFactory");
100   public static final ClassName SINGLE_CHECK = ClassName.get("dagger.internal", "SingleCheck");
101   public static final ClassName LAZY = ClassName.get("dagger", "Lazy");
102 
103   // Dagger Producers classnames
104   public static final ClassName ABSTRACT_PRODUCER =
105       ClassName.get("dagger.producers.internal", "AbstractProducer");
106   public static final ClassName ABSTRACT_PRODUCES_METHOD_PRODUCER =
107       ClassName.get("dagger.producers.internal", "AbstractProducesMethodProducer");
108   public static final ClassName CANCELLATION_LISTENER =
109       ClassName.get("dagger.producers.internal", "CancellationListener");
110   public static final ClassName CANCELLATION_POLICY =
111       ClassName.get("dagger.producers", "CancellationPolicy");
112   public static final ClassName DELEGATE_PRODUCER =
113       ClassName.get("dagger.producers.internal", "DelegateProducer");
114   public static final ClassName DEPENDENCY_METHOD_PRODUCER =
115       ClassName.get("dagger.producers.internal", "DependencyMethodProducer");
116   public static final ClassName MAP_OF_PRODUCED_PRODUCER =
117       ClassName.get("dagger.producers.internal", "MapOfProducedProducer");
118   public static final ClassName MAP_OF_PRODUCER_PRODUCER =
119       ClassName.get("dagger.producers.internal", "MapOfProducerProducer");
120   public static final ClassName MAP_PRODUCER =
121       ClassName.get("dagger.producers.internal", "MapProducer");
122   public static final ClassName MONITORS =
123       ClassName.get("dagger.producers.monitoring.internal", "Monitors");
124   public static final ClassName PRODUCED = ClassName.get("dagger.producers", "Produced");
125   public static final ClassName PRODUCER = ClassName.get("dagger.producers", "Producer");
126   public static final ClassName PRODUCERS = ClassName.get("dagger.producers.internal", "Producers");
127   public static final ClassName PRODUCER_MODULE =
128       ClassName.get("dagger.producers", "ProducerModule");
129   public static final ClassName PRODUCES = ClassName.get("dagger.producers", "Produces");
130   public static final ClassName PRODUCTION = ClassName.get("dagger.producers", "Production");
131   public static final ClassName PRODUCTION_COMPONENT =
132       ClassName.get("dagger.producers", "ProductionComponent");
133   public static final ClassName PRODUCTION_COMPONENT_BUILDER =
134       PRODUCTION_COMPONENT.nestedClass("Builder");
135   public static final ClassName PRODUCTION_COMPONENT_FACTORY =
136       PRODUCTION_COMPONENT.nestedClass("Factory");
137   public static final ClassName PRODUCTION_EXECTUTOR_MODULE =
138       ClassName.get("dagger.producers.internal", "ProductionExecutorModule");
139   public static final ClassName PRODUCTION_IMPLEMENTATION =
140       ClassName.get("dagger.producers.internal", "ProductionImplementation");
141   public static final ClassName PRODUCTION_SUBCOMPONENT =
142       ClassName.get("dagger.producers", "ProductionSubcomponent");
143   public static final ClassName PRODUCTION_SUBCOMPONENT_BUILDER =
144       PRODUCTION_SUBCOMPONENT.nestedClass("Builder");
145   public static final ClassName PRODUCTION_SUBCOMPONENT_FACTORY =
146       PRODUCTION_SUBCOMPONENT.nestedClass("Factory");
147   public static final ClassName PRODUCER_TOKEN =
148       ClassName.get("dagger.producers.monitoring", "ProducerToken");
149   public static final ClassName PRODUCTION_COMPONENT_MONITOR =
150       ClassName.get("dagger.producers.monitoring", "ProductionComponentMonitor");
151   public static final ClassName PRODUCTION_COMPONENT_MONITOR_FACTORY =
152       ClassName.get("dagger.producers.monitoring", "ProductionComponentMonitor", "Factory");
153   public static final ClassName SET_OF_PRODUCED_PRODUCER =
154       ClassName.get("dagger.producers.internal", "SetOfProducedProducer");
155   public static final ClassName SET_PRODUCER =
156       ClassName.get("dagger.producers.internal", "SetProducer");
157   public static final ClassName PRODUCTION_SCOPE =
158       ClassName.get("dagger.producers", "ProductionScope");
159 
160   // Other classnames
161   public static final ClassName EXECUTOR = ClassName.get("java.util.concurrent", "Executor");
162   public static final ClassName ERROR = ClassName.get("java.lang", "Error");
163   public static final ClassName EXCEPTION = ClassName.get("java.lang", "Exception");
164   public static final ClassName RUNTIME_EXCEPTION = ClassName.get("java.lang", "RuntimeException");
165   public static final ClassName STRING = ClassName.get("java.lang", "String");
166 
167   public static final ClassName MAP = ClassName.get("java.util", "Map");
168   public static final ClassName KOTLIN_METADATA = ClassName.get("kotlin", "Metadata");
169   public static final ClassName IMMUTABLE_MAP =
170       ClassName.get("com.google.common.collect", "ImmutableMap");
171   public static final ClassName SINGLETON = ClassName.get("jakarta.inject", "Singleton");
172   public static final ClassName SINGLETON_JAVAX = ClassName.get("javax.inject", "Singleton");
173   public static final ClassName SCOPE = ClassName.get("jakarta.inject", "Scope");
174   public static final ClassName SCOPE_JAVAX = ClassName.get("javax.inject", "Scope");
175   public static final ClassName INJECT = ClassName.get("jakarta.inject", "Inject");
176   public static final ClassName INJECT_JAVAX = ClassName.get("javax.inject", "Inject");
177   public static final ClassName QUALIFIER = ClassName.get("jakarta.inject", "Qualifier");
178   public static final ClassName QUALIFIER_JAVAX = ClassName.get("javax.inject", "Qualifier");
179   public static final ClassName COLLECTION = ClassName.get("java.util", "Collection");
180   public static final ClassName LIST = ClassName.get("java.util", "List");
181   public static final ClassName SET = ClassName.get("java.util", "Set");
182   public static final ClassName IMMUTABLE_SET =
183       ClassName.get("com.google.common.collect", "ImmutableSet");
184   public static final ClassName FUTURES =
185       ClassName.get("com.google.common.util.concurrent", "Futures");
186   public static final ClassName LISTENABLE_FUTURE =
187       ClassName.get("com.google.common.util.concurrent", "ListenableFuture");
188   public static final ClassName FLUENT_FUTURE =
189       ClassName.get("com.google.common.util.concurrent", "FluentFuture");
190   public static final ClassName GUAVA_OPTIONAL =
191       ClassName.get("com.google.common.base", "Optional");
192   public static final ClassName JDK_OPTIONAL = ClassName.get("java.util", "Optional");
193   public static final ClassName OVERRIDE = ClassName.get("java.lang", "Override");
194   public static final ClassName JVM_STATIC = ClassName.get("kotlin.jvm", "JvmStatic");
195   public static final ClassName CLASS = ClassName.get("java.lang", "Class");
196   public static final ClassName KCLASS = ClassName.get("kotlin.reflect", "KClass");
197 
198   /**
199    * {@link TypeName#VOID} is lowercase-v {@code void} whereas this represents the class, {@link
200    * Void}.
201    */
202   public static final ClassName VOID_CLASS = ClassName.get(Void.class);
203 
abstractProducerOf(TypeName typeName)204   public static ParameterizedTypeName abstractProducerOf(TypeName typeName) {
205     return ParameterizedTypeName.get(ABSTRACT_PRODUCER, typeName);
206   }
207 
factoryOf(TypeName factoryType)208   public static ParameterizedTypeName factoryOf(TypeName factoryType) {
209     return ParameterizedTypeName.get(FACTORY, factoryType);
210   }
211 
lazyOf(TypeName typeName)212   public static ParameterizedTypeName lazyOf(TypeName typeName) {
213     return ParameterizedTypeName.get(LAZY, typeName);
214   }
215 
listOf(TypeName typeName)216   public static ParameterizedTypeName listOf(TypeName typeName) {
217     return ParameterizedTypeName.get(LIST, typeName);
218   }
219 
listenableFutureOf(TypeName typeName)220   public static ParameterizedTypeName listenableFutureOf(TypeName typeName) {
221     return ParameterizedTypeName.get(LISTENABLE_FUTURE, typeName);
222   }
223 
membersInjectorOf(TypeName membersInjectorType)224   public static ParameterizedTypeName membersInjectorOf(TypeName membersInjectorType) {
225     return ParameterizedTypeName.get(MEMBERS_INJECTOR, membersInjectorType);
226   }
227 
producedOf(TypeName typeName)228   public static ParameterizedTypeName producedOf(TypeName typeName) {
229     return ParameterizedTypeName.get(PRODUCED, typeName);
230   }
231 
producerOf(TypeName typeName)232   public static ParameterizedTypeName producerOf(TypeName typeName) {
233     return ParameterizedTypeName.get(PRODUCER, typeName);
234   }
235 
dependencyMethodProducerOf(TypeName typeName)236   public static ParameterizedTypeName dependencyMethodProducerOf(TypeName typeName) {
237     return ParameterizedTypeName.get(DEPENDENCY_METHOD_PRODUCER, typeName);
238   }
239 
providerOf(TypeName typeName)240   public static ParameterizedTypeName providerOf(TypeName typeName) {
241     return ParameterizedTypeName.get(PROVIDER, typeName);
242   }
243 
daggerProviderOf(TypeName typeName)244   public static ParameterizedTypeName daggerProviderOf(TypeName typeName) {
245     return ParameterizedTypeName.get(DAGGER_PROVIDER, typeName);
246   }
247 
setOf(TypeName elementType)248   public static ParameterizedTypeName setOf(TypeName elementType) {
249     return ParameterizedTypeName.get(SET, elementType);
250   }
251 
252   private static final ImmutableSet<ClassName> FUTURE_TYPES =
253       ImmutableSet.of(LISTENABLE_FUTURE, FLUENT_FUTURE);
254 
isFutureType(XType type)255   public static boolean isFutureType(XType type) {
256     return isFutureType(type.getTypeName());
257   }
258 
isFutureType(TypeName typeName)259   public static boolean isFutureType(TypeName typeName) {
260     return FUTURE_TYPES.contains(rawTypeName(typeName));
261   }
262 
263   /**
264    * Returns the {@link TypeName} for the raw type of the given {@link TypeName}. If the argument
265    * isn't a parameterized type, it returns the argument unchanged.
266    */
rawTypeName(TypeName typeName)267   public static TypeName rawTypeName(TypeName typeName) {
268     return (typeName instanceof ParameterizedTypeName)
269         ? ((ParameterizedTypeName) typeName).rawType
270         : typeName;
271   }
272 
TypeNames()273   private TypeNames() {}
274 }
275