From b8c6f4d05b854b30b84dddd13c8675a2e418731d Mon Sep 17 00:00:00 2001 From: AndreasIgel Date: Thu, 12 Mar 2026 00:22:34 +0100 Subject: [PATCH] Renaming field-attributes to originalFieldName and fieldNameInBuilder --- docs/CUSTOMIZING.md | 16 +++--- .../custom/StringValidationGenerator.java | 11 ++-- .../builders/processor/dtos/FieldDto.java | 50 ++++++++++--------- .../generators/AddToCollectionGenerator.java | 18 +++---- .../ArrayBuilderConsumerGenerator.java | 4 +- .../generators/ArrayConversionGenerator.java | 4 +- .../generators/CoreMethodsEnhancer.java | 22 ++++---- .../generators/GeneratorRegistry.java | 2 +- .../generators/MethodGeneratorUtil.java | 26 +++++----- .../StringBuilderConsumerGenerator.java | 4 +- .../StringFormatHelperGenerator.java | 8 +-- .../generators/SupplierMethodGenerator.java | 4 +- .../util/BuilderDefinitionCreator.java | 10 ++-- .../processor/util/JavaCodeGenerator.java | 12 ++--- .../CustomizingDocumentationTest.java | 8 +-- 15 files changed, 104 insertions(+), 95 deletions(-) diff --git a/docs/CUSTOMIZING.md b/docs/CUSTOMIZING.md index 215560fd..bb6d1108 100644 --- a/docs/CUSTOMIZING.md +++ b/docs/CUSTOMIZING.md @@ -99,14 +99,15 @@ public class CustomValidationGenerator implements MethodGenerator { @Override public List generateMethods(FieldDto field, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldName(); - String methodName = "validated" + capitalize(fieldName); + String fieldInDto = field.getOriginalFieldName(); + String fieldInBuilder = field.getFieldNameInBuilder(); + String methodName = "validated" + capitalize(fieldInDto); // Generate validation setter method MethodDto method = new MethodDto(methodName, builderType); // Add parameter - String parameterName = fieldName; + String parameterName = fieldInDto; MethodParameterDto parameter = new MethodParameterDto(); parameter.setParameterName(parameterName); parameter.setParameterTypeName(new TypeName("java.lang", "String")); @@ -310,7 +311,7 @@ public List generateMethods(FieldDto field, TypeName builderType, Pro // Your generation logic return methods; } catch (Exception e) { - context.error("Failed to generate method for field %s: %s", field.getFieldName(), e.getMessage()); + context.error("Failed to generate method for field %s: %s", field.getFieldNameInBuilder(), e.getMessage()); return List.of(); // Return empty list on error } } @@ -406,13 +407,14 @@ public class DateParserGenerator implements MethodGenerator { @Override public List generateMethods(FieldDto field, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldName(); - String methodName = fieldName + "FromString"; + String fieldInDto = field.getOriginalFieldName(); + String fieldInBuilder = field.getFieldNameInBuilder(); + String methodName = fieldInDto + "FromString"; MethodDto method = new MethodDto(methodName, builderType); // Add parameter - String parameterName = fieldName + "String"; + String parameterName = fieldInDto + "String"; MethodParameterDto parameter = new MethodParameterDto(); parameter.setParameterName(parameterName); parameter.setParameterTypeName(new TypeName("java.lang", "String")); diff --git a/example-custom-generator/src/main/java/org/javahelpers/simple/builders/example/custom/StringValidationGenerator.java b/example-custom-generator/src/main/java/org/javahelpers/simple/builders/example/custom/StringValidationGenerator.java index e5475ab4..cd9fdb34 100644 --- a/example-custom-generator/src/main/java/org/javahelpers/simple/builders/example/custom/StringValidationGenerator.java +++ b/example-custom-generator/src/main/java/org/javahelpers/simple/builders/example/custom/StringValidationGenerator.java @@ -66,24 +66,25 @@ public boolean appliesTo(FieldDto field, TypeName dtoType, ProcessingContext con @Override public List generateMethods(FieldDto field, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldName(); - String methodName = "validate" + StringUtils.capitalize(fieldName); + String fieldInDto = field.getOriginalFieldName(); + String fieldInBuilder = field.getFieldNameInBuilder(); + String methodName = "validate" + StringUtils.capitalize(fieldInDto); String methodBody = String.format( "if (!%s.isSet() || %s.value().trim().isEmpty()) {\n" + " throw new IllegalArgumentException(\"%s cannot be null or empty\");\n" + "}\n" + "return this;", - fieldName, fieldName, StringUtils.capitalize(fieldName) + fieldInBuilder, fieldInBuilder, StringUtils.capitalize(fieldInDto) ); MethodDto validationMethod = new MethodDto(methodName, builderType); validationMethod.setCode(methodBody); validationMethod.setJavadoc( - "Validates that the " + fieldName + " field is not null or empty.\n" + + "Validates that the " + fieldInDto + " field is not null or empty.\n" + "\n" + "@return this builder instance for chaining\n" + - "@throws IllegalArgumentException if " + fieldName + " is null or empty" + "@throws IllegalArgumentException if " + fieldInDto + " is null or empty" ); return List.of(validationMethod); diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/dtos/FieldDto.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/dtos/FieldDto.java index 7f8ba9a0..8fdefe8a 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/dtos/FieldDto.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/dtos/FieldDto.java @@ -34,11 +34,11 @@ * that field. */ public class FieldDto { - /** Name of field in Builder. */ - private String fieldName; + /** Name of the field as it appears in the original DTO (used for method names and setters). */ + private String originalFieldName; - /** Name of field according to estimation by constructors and setters. */ - private String fieldNameEstimated; + /** Name of the field as stored in the builder (may be renamed to avoid conflicts). */ + private String fieldNameInBuilder; /** Type of field. Containing generic, name of package and class */ private TypeName fieldType; @@ -72,49 +72,51 @@ public class FieldDto { private final List parameterAnnotations = new ArrayList<>(); /** - * Getting name of field. + * Gets the original field name from the DTO. This name is used for generating method names, + * parameter names, and setter method names (e.g., "userName" becomes "setUserName"). * - * @return the name of the field + * @return the original field name from the DTO */ - public String getFieldName() { - return fieldName; + public String getOriginalFieldName() { + return originalFieldName; } /** - * Setting name of field. + * Sets the original field name from the DTO. * - * @param fieldName the name to set for this field + * @param originalFieldName the original field name from the DTO */ - public void setFieldName(String fieldName) { - this.fieldName = fieldName; + public void setOriginalFieldName(String originalFieldName) { + this.originalFieldName = originalFieldName; } /** - * Getting name of field estimated by constructor and setter. + * Gets the field name as stored in the builder. This name may be different from the original + * field name if renaming was required to avoid conflicts with other fields or reserved words. * - * @return the estimated name of the field + * @return the field name as used in the builder */ - public String getFieldNameEstimated() { - return fieldNameEstimated; + public String getFieldNameInBuilder() { + return fieldNameInBuilder; } /** - * Setting name of field estimated by constructor and setter. + * Sets the field name as stored in the builder. * - * @param fieldNameEstimated the estimated name to set for this field + * @param fieldNameInBuilder the field name to use in the builder */ - public void setFieldNameEstimated(String fieldNameEstimated) { - this.fieldNameEstimated = fieldNameEstimated; + public void setFieldNameInBuilder(String fieldNameInBuilder) { + this.fieldNameInBuilder = fieldNameInBuilder; } /** - * Getting name of setter method to use in build() method. This is always set during field - * creation and represents the actual setter method name in the DTO. + * Gets the setter method name for this field. The setter name is derived from the original field + * name and follows JavaBean conventions (e.g., "userName" becomes "setUserName"). * - * @return name of setter for field (never null) + * @return the setter method name for this field (never null) */ public String getSetterName() { - return "set" + StringUtils.capitalize(fieldNameEstimated); + return "set" + StringUtils.capitalize(originalFieldName); } /** diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/AddToCollectionGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/AddToCollectionGenerator.java index 1a05cbfe..209d719f 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/AddToCollectionGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/AddToCollectionGenerator.java @@ -101,8 +101,8 @@ public List generateMethods( if (fieldType instanceof TypeNameList listType && listType.isParameterized()) { MethodDto addMethod = createAddToCollectionMethod( - field.getFieldNameEstimated(), - field.getFieldName(), + field.getOriginalFieldName(), + field.getFieldNameInBuilder(), listType, listType.getElementType(), builderType, @@ -111,8 +111,8 @@ public List generateMethods( } else if (fieldType instanceof TypeNameSet setType && setType.isParameterized()) { MethodDto addMethod = createAddToCollectionMethod( - field.getFieldNameEstimated(), - field.getFieldName(), + field.getOriginalFieldName(), + field.getFieldNameInBuilder(), setType, setType.getElementType(), builderType, @@ -124,13 +124,13 @@ public List generateMethods( } private MethodDto createAddToCollectionMethod( - String fieldNameEstimated, - String fieldName, + String originalFieldName, + String fieldNameInBuilder, TypeName fieldType, TypeName elementType, TypeName builderType, ProcessingContext context) { - String methodName = "add2" + StringUtils.capitalize(fieldNameEstimated); + String methodName = "add2" + StringUtils.capitalize(originalFieldName); MethodDto methodDto = new MethodDto(methodName, builderType); MethodParameterDto parameter = new MethodParameterDto(); @@ -166,7 +166,7 @@ private MethodDto createAddToCollectionMethod( """); methodDto.addArgument("collectionVarType", collectionVarType); methodDto.addArgument("collectionImpl", new TypeName("java.util", collectionImpl)); - methodDto.addArgument("fieldName", fieldName); + methodDto.addArgument("fieldName", fieldNameInBuilder); methodDto.addArgument("elementType", elementType); methodDto.addArgument("builderFieldWrapper", TRACKED_VALUE_TYPE); methodDto.setPriority(MethodDto.PRIORITY_MEDIUM); @@ -178,7 +178,7 @@ private MethodDto createAddToCollectionMethod( @param element the element to add @return current instance of builder """ - .formatted(fieldName)); + .formatted(originalFieldName)); return methodDto; } diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayBuilderConsumerGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayBuilderConsumerGenerator.java index d3831046..0b78ed4d 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayBuilderConsumerGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayBuilderConsumerGenerator.java @@ -112,8 +112,8 @@ private MethodDto createFieldConsumerWithArrayBuilder( TypeName elementType, TypeName returnBuilderType, ProcessingContext context) { - String fieldName = field.getFieldNameEstimated(); - String fieldNameInBuilder = field.getFieldName(); + String fieldName = field.getOriginalFieldName(); + String fieldNameInBuilder = field.getFieldNameInBuilder(); TypeNameGeneric builderTypeGeneric = new TypeNameGeneric(collectionBuilderType, elementType); TypeNameGeneric consumerType = MethodGeneratorUtil.createConsumerType(builderTypeGeneric); diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayConversionGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayConversionGenerator.java index 089e76ae..8e448752 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayConversionGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/ArrayConversionGenerator.java @@ -103,8 +103,8 @@ private MethodDto createFieldSetterForArrayFromList( TypeName elementType, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldNameEstimated(); - String fieldNameInBuilder = field.getFieldName(); + String fieldName = field.getOriginalFieldName(); + String fieldNameInBuilder = field.getFieldNameInBuilder(); MethodParameterDto parameter = new MethodParameterDto(); parameter.setParameterName(fieldName); parameter.setParameterTypeName(listType); diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/CoreMethodsEnhancer.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/CoreMethodsEnhancer.java index 87126106..dbbdb338 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/CoreMethodsEnhancer.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/CoreMethodsEnhancer.java @@ -134,17 +134,17 @@ protected MethodDto createBuildMethod(BuilderDefinitionDto builderDto) { for (var field : builderDto.getConstructorFieldsForBuilder()) { if (field.isNonNullable()) { code.append("if (!this.") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append(".isSet()) {\n") .append(" throw new IllegalStateException(\"Required field '") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append("' must be set before calling build()\");\n") .append("}\n"); code.append("if (this.") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append(".value() == null) {\n") .append(" throw new IllegalStateException(\"Field '") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append("' is marked as non-null but null value was provided\");\n") .append("}\n"); } @@ -154,12 +154,12 @@ protected MethodDto createBuildMethod(BuilderDefinitionDto builderDto) { for (var field : builderDto.getSetterFieldsForBuilder()) { if (field.isNonNullable()) { code.append("if (this.") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append(".isSet() && this.") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append(".value() == null) {\n") .append(" throw new IllegalStateException(\"Field '") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append("' is marked as non-null but null value was provided\");\n") .append("}\n"); } @@ -180,7 +180,7 @@ protected MethodDto createBuildMethod(BuilderDefinitionDto builderDto) { // Apply setter-based fields for (var field : builderDto.getSetterFieldsForBuilder()) { code.append("this.") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append(".ifSet(result::") .append(field.getSetterName()) .append(");\n"); @@ -277,7 +277,7 @@ protected MethodDto createToStringMethod(BuilderDefinitionDto builderDto) { /** Creates the constructor arguments string for the build() method. */ private String createConstructorArgsString(BuilderDefinitionDto builderDto) { return builderDto.getConstructorFieldsForBuilder().stream() - .map(field -> "this." + field.getFieldName() + ".value()") + .map(field -> "this." + field.getFieldNameInBuilder() + ".value()") .reduce((a, b) -> a + ", " + b) .orElse(""); } @@ -294,9 +294,9 @@ private String createToStringAppendCalls(BuilderDefinitionDto builderDto) { for (int i = 0; i < allFields.size(); i++) { FieldDto field = allFields.get(i); sb.append("\n .append(\"") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append("\", this.") - .append(field.getFieldName()) + .append(field.getFieldNameInBuilder()) .append(")"); } diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/GeneratorRegistry.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/GeneratorRegistry.java index 40a29b66..d7417a26 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/GeneratorRegistry.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/GeneratorRegistry.java @@ -108,7 +108,7 @@ public List generateAllMethods( } catch (Exception e) { context.error( "Failed to apply method generator %s to field %s: %s", - generator.getClass().getName(), field.getFieldName(), e.getMessage()); + generator.getClass().getName(), field.getFieldNameInBuilder(), e.getMessage()); } } } diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/MethodGeneratorUtil.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/MethodGeneratorUtil.java index 4e6db6c0..28509835 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/MethodGeneratorUtil.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/MethodGeneratorUtil.java @@ -147,7 +147,7 @@ public static MethodDto createBuilderMethodForFieldWithTransform( ProcessingContext context) { MethodParameterDto parameter = new MethodParameterDto(); - parameter.setParameterName(field.getFieldNameEstimated()); + parameter.setParameterName(field.getOriginalFieldName()); parameter.setParameterTypeName(parameterType); if (field.getParameterAnnotations() != null) { @@ -156,7 +156,7 @@ public static MethodDto createBuilderMethodForFieldWithTransform( MethodDto methodDto = new MethodDto( - generateBuilderMethodName(field.getFieldNameEstimated(), context), builderType); + generateBuilderMethodName(field.getOriginalFieldName(), context), builderType); methodDto.addParameter(parameter); setMethodAccessModifier(methodDto, getMethodAccessModifier(context)); @@ -172,7 +172,7 @@ public static MethodDto createBuilderMethodForFieldWithTransform( this.$fieldName:N = $builderFieldWrapper:T.changedValue($dtoMethodParams:N); return this; """); - methodDto.addArgument("fieldName", field.getFieldName()); + methodDto.addArgument("fieldName", field.getFieldNameInBuilder()); methodDto.addArgument("dtoMethodParams", params); methodDto.addArgument("builderFieldWrapper", TRACKED_VALUE_TYPE); @@ -186,7 +186,7 @@ public static MethodDto createBuilderMethodForFieldWithTransform( @return current instance of builder """ .formatted( - field.getFieldNameEstimated(), parameter.getParameterName(), field.getJavaDoc())); + field.getOriginalFieldName(), parameter.getParameterName(), field.getJavaDoc())); return methodDto; } @@ -213,10 +213,11 @@ public static MethodDto createFieldConsumerWithBuilder( ProcessingContext context) { TypeNameGeneric consumerType = createConsumerType(fieldBuilderType); MethodParameterDto parameter = new MethodParameterDto(); - parameter.setParameterName(field.getFieldName() + BUILDER_SUFFIX + SUFFIX_CONSUMER); + parameter.setParameterName(field.getFieldNameInBuilder() + BUILDER_SUFFIX + SUFFIX_CONSUMER); parameter.setParameterTypeName(consumerType); MethodDto methodDto = - new MethodDto(generateBuilderMethodName(field.getFieldName(), context), parentBuilderType); + new MethodDto( + generateBuilderMethodName(field.getOriginalFieldName(), context), parentBuilderType); methodDto.addParameter(parameter); setMethodAccessModifier(methodDto, getMethodAccessModifier(context)); @@ -230,7 +231,7 @@ public static MethodDto createFieldConsumerWithBuilder( return this; """ .formatted(existingValueConstructorArgs, emptyConstructorArgs)); - methodDto.addArgument("fieldName", field.getFieldName()); + methodDto.addArgument("fieldName", field.getFieldNameInBuilder()); methodDto.addArgument("dtoMethodParam", parameter.getParameterName()); methodDto.addArgument("helperType", fieldBuilderType); methodDto.addArgument("buildExpression", buildExpression); @@ -244,7 +245,8 @@ public static MethodDto createFieldConsumerWithBuilder( @param %s consumer providing an instance of a builder for %s @return current instance of builder """ - .formatted(field.getFieldName(), parameter.getParameterName(), field.getJavaDoc())); + .formatted( + field.getFieldNameInBuilder(), parameter.getParameterName(), field.getJavaDoc())); return methodDto; } @@ -343,12 +345,12 @@ public static MethodDto createSimpleFieldConsumer( FieldDto field, TypeName fieldType, TypeName builderType, ProcessingContext context) { TypeNameGeneric consumerType = createConsumerType(fieldType); MethodParameterDto parameter = new MethodParameterDto(); - parameter.setParameterName(field.getFieldNameEstimated() + SUFFIX_CONSUMER); + parameter.setParameterName(field.getOriginalFieldName() + SUFFIX_CONSUMER); parameter.setParameterTypeName(consumerType); MethodDto methodDto = new MethodDto( - generateBuilderMethodName(field.getFieldNameEstimated(), context), builderType); + generateBuilderMethodName(field.getOriginalFieldName(), context), builderType); methodDto.addParameter(parameter); setMethodAccessModifier(methodDto, getMethodAccessModifier(context)); @@ -359,7 +361,7 @@ public static MethodDto createSimpleFieldConsumer( this.$fieldName:N = $builderFieldWrapper:T.changedValue(consumer); return this; """); - methodDto.addArgument("fieldName", field.getFieldName()); + methodDto.addArgument("fieldName", field.getFieldNameInBuilder()); methodDto.addArgument("dtoMethodParam", parameter.getParameterName()); methodDto.addArgument("helperType", fieldType); methodDto.addArgument("builderFieldWrapper", TRACKED_VALUE_TYPE); @@ -373,7 +375,7 @@ public static MethodDto createSimpleFieldConsumer( @return current instance of builder """ .formatted( - field.getFieldNameEstimated(), parameter.getParameterName(), field.getJavaDoc())); + field.getOriginalFieldName(), parameter.getParameterName(), field.getJavaDoc())); return methodDto; } diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringBuilderConsumerGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringBuilderConsumerGenerator.java index 06436d01..7d4bc3c3 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringBuilderConsumerGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringBuilderConsumerGenerator.java @@ -104,8 +104,8 @@ public List generateMethods( : "builder.toString()"; MethodDto method = createStringBuilderConsumer( - field.getFieldName(), - field.getFieldName(), + field.getOriginalFieldName(), + field.getFieldNameInBuilder(), field.getJavaDoc(), transform, builderType, diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringFormatHelperGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringFormatHelperGenerator.java index 53ad6d6d..1739213e 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringFormatHelperGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/StringFormatHelperGenerator.java @@ -111,8 +111,8 @@ public List generateMethods( if (isString(fieldType) && !(fieldType instanceof TypeNameArray)) { MethodDto method = createStringFormatMethodWithTransform( - field.getFieldNameEstimated(), - field.getFieldName(), + field.getOriginalFieldName(), + field.getFieldNameInBuilder(), "String.format(format, args)", field.getParameterAnnotations(), builderType, @@ -124,8 +124,8 @@ public List generateMethods( if (!innerTypes.isEmpty() && isString(innerTypes.get(0))) { MethodDto method = createStringFormatMethodWithTransform( - field.getFieldNameEstimated(), - field.getFieldName(), + field.getOriginalFieldName(), + field.getFieldNameInBuilder(), "Optional.of(String.format(format, args))", field.getParameterAnnotations(), builderType, diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/SupplierMethodGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/SupplierMethodGenerator.java index 3e7ee2c9..510171e7 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/SupplierMethodGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/SupplierMethodGenerator.java @@ -92,8 +92,8 @@ public List generateMethods( MethodDto supplierMethod = createFieldSupplier( - field.getFieldNameEstimated(), - field.getFieldName(), + field.getOriginalFieldName(), + field.getFieldNameInBuilder(), field.getJavaDoc(), field.getFieldType(), builderType, diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/util/BuilderDefinitionCreator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/util/BuilderDefinitionCreator.java index 103e9341..a4e8d96e 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/util/BuilderDefinitionCreator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/util/BuilderDefinitionCreator.java @@ -170,7 +170,7 @@ private static List extractSetterFields( // Build a set of constructor field names to avoid duplicates from setters Set ctorFieldNames = result.getConstructorFieldsForBuilder().stream() - .map(FieldDto::getFieldName) + .map(FieldDto::getFieldNameInBuilder) .collect(toSet()); List methods = findAllPossibleSettersOfClass(annotatedType, context); @@ -235,7 +235,8 @@ private static void logFieldAddition(FieldDto field, ProcessingContext context) && !field.getFieldType().getPackageName().isEmpty()) { fieldTypeName = field.getFieldType().getPackageName() + "." + fieldTypeName; } - context.debugEndOperation("Adding field: %s (type: %s)", field.getFieldName(), fieldTypeName); + context.debugEndOperation( + "Adding field: %s (type: %s)", field.getFieldNameInBuilder(), fieldTypeName); } private static boolean isMethodRelevantForBuilder( @@ -437,8 +438,9 @@ private static Optional createFieldDto( TypeMirror fieldTypeMirror = param.asType(); FieldDto field = new FieldDto(); - field.setFieldName(fieldNameInBuilder); // Use renamed field name for builder field storage - field.setFieldNameEstimated(fieldName); + field.setFieldNameInBuilder( + fieldNameInBuilder); // Use renamed field name for builder field storage + field.setOriginalFieldName(fieldName); field.setFieldType(fieldType); field.setJavaDoc(javaDoc); diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/util/JavaCodeGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/util/JavaCodeGenerator.java index d5d63acc..6b2a0ed5 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/util/JavaCodeGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/util/JavaCodeGenerator.java @@ -378,7 +378,7 @@ private String getSourceDescription(MethodDto method, FieldDto field) { if (field == null) { return "core method '" + method.getMethodName() + "'"; } else { - return "field '" + field.getFieldName() + "'"; + return "field '" + field.getFieldNameInBuilder() + "'"; } } @@ -453,18 +453,18 @@ private void addFieldInitializationWithValidation( // Initialize field from source instance cb.addStatement( "this.$N = $T.initialValue(instance.$N())", - field.getFieldName(), + field.getFieldNameInBuilder(), ClassName.get(TrackedValue.class), getter); // Validate non-nullable fields immediately - fail fast if source object is invalid if (field.isNonNullable()) { - cb.beginControlFlow("if (this.$N.value() == null)", field.getFieldName()) + cb.beginControlFlow("if (this.$N.value() == null)", field.getFieldNameInBuilder()) .addStatement( "throw new $T($S)", IllegalArgumentException.class, "Cannot initialize builder from instance: field '" - + field.getFieldName() + + field.getFieldNameInBuilder() + "' is marked as non-null but source object has null value") .endControlFlow(); } @@ -480,10 +480,10 @@ private FieldSpec createFieldMember(FieldDto fieldDto) { ParameterizedTypeName wrappedFieldType = ParameterizedTypeName.get(builderFieldWrapper, fieldType); - return FieldSpec.builder(wrappedFieldType, fieldDto.getFieldName(), Modifier.PRIVATE) + return FieldSpec.builder(wrappedFieldType, fieldDto.getFieldNameInBuilder(), Modifier.PRIVATE) .addJavadoc( "Tracked value for $L: $L.\n", - fieldDto.getFieldName(), + fieldDto.getFieldNameInBuilder(), fieldDto.getJavaDoc()) .initializer("$T.unsetValue()", builderFieldWrapper) .build(); diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/CustomizingDocumentationTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/CustomizingDocumentationTest.java index b6093578..07e43676 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/CustomizingDocumentationTest.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/CustomizingDocumentationTest.java @@ -195,7 +195,7 @@ public boolean appliesTo(FieldDto field, TypeName dtoType, ProcessingContext con @Override public List generateMethods(FieldDto field, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldName(); + String fieldName = field.getFieldNameInBuilder(); String methodName = "custom" + capitalize(fieldName); MethodDto method = new MethodDto(methodName, builderType); @@ -302,7 +302,7 @@ public List generateMethods(FieldDto field, TypeName builderType, Pro // Generation logic return List.of(); } catch (Exception e) { - context.error("Failed to generate method for field %s: %s", field.getFieldName(), e.getMessage()); + context.error("Failed to generate method for field %s: %s", field.getFieldNameInBuilder(), e.getMessage()); return List.of(); // Return empty list on error } } @@ -408,7 +408,7 @@ public boolean appliesTo(FieldDto field, TypeName dtoType, ProcessingContext con @Override public List generateMethods(FieldDto field, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldName(); + String fieldName = field.getFieldNameInBuilder(); String methodName = "validated" + capitalize(fieldName); MethodDto method = new MethodDto(methodName, builderType); @@ -589,7 +589,7 @@ public boolean appliesTo(FieldDto field, TypeName dtoType, ProcessingContext con @Override public List generateMethods(FieldDto field, TypeName builderType, ProcessingContext context) { - String fieldName = field.getFieldName(); + String fieldName = field.getFieldNameInBuilder(); String methodName = fieldName + "FromString"; MethodDto method = new MethodDto(methodName, builderType);