From 1c11427fc685e19c6fa666e5d97462113060bd03 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 3 Sep 2019 22:01:24 +0200 Subject: [PATCH] Improve generated builder documentation This adds some sorely-needed guidelines as to how to use generated builders. Change-Id: I786a7e2f249f336363d4ddc107919edb861e0422 Signed-off-by: Robert Varga --- .../java/api/generator/BuilderTemplate.xtend | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend index 4be3ad4922..e3a9ccef88 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend @@ -369,11 +369,45 @@ class BuilderTemplate extends AbstractBuilderTemplate { «ENDIF» ''' - private def createDescription(GeneratedType type) { + private def createDescription(GeneratedType targetType) { + val target = type.importedName return ''' - Class that builds {@link «type.importedName»} instances. - - @see «type.importedName» + Class that builds {@link «target»} instances. Overall design of the class is that of a + fluent interface, where method chaining is used. + +

+ In general, this class is supposed to be used like this template: +

+          
+            «target» createTarget(int fooXyzzy, int barBaz) {
+                return new «target»Builder()
+                    .setFoo(new FooBuilder().setXyzzy(fooXyzzy).build())
+                    .setBar(new BarBuilder().setBaz(barBaz).build())
+                    .build();
+            }
+          
+        
+ +

+ This pattern is supported by the immutable nature of «target», as instances can be freely passed around without + worrying about synchronization issues. + +

+ As a side note: method chaining results in: +

+ + @see «target» + @see «Builder.importedName» ''' } -- 2.36.6