[ 
https://issues.apache.org/jira/browse/MNG-8214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17876488#comment-17876488
 ] 
ASF GitHub Bot commented on MNG-8214:
-------------------------------------

kwin commented on code in PR #1660:
URL: https://github.com/apache/maven/pull/1660#discussion_r1730292226


##########
src/mdo/model.vm:
##########
@@ -145,55 +145,39 @@ public class ${class.name}
     #end
 
     /**
-      * Constructor for this class, package protected.
+      * Constructor for this class, to be called from its subclasses and 
{@link Builder}.
       * @see Builder#build()
       */
-    ${class.name}(
-    #if ( $class == $root )
-        String namespaceUri,
-        String modelEncoding,
-    #end
-    #foreach ( $field in $allFields )
-      #set ( $sep = 
"#if(${locationTracking}||$field!=${allFields[${allFields.size()} - 1]}),#end" )
-      #set ( $type = 
${types.getOrDefault($field,${types.getOrDefault($field.type,$field.type)})} )
-      #if ( $type.startsWith("List<") )
-        #set ( $type = ${type.replace('List<','Collection<')} )
-      #end
-        $type $field.name${sep}
-    #end
-    #if ( $locationTracking )
-        Map<Object, InputLocation> locations,
-        InputLocation importedFrom
-    #end
-    ) {
+    protected ${class.name}(Builder builder) {
     #if ( $class.superClass )
-        super(
-      #foreach ( $field in $inheritedFields )
-        #set ( $sep = 
"#if(${locationTracking}||$field!=${inheritedFields[${inheritedFields.size()} - 
1]}),#end" )
-            ${field.name}${sep}
-      #end
-      #if ( $locationTracking )
-            locations,
-            importedFrom
-      #end
-        );
+        super(builder);
     #end
     #if ( $class == $root )
-        this.namespaceUri = namespaceUri;
-        this.modelEncoding = modelEncoding;
+        this.namespaceUri = builder.namespaceUri != null ? 
builder.namespaceUri : (builder.base != null ? builder.base.namespaceUri : 
null);
+        this.modelEncoding = builder.modelEncoding != null ? 
builder.modelEncoding : (builder.base != null ? builder.base.modelEncoding :  
"UTF-8");
     #end
     #foreach ( $field in $class.getFields($version) )
       #if ( $field.type == "java.util.List" || $field.type == 
"java.util.Properties" || $field.type == "java.util.Map" )
-        this.${field.name} = ImmutableCollections.copy(${field.name});
+        this.${field.name} = ImmutableCollections.copy(builder.${field.name} 
!= null ? builder.${field.name} : (builder.base != null ? 
builder.base.${field.name} : null));
       #else
-        this.${field.name} = ${field.name};
+        #if ( $field.type == "boolean" || $field.type == "int" )
+        this.${field.name} = builder.${field.name} != null ? 
builder.${field.name} : (builder.base != null ? builder.base.${field.name} : 
${field.defaultValue});
+        #else
+        this.${field.name} = builder.${field.name} != null ? 
builder.${field.name} : (builder.base != null ? builder.base.${field.name} : 
null);
+        #end
       #end
     #end
     #if ( $locationTracking )
+        Map<Object, InputLocation> newlocs = builder.locations != null ? 
builder.locations : Collections.emptyMap();
+        Map<Object, InputLocation> oldlocs = builder.base != null && 
builder.base.locations != null ? builder.base.locations : 
Collections.emptyMap();
       #if ( ! $class.superClass )
-        this.locations = ImmutableCollections.copy(locations);
-        this.importedFrom = importedFrom;
+        this.locations = new HashMap<>();

Review Comment:
   This is orthogonal to this PR. The same logic from 
https://github.com/apache/maven/pull/1660/files#diff-ad6fc545933fb055ede5c7cf4ca4f05c63de54967e3253e4244b00adcaa7dcc9L503-L511
 just has been moved to the constructor.





> Allow extension of the model classes being generated with model.vm
> ------------------------------------------------------------------
>
>                 Key: MNG-8214
>                 URL: https://issues.apache.org/jira/browse/MNG-8214
>             Project: Maven
>          Issue Type: Improvement
>    Affects Versions: 4.0.0-beta-3
>            Reporter: Konrad Windszus
>            Assignee: Konrad Windszus
>            Priority: Major
>
> The [model.vm|https://github.com/apache/maven/blob/master/src/mdo/model.vm] 
> being used with Maven 4 models generates immutable classes with builders. The 
> generated classes cannot be extended easily because
> # the builder's constructor is having default access instead of being 
> protected 
> (https://github.com/apache/maven/blob/e335f95dfd11468bdf617421fd5e7093a727d1e1/src/mdo/model.vm#L409
>  and 
> https://github.com/apache/maven/blob/e335f95dfd11468bdf617421fd5e7093a727d1e1/src/mdo/model.vm#L427
> # the classes constructor doesn't take a builder as argument (therefore the 
> subclass cannot leverage most of the functionality currently encapsulated by 
> the Builder)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to