From 3f9bd25edcdfde325bcbf4ad4df9089ce838d68c Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sun, 11 Oct 2026 23:45:30 +0000 Subject: [PATCH 1/2] feat!: rename setterSuffix option to setterPrefix (#342) The option was applied as a prefix (setterSuffix + capitalize(field)), never a suffix. Hard rename across the annotation element, BuilderConfiguration, the -Asimplebuilder.setterPrefix compiler arg and docs, with no compatibility alias. --- .../core/annotations/SimpleBuilder.java | 18 +++++++------- .../annotations/SimpleMinimalBuilder.java | 2 +- docs/CONFIGURATION.md | 10 ++++---- .../builder/JacksonAnnotationEnhancer.java | 2 +- .../field/AddToCollectionGenerator.java | 2 +- .../generators/util/MethodGeneratorUtil.java | 6 ++--- .../model/core/BuilderConfiguration.java | 22 ++++++++--------- .../processing/CompilerArgumentsEnum.java | 4 ++-- .../processor/AddToCollectionTest.java | 8 +++---- .../BuilderConfigurationReaderTest.java | 14 +++++------ .../CompilerArgumentsReaderTest.java | 10 ++++---- .../ConfigurationProcessingTest.java | 24 +++++++++---------- .../processor/JacksonSupportTest.java | 2 +- .../testing/MyBuliderForTestAnnotation.java | 2 +- 14 files changed, 63 insertions(+), 63 deletions(-) diff --git a/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleBuilder.java b/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleBuilder.java index a25aa35d..0ff272c3 100644 --- a/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleBuilder.java +++ b/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleBuilder.java @@ -637,7 +637,7 @@ /** * Add Jackson annotations to the generated builder class.
* Adds {@code @JsonPOJOBuilder(withPrefix = "...")} to the builder class. The prefix matches - * the configured {@link #setterSuffix()}. + * the configured {@link #setterPrefix()}. * *

Example: * @@ -858,15 +858,15 @@ String builderUsageSuffix() default ""; /** - * Suffix to append to setter method names in the generated builder.
- * For example, with suffix "with", a field named "name" will generate "withName()".
- * When a suffix is set, the field name is capitalized after the suffix. + * Prefix to prepend to setter method names in the generated builder.
+ * For example, with prefix "with", a field named "name" will generate "withName()".
+ * When a prefix is set, the field name is capitalized after the prefix. * *

Example: * *

{@code
      * @SimpleBuilder(options = @SimpleBuilder.Options(
-     *     setterSuffix = "with"
+     *     setterPrefix = "with"
      * ))
      * public class PersonDto {
      *     // Generates: withName(String) instead of name(String)
@@ -878,12 +878,12 @@
      *     .build();
      * }
* - * Default: "" (empty - no suffix)
- * Compiler option: -Asimplebuilder.setterSuffix + * Default: "" (empty - no prefix)
+ * Compiler option: -Asimplebuilder.setterPrefix * - * @return the suffix for setter method names + * @return the prefix for setter method names */ - String setterSuffix() default ""; + String setterPrefix() default ""; /** * Formatting mode for the generated source code.
diff --git a/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleMinimalBuilder.java b/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleMinimalBuilder.java index 937900bb..9f8ba2b6 100644 --- a/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleMinimalBuilder.java +++ b/core/src/main/java/org/javahelpers/simple/builders/core/annotations/SimpleMinimalBuilder.java @@ -97,7 +97,7 @@ usingExistingBuilders = OptionState.DISABLED, usingFieldFunctionPrefill = OptionState.DISABLED, builderSuffix = "Builder", - setterSuffix = "", + setterPrefix = "", formattingMode = "lightweight")) @Retention(RetentionPolicy.CLASS) @Target(ElementType.TYPE) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index d8e8cea9..bfb7932e 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1154,15 +1154,15 @@ public class ExternalBuilders { } --- -#### `setterSuffix` +#### `setterPrefix` -**Default**: `""` (empty) | **Compiler Option**: `-Asimplebuilder.setterSuffix=customPrefix` +**Default**: `""` (empty) | **Compiler Option**: `-Asimplebuilder.setterPrefix=customPrefix` Adds a prefix to all setter method names. **Example**: ```java -@SimpleBuilder.Options(setterSuffix = "with") +@SimpleBuilder.Options(setterPrefix = "with") public class PersonDto { private String name; } @@ -1698,7 +1698,7 @@ methodAccess = AccessModifier.PRIVATE # Naming -Asimplebuilder.builderSuffix=CustomSuffix --Asimplebuilder.setterSuffix=customPrefix +-Asimplebuilder.setterPrefix=customPrefix # Reliability -Asimplebuilder.strict=ENABLED|DISABLED @@ -1762,7 +1762,7 @@ methodAccess = AccessModifier.PRIVATE // Naming builderSuffix = "Builder", - setterSuffix = "" + setterPrefix = "" ) public class ExampleDto { private String name; diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/builder/JacksonAnnotationEnhancer.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/builder/JacksonAnnotationEnhancer.java index e38948b5..f15f3dae 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/builder/JacksonAnnotationEnhancer.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/builder/JacksonAnnotationEnhancer.java @@ -118,7 +118,7 @@ private AnnotationDto createJsonPOJOBuilderAnnotation(BuilderDefinitionDto build new TypeName("com.fasterxml.jackson.databind.annotation", "JsonPOJOBuilder")); // Add withPrefix member with the setter prefix from configuration - String setterPrefix = builderDto.getConfiguration().getSetterSuffix(); + String setterPrefix = builderDto.getConfiguration().getSetterPrefix(); if (setterPrefix != null) { annotation.addMember("withPrefix", "\"" + setterPrefix + "\""); } else { diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/AddToCollectionGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/AddToCollectionGenerator.java index 8407de81..fc1ff40d 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/AddToCollectionGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/AddToCollectionGenerator.java @@ -47,7 +47,7 @@ * *

This generator creates methods that add single elements to collection fields, supporting both * List and Set types. The generated methods follow the pattern "add2{#FieldName}" and always use - * this naming convention regardless of setter suffix configuration. + * this naming convention regardless of setter prefix configuration. * *

Important behavior: The generated methods preserve immutability by creating a new * collection instance. If the field already has a value, the method creates a copy of the existing diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/util/MethodGeneratorUtil.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/util/MethodGeneratorUtil.java index fa190c46..4517f58e 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/util/MethodGeneratorUtil.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/util/MethodGeneratorUtil.java @@ -85,11 +85,11 @@ private MethodGeneratorUtil() { * @return the method name with prefix applied */ public static String generateBuilderMethodName(String fieldName, ProcessingContext context) { - String suffix = context.getConfiguration().getSetterSuffix(); - if (suffix == null || suffix.isEmpty()) { + String prefix = context.getConfiguration().getSetterPrefix(); + if (prefix == null || prefix.isEmpty()) { return fieldName; } - return suffix + StringUtils.capitalize(fieldName); + return prefix + StringUtils.capitalize(fieldName); } /** diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/model/core/BuilderConfiguration.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/model/core/BuilderConfiguration.java index 45edb180..75d1ee04 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/model/core/BuilderConfiguration.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/model/core/BuilderConfiguration.java @@ -79,7 +79,7 @@ * @param builderSuffix Suffix for builder class name * @param builderUsageSuffix Suffix for builder class name when referencing builders from the usage * scope; null means fall back to {@code builderSuffix} - * @param setterSuffix Suffix for setter method names + * @param setterPrefix Prefix for setter method names * @param formattingMode Formatting mode for generated source code (null = inherit from compiler * arg) * @param strict Strict/fail-fast generation mode @@ -118,7 +118,7 @@ public record BuilderConfiguration( OptionState usingFieldFunctionPrefill, String builderSuffix, String builderUsageSuffix, - String setterSuffix, + String setterPrefix, String formattingMode, OptionState strict) { @@ -162,7 +162,7 @@ public record BuilderConfiguration( .usingExistingBuilders(ENABLED) .usingFieldFunctionPrefill(ENABLED) .builderSuffix("Builder") - .setterSuffix("") + .setterPrefix("") .formattingMode(FormattingMode.JDT.getOptionValue()) .strict(DISABLED) .build(); @@ -322,8 +322,8 @@ public String getBuilderUsageSuffix() { return StringUtils.defaultIfBlank(builderUsageSuffix, builderSuffix); } - public String getSetterSuffix() { - return setterSuffix; + public String getSetterPrefix() { + return setterPrefix; } public boolean isStrictModeEnabled() { @@ -411,7 +411,7 @@ public BuilderConfiguration merge(BuilderConfiguration other) { mergeOptionState(other.usingFieldFunctionPrefill, this.usingFieldFunctionPrefill)) .builderSuffix(mergeString(other.builderSuffix, this.builderSuffix)) .builderUsageSuffix(mergeString(other.builderUsageSuffix, this.builderUsageSuffix)) - .setterSuffix(mergeString(other.setterSuffix, this.setterSuffix)) + .setterPrefix(mergeString(other.setterPrefix, this.setterPrefix)) .formattingMode(mergeString(other.formattingMode, this.formattingMode)) .strict(mergeOptionState(other.strict, this.strict)) .build(); @@ -502,7 +502,7 @@ public String toString() { .appendValueIfSet("usingFieldFunctionPrefill", usingFieldFunctionPrefill) .appendIfNotEmpty("builderSuffix", builderSuffix) .appendIfNotEmpty("builderUsageSuffix", builderUsageSuffix) - .appendIfNotEmpty("setterSuffix", setterSuffix) + .appendIfNotEmpty("setterPrefix", setterPrefix) .appendIfNotEmpty("formattingMode", formattingMode) .appendValueIfSet("strict", strict) .toString(); @@ -587,7 +587,7 @@ public static class Builder { // === Naming === private String builderSuffix = null; private String builderUsageSuffix = null; - private String setterSuffix = null; + private String setterPrefix = null; // === Formatting === private String formattingMode = null; @@ -912,8 +912,8 @@ public Builder builderUsageSuffix(String value) { return this; } - public Builder setterSuffix(String value) { - this.setterSuffix = value == null ? null : value.trim(); + public Builder setterPrefix(String value) { + this.setterPrefix = value == null ? null : value.trim(); return this; } @@ -967,7 +967,7 @@ public BuilderConfiguration build() { usingFieldFunctionPrefill, builderSuffix, builderUsageSuffix, - setterSuffix, + setterPrefix, formattingMode, strict); } diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/processing/CompilerArgumentsEnum.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/processing/CompilerArgumentsEnum.java index 6fa81777..34923e8d 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/processing/CompilerArgumentsEnum.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/processing/CompilerArgumentsEnum.java @@ -172,8 +172,8 @@ public enum CompilerArgumentsEnum { /** Option for builder class name suffix when referencing usage-scope builders. */ BUILDER_USAGE_SUFFIX("builderUsageSuffix", string(Builder::builderUsageSuffix)), - /** Option for setter method name suffix. */ - SETTER_SUFFIX("setterSuffix", string(Builder::setterSuffix)), + /** Option for setter method name prefix. */ + SETTER_PREFIX("setterPrefix", string(Builder::setterPrefix)), // === Component Filtering === /** diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/AddToCollectionTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/AddToCollectionTest.java index b051593f..6f11ecf9 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/AddToCollectionTest.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/AddToCollectionTest.java @@ -162,7 +162,7 @@ public java.util.List getTasks() { } @Test - void add2Method_ignoresSetterSuffix() { + void add2Method_ignoresSetterPrefix() { JavaFileObject dto = com.google.testing.compile.JavaFileObjects.forSourceLines( "test.PersonDto", @@ -170,7 +170,7 @@ void add2Method_ignoresSetterSuffix() { "import java.util.List;", "@org.javahelpers.simple.builders.core.annotations.SimpleBuilder(", " options = @org.javahelpers.simple.builders.core.annotations.SimpleBuilder.Options(", - " setterSuffix = \"with\"", + " setterPrefix = \"with\"", " )", ")", "public class PersonDto {", @@ -195,13 +195,13 @@ void add2Method_ignoresSetterSuffix() { String generatedCode = loadGeneratedSource(compilation, "PersonDtoBuilder"); assertGenerationSucceeded(compilation, "PersonDtoBuilder", generatedCode); - // Verify regular setter respects setterSuffix + // Verify regular setter respects setterPrefix ProcessorAsserts.assertContaining( generatedCode, "public PersonDtoBuilder withName(String name)"); ProcessorAsserts.assertContaining( generatedCode, "public PersonDtoBuilder withNicknames(List nicknames)"); - // Verify add2 method does NOT respect setterSuffix - always uses add2FieldName pattern + // Verify add2 method does NOT respect setterPrefix - always uses add2FieldName pattern ProcessorAsserts.assertContaining( generatedCode, "public PersonDtoBuilder add2Nicknames(String element)"); diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/BuilderConfigurationReaderTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/BuilderConfigurationReaderTest.java index e50451be..be8600e7 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/BuilderConfigurationReaderTest.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/BuilderConfigurationReaderTest.java @@ -80,7 +80,7 @@ void readFromOptions_WithOptionsAnnotation_AppliesAllOptions() { builderAccess = AccessModifier.PACKAGE_PRIVATE, methodAccess = AccessModifier.PACKAGE_PRIVATE, builderSuffix = "Factory", - setterSuffix = "with" + setterPrefix = "with" )) public class PersonDto { private String name; @@ -107,7 +107,7 @@ public class PersonDto { // Verify class access is PACKAGE_PRIVATE ProcessorAsserts.assertNotContaining(generatedCode, "public class PersonDtoFactory"); - // Verify setterSuffix="with" + // Verify setterPrefix="with" ProcessorAsserts.assertContaining(generatedCode, "PersonDtoFactory withName(String name)"); ProcessorAsserts.assertContaining(generatedCode, "PersonDtoFactory withTags("); @@ -211,7 +211,7 @@ void readFromTemplate_InlineTemplateDefinition_AppliesTemplateConfiguration() { generateConditionalHelper = OptionState.DISABLED, generateWithInterface = OptionState.DISABLED, builderSuffix = "InlineBuilder", - setterSuffix = "update" + setterPrefix = "update" )) @Retention(RetentionPolicy.CLASS) @Target(ElementType.TYPE) @@ -268,7 +268,7 @@ void resolveConfiguration_OptionsOverridesTemplate_AppliesPriorityCorrectly() { @MyBuliderForTestAnnotation @SimpleBuilder(options = @SimpleBuilder.Options( builderSuffix = "OptionsBuilder", - setterSuffix = "set" + setterPrefix = "set" )) public class PersonDto { private String name; @@ -329,7 +329,7 @@ public class PersonDto { ProcessorTestUtils.createCompiler() .withOptions( "-Asimplebuilder.builderSuffix=CustomBuilder", - "-Asimplebuilder.setterSuffix=set", + "-Asimplebuilder.setterPrefix=set", "-Asimplebuilder.generateVarArgsHelpers=false") .compile(source); @@ -400,7 +400,7 @@ public class PersonDto { * helpers, unboxed optional, collection builders, annotations * (@Generated, @BuilderImplementation) *

  • Compiler args: Disable conditional helper, with interface, string format helpers - *
  • Inline options: Custom naming (builderSuffix, setterSuffix) + *
  • Inline options: Custom naming (builderSuffix, setterPrefix) *
  • Template: Ignored (because @SimpleBuilder is present) * */ @@ -429,7 +429,7 @@ void resolveConfiguration_AllLayersTogether_CompleteChain() { usingBuilderImplementationAnnotation = OptionState.DISABLED, usingJacksonDeserializerAnnotation = OptionState.DISABLED, builderSuffix = "MinimalBuilder", - setterSuffix = "with" + setterPrefix = "with" )) public class PersonDto { private String name; diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/CompilerArgumentsReaderTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/CompilerArgumentsReaderTest.java index 212e7fce..300347ef 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/CompilerArgumentsReaderTest.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/CompilerArgumentsReaderTest.java @@ -214,7 +214,7 @@ void readBuilderConfiguration_NoArguments_ReturnsDefaults() { assertEquals(AccessModifier.DEFAULT, config.getBuilderConstructorAccess()); assertEquals(AccessModifier.DEFAULT, config.getMethodAccess()); assertNull(config.getBuilderSuffix(), "Builder suffix should be null when not set"); - assertNull(config.getSetterSuffix(), "Setter suffix should be null when not set"); + assertNull(config.getSetterPrefix(), "Setter prefix should be null when not set"); assertTrue( config.getBuilderGenerationPackagesSet().isEmpty(), "Builder generation packages should be empty when not set"); @@ -238,7 +238,7 @@ void readBuilderConfiguration_AllOptionsSet_ReadsCorrectly() { .put("simplebuilder.generateUpdateHelpers", "enabled") .put("simplebuilder.copyTypeAnnotations", "enabled") .put("simplebuilder.builderSuffix", "Factory") - .put("simplebuilder.setterSuffix", "with") + .put("simplebuilder.setterPrefix", "with") .put("simplebuilder.builderGenerationPackages", "a.b, c.d") .put("simplebuilder.builderUsagePackages", "x.y") .build(); @@ -257,7 +257,7 @@ void readBuilderConfiguration_AllOptionsSet_ReadsCorrectly() { assertEquals(OptionState.ENABLED, config.generateUpdateHelpers()); assertEquals(OptionState.ENABLED, config.copyTypeAnnotations()); assertEquals("Factory", config.getBuilderSuffix()); - assertEquals("with", config.getSetterSuffix()); + assertEquals("with", config.getSetterPrefix()); assertEquals(Set.of("a.b", "c.d"), config.getBuilderGenerationPackagesSet()); assertEquals(Set.of("x.y"), config.getBuilderUsagePackagesSet()); } @@ -294,7 +294,7 @@ void readBuilderConfiguration_EmptyStringValues_HandlesGracefully() { .put("simplebuilder.generateFieldSupplier", "") .put("simplebuilder.builderAccess", "") .put("simplebuilder.builderSuffix", "") - .put("simplebuilder.setterSuffix", "") + .put("simplebuilder.setterPrefix", "") .build(); CompilerArgumentsReader reader = new CompilerArgumentsReader(env); @@ -304,6 +304,6 @@ void readBuilderConfiguration_EmptyStringValues_HandlesGracefully() { assertEquals(OptionState.UNSET, config.generateFieldSupplier(), "Empty should be UNSET"); assertEquals(AccessModifier.DEFAULT, config.getBuilderAccess(), "Empty should be DEFAULT"); assertEquals("", config.getBuilderSuffix(), "Empty string should be preserved for suffix"); - assertEquals("", config.getSetterSuffix(), "Empty string should be preserved for suffix"); + assertEquals("", config.getSetterPrefix(), "Empty string should be preserved for prefix"); } } diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/ConfigurationProcessingTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/ConfigurationProcessingTest.java index 24801cb5..bc03df33 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/ConfigurationProcessingTest.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/ConfigurationProcessingTest.java @@ -89,7 +89,7 @@ void allConfigurationOptions_AccessNamingAndFormatting_MustBeReadable() { assertEquals(AccessModifier.PRIVATE, config.getBuilderConstructorAccess()); assertEquals(AccessModifier.PACKAGE_PRIVATE, config.getMethodAccess()); assertEquals("Builder", config.getBuilderSuffix()); - assertEquals("", config.getSetterSuffix()); + assertEquals("", config.getSetterPrefix()); assertEquals("lightweight", config.formattingMode()); assertEquals(Set.of("a.b"), config.getBuilderGenerationPackagesSet()); assertEquals(Set.of("c.d"), config.getBuilderUsagePackagesSet()); @@ -158,7 +158,7 @@ private static BuilderConfiguration buildFullyConfigured() { .generateJavaDoc(OptionState.ENABLED) // Naming .builderSuffix("Builder") - .setterSuffix("") + .setterPrefix("") // Formatting .formattingMode("lightweight") // Builder scoping @@ -271,7 +271,7 @@ public Address() {} "-Asimplebuilder.usingJacksonDeserializerAnnotation=false", "-Asimplebuilder.generateJavaDoc=false", "-Asimplebuilder.builderSuffix=CustomBuilder", - "-Asimplebuilder.setterSuffix=with") + "-Asimplebuilder.setterPrefix=with") .compile(nestedDto, addressDto, source); // Then: Compilation should succeed @@ -361,7 +361,7 @@ public Address() {} ProcessorAsserts.assertNotContaining( generatedCode, "public MinimalDtoCustomBuilder withName(String name)"); - // But package-private methods should exist - with setterSuffix="with", methods are prefixed + // But package-private methods should exist - with setterPrefix="with", methods are prefixed ProcessorAsserts.assertContaining( generatedCode, "MinimalDtoCustomBuilder withName(String name)", @@ -387,7 +387,7 @@ public Address() {} "MinimalDtoCustomBuilder withProperties(Consumer> propertiesBuilderConsumer)"); // Still generates: basic setters and build method - // With setterSuffix="with", all setter methods should be prefixed with "with" and capitalized + // With setterPrefix="with", all setter methods should be prefixed with "with" and capitalized ProcessorAsserts.assertContaining( generatedCode, "class MinimalDtoCustomBuilder", @@ -566,7 +566,7 @@ void configurationMerge_MustRespectPriority() { .generateSupplier(OptionState.ENABLED) .generateConsumer(OptionState.ENABLED) .builderAccess(AccessModifier.PUBLIC) - .setterSuffix("") + .setterPrefix("") .builderGenerationPackages("base.pkg") .builderUsagePackages("base.lib") .build(); @@ -576,7 +576,7 @@ void configurationMerge_MustRespectPriority() { BuilderConfiguration.builder() .generateSupplier(OptionState.DISABLED) // Override .generateBuilderConsumer(OptionState.DISABLED) // New value - .setterSuffix("with") // Override setterSuffix + .setterPrefix("with") // Override setterPrefix .builderGenerationPackages("override.pkg") // generateConsumer not set, should keep base value .build(); @@ -598,7 +598,7 @@ void configurationMerge_MustRespectPriority() { AccessModifier.PUBLIC, merged.getBuilderAccess(), "Base value should be kept when override is DEFAULT"); - assertEquals("with", merged.getSetterSuffix(), "Override should win for setterSuffix"); + assertEquals("with", merged.getSetterPrefix(), "Override should win for setterPrefix"); assertEquals(Set.of("override.pkg"), merged.getBuilderGenerationPackagesSet()); assertEquals(Set.of("base.lib"), merged.getBuilderUsagePackagesSet()); } @@ -660,7 +660,7 @@ void configurationToString_MustBeHumanReadable() { .generateConsumer(OptionState.ENABLED) .builderAccess(AccessModifier.PRIVATE) .methodAccess(AccessModifier.PACKAGE_PRIVATE) - .setterSuffix("with") + .setterPrefix("with") .build(); String configString = config.toString(); @@ -675,9 +675,9 @@ void configurationToString_MustBeHumanReadable() { assertTrue( configString.contains("PACKAGE_PRIVATE"), "toString should show AccessModifier values"); assertTrue( - configString.contains("setterSuffix"), - "toString should mention setterSuffix when non-default"); - assertTrue(configString.contains("with"), "toString should show setterSuffix value"); + configString.contains("setterPrefix"), + "toString should mention setterPrefix when non-default"); + assertTrue(configString.contains("with"), "toString should show setterPrefix value"); // Verify it's not just a hash code assertTrue(configString.length() > 100, "toString should be detailed, not just class@hashcode"); diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/JacksonSupportTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/JacksonSupportTest.java index e77850dc..3a6a604a 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/JacksonSupportTest.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/JacksonSupportTest.java @@ -58,7 +58,7 @@ void usingJacksonDeserializerAnnotation_WhenEnabled_ShouldGenerateAnnotation() { ProcessorTestUtils.createCompiler() .withOptions( "-Asimplebuilder.usingJacksonDeserializerAnnotation=true", - "-Asimplebuilder.setterSuffix=with") + "-Asimplebuilder.setterPrefix=with") .compile(source); // Then diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/testing/MyBuliderForTestAnnotation.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/testing/MyBuliderForTestAnnotation.java index 94e82ec2..42ceb817 100644 --- a/processor/src/test/java/org/javahelpers/simple/builders/processor/testing/MyBuliderForTestAnnotation.java +++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/testing/MyBuliderForTestAnnotation.java @@ -14,7 +14,7 @@ generateConditionalHelper = OptionState.DISABLED, generateWithInterface = OptionState.DISABLED, builderSuffix = "MiniBuilder", - setterSuffix = "set")) + setterPrefix = "set")) @Retention(RetentionPolicy.CLASS) @Target(ElementType.TYPE) public @interface MyBuliderForTestAnnotation {} From e1095e6254613acc607c6eaf1d7f164c3cb4879f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sun, 11 Oct 2026 23:48:20 +0000 Subject: [PATCH 2/2] docs: drop stale suffix wording in BasicSetterGenerator javadoc (#342) --- .../processor/generators/field/BasicSetterGenerator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/BasicSetterGenerator.java b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/BasicSetterGenerator.java index 9f66352f..a5545cb7 100644 --- a/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/BasicSetterGenerator.java +++ b/processor/src/main/java/org/javahelpers/simple/builders/processor/generators/field/BasicSetterGenerator.java @@ -37,8 +37,8 @@ * Generates basic setter methods for all fields of the builder. * *

    This generator creates the primary setter method for each field, which accepts the field type - * directly and stores it in the builder. The method name follows the configured setter - * prefix/suffix pattern (default is field name without prefix). + * directly and stores it in the builder. The method name follows the configured setter prefix + * pattern (default is field name without prefix). * *

    Important behavior: The generated setter wraps the value using {@code changedValue()} * to track that the field has been explicitly set. This allows distinguishing between fields that @@ -48,7 +48,7 @@ * builder field must have. * *

    This generator cannot be deactivated as it provides the core builder functionality. However, - * the method naming can be configured using the setter prefix/suffix configuration options. + * the method naming can be configured using the setter prefix configuration option. * *

    Example to demonstrate the generated methods

    *