Skip to content

Commit 813afa8

Browse files
committed
Fix critical JavaPoet code generation issues
Complete fix for CI compilation failures by addressing multiple JavaPoet code generation issues: 1. Remove empty addStatement("") calls that generated extra semicolons 2. Fix stream chain generation to use single statement instead of multiple statements that each added semicolons 3. Fix domain class imports by using getFullyQualifiedClassName() 4. Fix complex type imports in FieldMappingCodeGenerator by using ClassName.bestGuess() instead of simple type names All 21 tests now pass locally and should pass in CI.
1 parent bbe87cf commit 813afa8

File tree

2 files changed

+22
-25
lines changed

2 files changed

+22
-25
lines changed

src/main/java/com/github/wassertim/dynamodb/toolkit/generation/MapperGenerator.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private MethodSpec buildToAttributeValueMethod(TypeInfo typeInfo) {
108108
String className = typeInfo.getClassName();
109109
String paramName = typeExtractor.getParameterName(className);
110110
ClassName attributeValue = ClassName.get(AttributeValue.class);
111-
ClassName domainClass = ClassName.bestGuess(className);
111+
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
112112

113113
MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("toDynamoDbAttributeValue")
114114
.addModifiers(Modifier.PUBLIC)
@@ -123,16 +123,13 @@ private MethodSpec buildToAttributeValueMethod(TypeInfo typeInfo) {
123123
methodBuilder.beginControlFlow("if ($L == null)", paramName)
124124
.addStatement("return null")
125125
.endControlFlow()
126-
.addStatement("")
127126
.addStatement("$T<$T, $T> attributes = new $T<>()",
128-
Map.class, String.class, AttributeValue.class, HashMap.class)
129-
.addStatement("");
127+
Map.class, String.class, AttributeValue.class, HashMap.class);
130128

131129
// Generate field mappings
132130
for (FieldInfo field : typeInfo.getFields()) {
133131
CodeBlock mappingCode = fieldMappingCodeGenerator.generateToAttributeValueMapping(field, paramName);
134132
methodBuilder.addCode(mappingCode);
135-
methodBuilder.addStatement("");
136133
}
137134

138135
methodBuilder.addStatement("return $T.builder().m(attributes).build()", attributeValue);
@@ -143,7 +140,7 @@ private MethodSpec buildToAttributeValueMethod(TypeInfo typeInfo) {
143140
private MethodSpec buildFromAttributeValueMethod(TypeInfo typeInfo) {
144141
String className = typeInfo.getClassName();
145142
ClassName attributeValue = ClassName.get(AttributeValue.class);
146-
ClassName domainClass = ClassName.bestGuess(className);
143+
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
147144

148145
MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder("fromDynamoDbAttributeValue")
149146
.addModifiers(Modifier.PUBLIC)
@@ -158,11 +155,9 @@ private MethodSpec buildFromAttributeValueMethod(TypeInfo typeInfo) {
158155
methodBuilder.beginControlFlow("if (attributeValue == null || attributeValue.m() == null)")
159156
.addStatement("return null")
160157
.endControlFlow()
161-
.addStatement("")
162158
.addStatement("$T<$T, $T> item = attributeValue.m()",
163159
Map.class, String.class, AttributeValue.class)
164-
.addStatement("var builder = $T.builder()", domainClass)
165-
.addStatement("");
160+
.addStatement("var builder = $T.builder()", domainClass);
166161

167162
// Generate field mappings
168163
for (FieldInfo field : typeInfo.getFields()) {
@@ -178,7 +173,7 @@ private MethodSpec buildFromAttributeValueMethod(TypeInfo typeInfo) {
178173
private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeInfo) {
179174
String className = typeInfo.getClassName();
180175
ClassName attributeValue = ClassName.get(AttributeValue.class);
181-
ClassName domainClass = ClassName.bestGuess(className);
176+
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
182177

183178
// fromDynamoDbItem method
184179
MethodSpec fromDynamoDbItem = MethodSpec.methodBuilder("fromDynamoDbItem")
@@ -219,11 +214,12 @@ private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeI
219214
.beginControlFlow("if (items == null || items.isEmpty())")
220215
.addStatement("return new $T<>()", ClassName.get("java.util", "ArrayList"))
221216
.endControlFlow()
222-
.addStatement("return items.stream()")
223-
.addStatement(" .map(item -> $T.builder().m(item).build())", attributeValue)
224-
.addStatement(" .map(this::fromDynamoDbAttributeValue)")
225-
.addStatement(" .filter($T::nonNull)", ClassName.get(Objects.class))
226-
.addStatement(" .collect($T.toList())", ClassName.get(Collectors.class))
217+
.addStatement("return items.stream()$>\n" +
218+
".map(item -> $T.builder().m(item).build())$>\n" +
219+
".map(this::fromDynamoDbAttributeValue)$>\n" +
220+
".filter($T::nonNull)$>\n" +
221+
".collect($T.toList())$<$<$<$<",
222+
attributeValue, ClassName.get(Objects.class), ClassName.get(Collectors.class))
227223
.build();
228224

229225
// toDynamoDbItem method
@@ -264,12 +260,13 @@ private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeI
264260
.beginControlFlow("if (objects == null || objects.isEmpty())")
265261
.addStatement("return new $T<>()", ClassName.get("java.util", "ArrayList"))
266262
.endControlFlow()
267-
.addStatement("return objects.stream()")
268-
.addStatement(" .map(this::toDynamoDbAttributeValue)")
269-
.addStatement(" .filter($T::nonNull)", ClassName.get(Objects.class))
270-
.addStatement(" .map(av -> av.m())")
271-
.addStatement(" .filter(map -> map != null && !map.isEmpty())")
272-
.addStatement(" .collect($T.toList())", ClassName.get(Collectors.class))
263+
.addStatement("return objects.stream()$>\n" +
264+
".map(this::toDynamoDbAttributeValue)$>\n" +
265+
".filter($T::nonNull)$>\n" +
266+
".map(av -> av.m())$>\n" +
267+
".filter(map -> map != null && !map.isEmpty())$>\n" +
268+
".collect($T.toList())$<$<$<$<$<",
269+
ClassName.get(Objects.class), ClassName.get(Collectors.class))
273270
.build();
274271

275272
classBuilder.addMethod(fromDynamoDbItem);

src/main/java/com/github/wassertim/dynamodb/toolkit/mapping/FieldMappingCodeGenerator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,12 +256,12 @@ private CodeBlock generateInstantDeserialization(String fieldName) {
256256

257257
private CodeBlock generateEnumDeserialization(FieldInfo field, String fieldName) {
258258
ClassName mappingUtils = ClassName.get("com.github.wassertim.dynamodb.runtime", "MappingUtils");
259-
String enumType = utils.extractSimpleTypeName(field.getFieldTypeName());
259+
ClassName enumType = ClassName.bestGuess(field.getFieldTypeName());
260260

261261
return CodeBlock.builder()
262262
.addStatement("$T value = $T.getStringSafely($LAttr)", String.class, mappingUtils, fieldName)
263263
.beginControlFlow("if (value != null)")
264-
.add(utils.createEnumParseBlock(enumType, "value", fieldName))
264+
.add(utils.createEnumParseBlock(enumType.simpleName(), "value", fieldName))
265265
.endControlFlow()
266266
.build();
267267
}
@@ -307,10 +307,10 @@ private CodeBlock generateNestedNumberListDeserialization(String fieldName) {
307307

308308
private CodeBlock generateComplexObjectDeserialization(FieldInfo field, String fieldName) {
309309
String mapperField = utils.getFieldNameForDependency(field.getMapperDependency());
310-
String simpleType = utils.extractSimpleTypeName(field.getFieldTypeName());
310+
ClassName complexType = ClassName.bestGuess(field.getFieldTypeName());
311311

312312
return CodeBlock.builder()
313-
.addStatement("$L value = $L.fromDynamoDbAttributeValue($LAttr)", simpleType, mapperField, fieldName)
313+
.addStatement("$T value = $L.fromDynamoDbAttributeValue($LAttr)", complexType, mapperField, fieldName)
314314
.beginControlFlow("if (value != null)")
315315
.addStatement("builder.$L(value)", fieldName)
316316
.endControlFlow()

0 commit comments

Comments
 (0)