Skip to content

Commit 9631868

Browse files
bcorsoDagger Team
authored andcommitted
[XPoet Migration]: Migrate more CodeBlock usages to XCodeBlock
This CL migrates the remaining classes in `dagger/internal/codegen/binding/*` to XPoet and the associated classes. RELNOTES=N/A PiperOrigin-RevId: 740034904
1 parent 580a6ec commit 9631868

11 files changed

+179
-166
lines changed

dagger-compiler/main/java/dagger/internal/codegen/binding/AnnotationExpression.java

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,22 @@
1616

1717
package dagger.internal.codegen.binding;
1818

19-
import static androidx.room.compiler.codegen.XTypeNameKt.toJavaPoet;
2019
import static androidx.room.compiler.processing.XTypeKt.isArray;
2120
import static dagger.internal.codegen.binding.SourceFiles.classFileName;
2221
import static dagger.internal.codegen.extension.DaggerStreams.toImmutableList;
23-
import static dagger.internal.codegen.javapoet.CodeBlocks.makeParametersCodeBlock;
24-
import static dagger.internal.codegen.javapoet.CodeBlocks.toParametersCodeBlock;
2522
import static dagger.internal.codegen.xprocessing.XAnnotationValues.characterLiteralWithSingleQuotes;
23+
import static dagger.internal.codegen.xprocessing.XCodeBlocks.makeParametersCodeBlock;
24+
import static dagger.internal.codegen.xprocessing.XCodeBlocks.toParametersCodeBlock;
2625
import static dagger.internal.codegen.xprocessing.XElements.getSimpleName;
2726
import static dagger.internal.codegen.xprocessing.XTypes.asArray;
2827
import static dagger.internal.codegen.xprocessing.XTypes.isTypeOf;
2928

3029
import androidx.room.compiler.codegen.XClassName;
30+
import androidx.room.compiler.codegen.XCodeBlock;
3131
import androidx.room.compiler.processing.XAnnotation;
3232
import androidx.room.compiler.processing.XAnnotationValue;
3333
import androidx.room.compiler.processing.XType;
3434
import androidx.room.compiler.processing.XTypeElement;
35-
import com.squareup.javapoet.CodeBlock;
3635
import dagger.internal.codegen.xprocessing.XTypeNames;
3736

