@@ -266,6 +266,10 @@ private void addStagedBuilderClasses() {
266
266
.addModifiers (Modifier .PUBLIC , Modifier .DEFAULT ).addParameter (parameterSpecBuilder .build ())
267
267
.addCode (codeBlock ).returns (builderClassType .typeName ()).build ();
268
268
classBuilder .addMethod (methodSpec );
269
+
270
+ if (metaData .addConcreteSettersForOptional ()) {
271
+ add1ConcreteOptionalSetterMethodToFinalStage (optionalComponent , classBuilder );
272
+ }
269
273
});
270
274
271
275
var builderMethod = MethodSpec .methodBuilder (metaData .builderMethodName ())
@@ -308,6 +312,23 @@ private void add1StagedBuilderClass(RecordClassType component, Optional<RecordCl
308
312
builder .addType (classBuilder .build ());
309
313
}
310
314
315
+ private void add1ConcreteOptionalSetterMethodToFinalStage (RecordClassType optionalComponent ,
316
+ TypeSpec .Builder classBuilder ) {
317
+ var optionalType = OptionalType .fromClassType (optionalComponent );
318
+ if (optionalType .isPresent ()) {
319
+ var type = optionalType .get ();
320
+ var concreteCodeBlock = CodeBlock .builder ().add ("return $L().$L($L);" , metaData .builderMethodName (),
321
+ optionalComponent .name (), optionalComponent .name ()).build ();
322
+ var concreteParameterSpecBuilder = ParameterSpec .builder (type .valueType (), optionalComponent .name ());
323
+ var concreteMethodSpec = MethodSpec .methodBuilder (optionalComponent .name ())
324
+ .addAnnotation (generatedRecordBuilderAnnotation )
325
+ .addJavadoc ("Call builder for optional component {@code $L}" , optionalComponent .name ())
326
+ .addModifiers (Modifier .PUBLIC , Modifier .DEFAULT ).addParameter (concreteParameterSpecBuilder .build ())
327
+ .addCode (concreteCodeBlock ).returns (builderClassType .typeName ()).build ();
328
+ classBuilder .addMethod (concreteMethodSpec );
329
+ }
330
+ }
331
+
311
332
private void addWithNestedClass () {
312
333
/*
313
334
* Adds a nested interface that adds withers similar to:
0 commit comments