[
https://issues.apache.org/jira/browse/MNG-8214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17874463#comment-17874463
]
ASF GitHub Bot commented on MNG-8214:
-------------------------------------
kwin commented on code in PR #1660:
URL: https://github.com/apache/maven/pull/1660#discussion_r1720744714
##########
src/mdo/model.vm:
##########
@@ -142,46 +142,33 @@ public class ${class.name}
#end
/**
- * Constructor for this class, package protected.
+ * Constructor for this class, to be called from {@link Builder} and its
subclasses.
* @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
- #end
- ) {
+ #set ( $additionalArguments = "#if(${locationTracking}), Map<Object,
InputLocation> locations#end" )
+ protected ${class.name}(Builder builder${additionalArguments}) {
#if ( $class.superClass )
super(
- #foreach ( $field in $inheritedFields )
- #set ( $sep =
"#if(${locationTracking}||$field!=${inheritedFields[${inheritedFields.size()} -
1]}),#end" )
- ${field.name}${sep}
- #end
+ #set ( $sep = "#if(${locationTracking}),#end" )
+ builder${sep}
#if ( $locationTracking )
locations
#end
);
#end
#if ( $class == $root )
- this.namespaceUri = namespaceUri;
- this.modelEncoding = modelEncoding;
+ this.namespaceUri = builder.namespaceUri;
Review Comment:
This requires the base inheritance logic as well
> 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 reuse most of the functionality currently
> encapsulated by the Builder)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)