3837
/**
@@ -59,14 +58,14 @@ public final class AnnotationExpression {
5958
* Returns an expression that calls static methods on the annotation's creator class to create an
6059
* annotation instance equivalent the annotation passed to the constructor.
6160
*/
62-
CodeBlock getAnnotationInstanceExpression() {
61+
XCodeBlock getAnnotationInstanceExpression() {
6362
return getAnnotationInstanceExpression(annotation);
6463
}
6564

66-
private CodeBlock getAnnotationInstanceExpression(XAnnotation annotation) {
67-
return CodeBlock.of(
68-
"$T.$L($L)",
69-
toJavaPoet(creatorClass),
65+
private XCodeBlock getAnnotationInstanceExpression(XAnnotation annotation) {
66+
return XCodeBlock.of(
67+
"%T.%L(%L)",
68+
creatorClass,
7069
createMethodName(annotation.getType().getTypeElement()),
7170
makeParametersCodeBlock(
7271
annotation.getAnnotationValues().stream()
@@ -93,45 +92,43 @@ public static String createMethodName(XTypeElement annotationType) {
9392
* Returns an expression that evaluates to a {@code value} of a given type on an {@code
9493
* annotation}.
9594
*/
96-
CodeBlock getValueExpression(XAnnotationValue value) {
95+
XCodeBlock getValueExpression(XAnnotationValue value) {
9796
if (isArray(value.getValueType())) {
9897
XType componentType = asArray(value.getValueType()).getComponentType();
99-
return CodeBlock.of(
100-
"new $T[] {$L}",
98+
return XCodeBlock.of(
99+
"new %T[] {%L}",
101100
// TODO(b/264464791): The KClass -> Class swap can be removed once this bug is fixed.
102-
toJavaPoet(
103-
isTypeOf(componentType, XTypeNames.KCLASS)
104-
? XTypeNames.CLASS
105-
: componentType.getRawType().asTypeName()),
101+
isTypeOf(componentType, XTypeNames.KCLASS)
102+
? XTypeNames.CLASS
103+
: componentType.getRawType().asTypeName(),
106104
value.asAnnotationValueList().stream()
107105
.map(this::getValueExpression)
108106
.collect(toParametersCodeBlock()));
109107
} else if (value.hasEnumValue()) {
110-
return CodeBlock.of(
111-
"$T.$L",
112-
value.asEnum().getEnclosingElement().getClassName(),
113-
getSimpleName(value.asEnum()));
108+
return XCodeBlock.of(
109+
"%T.%L",
110+
value.asEnum().getEnclosingElement().asClassName(), getSimpleName(value.asEnum()));
114111
} else if (value.hasAnnotationValue()) {
115112
return getAnnotationInstanceExpression(value.asAnnotation());
116113
} else if (value.hasTypeValue()) {
117-
return CodeBlock.of("$T.class", value.asType().getTypeElement().getClassName());
114+
return XCodeBlock.of("%T.class", value.asType().getTypeElement().asClassName());
118115
} else if (value.hasStringValue()) {
119-
return CodeBlock.of("$S", value.asString());
116+
return XCodeBlock.of("%S", value.asString());
120117
} else if (value.hasByteValue()) {
121-
return CodeBlock.of("(byte) $L", value.asByte());
118+
return XCodeBlock.of("(byte) %L", value.asByte());
122119
} else if (value.hasCharValue()) {
123120
// TODO(bcorso): Replace when https://github.com/square/javapoet/issues/698 is fixed.
124-
return CodeBlock.of("$L", characterLiteralWithSingleQuotes(value.asChar()));
121+
return XCodeBlock.of("%L", characterLiteralWithSingleQuotes(value.asChar()));
125122
} else if (value.hasDoubleValue()) {
126-
return CodeBlock.of("$LD", value.asDouble());
123+
return XCodeBlock.of("%LD", value.asDouble());
127124
} else if (value.hasFloatValue()) {
128-
return CodeBlock.of("$LF", value.asFloat());
125+
return XCodeBlock.of("%LF", value.asFloat());
129126
} else if (value.hasLongValue()) {
130-
return CodeBlock.of("$LL", value.asLong());
127+
return XCodeBlock.of("%LL", value.asLong());
131128
} else if (value.hasShortValue()) {
132-
return CodeBlock.of("(short) $L", value.asShort());
129+
return XCodeBlock.of("(short) %L", value.asShort());
133130
} else {
134-
return CodeBlock.of("$L", value.getValue());
131+
return XCodeBlock.of("%L", value.getValue());
135132
}
136133
}
137134
}

dagger-compiler/main/java/dagger/internal/codegen/binding/MapKeys.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package dagger.internal.codegen.binding;
1818

19-
import static androidx.room.compiler.codegen.XTypeNameKt.toJavaPoet;
19+
import static androidx.room.compiler.codegen.compat.XConverters.toJavaPoet;
2020
import static androidx.room.compiler.processing.XTypeKt.isArray;
2121
import static com.google.common.base.Preconditions.checkArgument;
2222
import static com.google.common.collect.Iterables.getOnlyElement;
@@ -25,6 +25,7 @@
2525
import static dagger.internal.codegen.binding.SourceFiles.elementBasedClassName;
2626
import static dagger.internal.codegen.extension.DaggerCollectors.toOptional;
2727
import static dagger.internal.codegen.xprocessing.XElements.asExecutable;
28+
import static dagger.internal.codegen.xprocessing.XElements.asMethod;
2829
import static dagger.internal.codegen.xprocessing.XElements.getSimpleName;
2930
import static dagger.internal.codegen.xprocessing.XTypes.isDeclared;
3031
import static dagger.internal.codegen.xprocessing.XTypes.isTypeOf;
@@ -33,6 +34,7 @@
3334
import static javax.lang.model.element.Modifier.STATIC;
3435

3536
import androidx.room.compiler.codegen.XClassName;
37+
import androidx.room.compiler.codegen.XCodeBlock;
3638
import androidx.room.compiler.processing.XAnnotation;
3739
import androidx.room.compiler.processing.XAnnotationValue;
3840
import androidx.room.compiler.processing.XElement;
@@ -41,7 +43,6 @@
4143
import androidx.room.compiler.processing.XType;
4244
import androidx.room.compiler.processing.XTypeElement;
4345
import com.google.common.collect.ImmutableSet;
44-
import com.squareup.javapoet.CodeBlock;
4546
import com.squareup.javapoet.MethodSpec;
4647
import dagger.MapKey;
4748
import dagger.internal.codegen.base.DaggerSuperficialValidation;
@@ -134,38 +135,38 @@ public static XType getUnwrappedMapKeyType(XType mapKeyAnnotationType) {
134135
* @throws IllegalStateException if {@code binding} is not a {@link dagger.multibindings.IntoMap
135136
* map} contribution.
136137
*/
137-
public static CodeBlock getMapKeyExpression(
138+
public static XCodeBlock getMapKeyExpression(
138139
ContributionBinding binding, XClassName requestingClass, XProcessingEnv processingEnv) {
139140
XAnnotation mapKeyAnnotation = binding.mapKey().get();
140141
return MapKeyAccessibility.isMapKeyAccessibleFrom(
141142
mapKeyAnnotation, requestingClass.getPackageName())
142143
? directMapKeyExpression(mapKeyAnnotation, processingEnv)
143-
: CodeBlock.of("$T.create()", toJavaPoet(mapKeyProxyClassName(binding)));
144+
: XCodeBlock.of("%T.create()", mapKeyProxyClassName(binding));
144145
}
145146

146147
/**
147148
* Returns a code block for the map key annotation {@code mapKey}.
148149
*
149150
* <p>This method assumes the map key will be accessible in the context that the returned {@link
150-
* CodeBlock} is used. Use {@link #getMapKeyExpression(ContributionBinding, XClassName,
151+
* XCodeBlock} is used. Use {@link #getMapKeyExpression(ContributionBinding, XClassName,
151152
* XProcessingEnv)} when that assumption is not guaranteed.
152153
*
153154
* @throws IllegalArgumentException if the element is annotated with more than one {@code MapKey}
154155
* annotation
155156
* @throws IllegalStateException if {@code bindingElement} is not annotated with a {@code MapKey}
156157
* annotation
157158
*/
158-
private static CodeBlock directMapKeyExpression(
159+
private static XCodeBlock directMapKeyExpression(
159160
XAnnotation mapKey, XProcessingEnv processingEnv) {
160161
Optional<XAnnotationValue> unwrappedValue = unwrapValue(mapKey);
161162
if (mapKey.getQualifiedName().contentEquals("dagger.android.AndroidInjectionKey")) {
162163
XTypeElement unwrappedType =
163164
DaggerSuperficialValidation.requireTypeElement(
164165
processingEnv, unwrappedValue.get().asString());
165-
return CodeBlock.of(
166-
"$T.of($S)",
167-
toJavaPoet(XClassName.get("dagger.android.internal", "AndroidInjectionKeys")),
168-
unwrappedType.getClassName().reflectionName());
166+
return XCodeBlock.of(
167+
"%T.of(%S)",
168+
XClassName.get("dagger.android.internal", "AndroidInjectionKeys"),
169+
unwrappedType.asClassName().getReflectionName());
169170
}
170171
AnnotationExpression annotationExpression = new AnnotationExpression(mapKey);
171172
return unwrappedValue.isPresent()
@@ -196,7 +197,8 @@ public static Optional<MethodSpec> mapKeyFactoryMethod(
196197
methodBuilder("create")
197198
.addModifiers(PUBLIC, STATIC)
198199
.returns(mapKeyType(mapKey).getTypeName())
199-
.addStatement("return $L", directMapKeyExpression(mapKey, processingEnv))
200+
.addStatement(
201+
"return $L", toJavaPoet(directMapKeyExpression(mapKey, processingEnv)))
200202
.build());
201203
}
202204

@@ -221,12 +223,10 @@ public static boolean useLazyClassKey(Binding binding, BindingGraph graph) {
221223
return false;
222224
}
223225

224-
public static CodeBlock getLazyClassMapKeyExpression(ContributionBinding contributionBinding) {
225-
XClassName proxyClassName =
226-
lazyClassKeyProxyClassName(XElements.asMethod(contributionBinding.bindingElement().get()));
227-
return CodeBlock.of(
228-
"$T.$N",
229-
toJavaPoet(proxyClassName),
226+
public static XCodeBlock getLazyClassMapKeyExpression(ContributionBinding contributionBinding) {
227+
return XCodeBlock.of(
228+
"%T.%N",
229+
lazyClassKeyProxyClassName(asMethod(contributionBinding.bindingElement().get())),
230230
LAZY_CLASS_KEY_NAME_FIELD);
231231
}
232232

dagger-compiler/main/java/dagger/internal/codegen/javapoet/Expression.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
package dagger.internal.codegen.javapoet;
1818

19+
import static androidx.room.compiler.codegen.compat.XConverters.toJavaPoet;
1920
import static dagger.internal.codegen.xprocessing.XTypes.isPrimitive;
2021

22+
import androidx.room.compiler.codegen.XCodeBlock;
2123
import androidx.room.compiler.processing.XRawType;
2224
import androidx.room.compiler.processing.XType;
2325
import com.squareup.javapoet.CodeBlock;
@@ -45,11 +47,21 @@ private Expression(ExpressionType type, CodeBlock codeBlock) {
4547
this.codeBlock = codeBlock;
4648
}
4749

50+
/** Creates a new {@link Expression} with a {@link XType} and {@link CodeBlock}. */
51+
public static Expression create(XType type, XCodeBlock expression) {
52+
return create(type, toJavaPoet(expression));
53+
}
54+
4855
/** Creates a new {@link Expression} with a {@link XType} and {@link CodeBlock}. */
4956
public static Expression create(XType type, CodeBlock expression) {
5057
return new Expression(ExpressionType.create(type), expression);
5158
}
5259

60+
/** Creates a new {@link Expression} with a {@link ExpressionType} and {@link CodeBlock}. */
61+
public static Expression create(ExpressionType type, XCodeBlock expression) {
62+
return create(type, toJavaPoet(expression));
63+
}
64+
5365
/** Creates a new {@link Expression} with a {@link ExpressionType} and {@link CodeBlock}. */
5466
public static Expression create(ExpressionType type, CodeBlock expression) {
5567
return new Expression(type, expression);

dagger-compiler/main/java/dagger/internal/codegen/writing/MapFactoryCreationExpression.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616

1717
package dagger.internal.codegen.writing;
1818

19-
import static androidx.room.compiler.codegen.XTypeNameKt.toJavaPoet;
19+
import static androidx.room.compiler.codegen.compat.XConverters.toJavaPoet;
2020
import static com.google.common.base.Preconditions.checkNotNull;
2121
import static dagger.internal.codegen.binding.MapKeys.getLazyClassMapKeyExpression;
2222
import static dagger.internal.codegen.binding.MapKeys.getMapKeyExpression;
2323
import static dagger.internal.codegen.binding.SourceFiles.mapFactoryClassName;
2424

2525
import androidx.room.compiler.codegen.XClassName;
26+
import androidx.room.compiler.codegen.XCodeBlock;
2627
import androidx.room.compiler.codegen.XTypeName;
2728
import androidx.room.compiler.processing.XProcessingEnv;
2829
import com.squareup.javapoet.CodeBlock;
@@ -64,37 +65,36 @@ final class MapFactoryCreationExpression extends MultibindingFactoryCreationExpr
6465
@Override
6566
public CodeBlock creationExpression() {
6667
XClassName mapFactoryClassName = mapFactoryClassName(binding);
67-
CodeBlock.Builder builder = CodeBlock.builder().add("$T.", toJavaPoet(mapFactoryClassName));
68+
XCodeBlock.Builder builder = XCodeBlock.builder().add("%T.", mapFactoryClassName);
6869
XTypeName valueTypeName = XTypeName.ANY_OBJECT;
6970
if (!useRawType()) {
7071
MapType mapType = MapType.from(binding.key());
7172
valueTypeName = mapType.unwrappedFrameworkValueType().asTypeName();
7273
builder.add(
73-
"<$T, $T>",
74-
toJavaPoet(useLazyClassKey ? XTypeName.STRING : mapType.keyType().asTypeName()),
75-
toJavaPoet(valueTypeName));
74+
"<%T, %T>",
75+
useLazyClassKey ? XTypeName.STRING : mapType.keyType().asTypeName(), valueTypeName);
7676
}
7777

78-
builder.add("builder($L)", binding.dependencies().size());
78+
builder.add("builder(%L)", binding.dependencies().size());
7979

8080
for (DependencyRequest dependency : binding.dependencies()) {
8181
ContributionBinding contributionBinding = graph.contributionBinding(dependency.key());
8282
builder.add(
83-
".put($L, $L)",
83+
".put(%L, %L)",
8484
useLazyClassKey
8585
? getLazyClassMapKeyExpression(graph.contributionBinding(dependency.key()))
8686
: getMapKeyExpression(
8787
contributionBinding, componentImplementation.name(), processingEnv),
8888
multibindingDependencyExpression(dependency));
8989
}
9090

91-
return useLazyClassKey
92-
? CodeBlock.of(
93-
"$T.<$T>of($L)",
94-
toJavaPoet(lazyMapFactoryClassName(binding)),
95-
toJavaPoet(valueTypeName),
96-
builder.add(".build()").build())
97-
: builder.add(".build()").build();
91+
XCodeBlock creationExpression = builder.add(".build()").build();
92+
return toJavaPoet(
93+
useLazyClassKey
94+
? XCodeBlock.of(
95+
"%T.<%T>of(%L)",
96+
lazyMapFactoryClassName(binding), valueTypeName, creationExpression)
97+
: creationExpression);
9898
}
9999

100100
private static XClassName lazyMapFactoryClassName(MultiboundMapBinding binding) {

0 commit comments

Comments
 (0)