From 10655a599e6630cc994b88f8bb8e6330e63c2b6f Mon Sep 17 00:00:00 2001 From: hduelme Date: Fri, 13 Feb 2026 22:24:47 +0100 Subject: [PATCH 1/7] use switch for String matching, if more than 3 Strings are present --- .../org/mapstruct/tools/gem/processor/Gem.ftl | 60 +++++--- .../gem/processor/SomeAnnotationGem.java | 132 +++++++++--------- .../gem/processor/SomeArrayAnnotationGem.java | 24 ++-- 3 files changed, 119 insertions(+), 97 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index 0433d80..caa7bfa 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -108,31 +108,49 @@ public class ${gemInfo.gemName} implements Gem { // iterate and populate builder for ( String methodName : defaultValues.keySet() ) { - <#list gemInfo.gemValueInfos as gemValueInfo> - <#if gemValueInfo_index != 0>else if ( "${gemValueInfo.name}".equals( methodName ) ) { - <@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( - <#if gemValueInfo.valueType.gem> - <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn ) - <#else> - GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn ) - - <#elseif gemValueInfo.valueType.enum> - <#if gemValueInfo.valueType.array> - GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) - <#else> - GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) - + <#macro fillBuilder gemValueInfo indnet> + ${indnet}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( + <#if gemValueInfo.valueType.gem> + <#if gemValueInfo.valueType.array> + GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn ) + <#else> + GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn ) + + <#elseif gemValueInfo.valueType.enum> + <#if gemValueInfo.valueType.array> + GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) + <#else> + GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) + + <#else> + <#if gemValueInfo.valueType.array> + GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class ) <#else> - <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class ) - <#else> - GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class ) - + GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class ) - ); + + ); + + + <#if (gemInfo.gemValueInfos?size < 4)> + <#list gemInfo.gemValueInfos as gemValueInfo> + <#if gemValueInfo_index != 0>else if ( "${gemValueInfo.name}".equals( methodName ) ) { + <#assign indentString = " "> + <@fillBuilder gemValueInfo, indentString/> + } + <#else> + switch (methodName) { + <#list gemInfo.gemValueInfos as gemValueInfo> + case "${gemValueInfo.name}": + <#assign indentString = " "> + <@fillBuilder gemValueInfo, indentString/> + + break; + + } + } builder.setMirror( mirror ); diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java index 1d030cc..f2908ad 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java @@ -338,71 +338,73 @@ public static T build(AnnotationMirror mirror, Builder builder ) { // iterate and populate builder for ( String methodName : defaultValues.keySet() ) { - if ( "myClassWithDefault".equals( methodName ) ) { - builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); - } - else if ( "myBooleanWithDefault".equals( methodName ) ) { - builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); - } - else if ( "myCharWithDefault".equals( methodName ) ) { - builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) ); - } - else if ( "myByteWithDefault".equals( methodName ) ) { - builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) ); - } - else if ( "mShortWithDefault".equals( methodName ) ) { - builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) ); - } - else if ( "myIntWithDefault".equals( methodName ) ) { - builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); - } - else if ( "myLongWithDefault".equals( methodName ) ) { - builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); - } - else if ( "myFloatWithDefault".equals( methodName ) ) { - builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) ); - } - else if ( "myDoubleWithDefault".equals( methodName ) ) { - builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) ); - } - else if ( "myStringWithDefault".equals( methodName ) ) { - builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) ); - } - else if ( "myEnumWithDefault".equals( methodName ) ) { - builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) ); - } - else if ( "myClass".equals( methodName ) ) { - builder.setMyclass( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); - } - else if ( "myBoolean".equals( methodName ) ) { - builder.setMyboolean( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); - } - else if ( "myChar".equals( methodName ) ) { - builder.setMychar( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) ); - } - else if ( "myByte".equals( methodName ) ) { - builder.setMybyte( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) ); - } - else if ( "myShort".equals( methodName ) ) { - builder.setMyshort( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) ); - } - else if ( "myInt".equals( methodName ) ) { - builder.setMyint( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); - } - else if ( "myLong".equals( methodName ) ) { - builder.setMylong( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); - } - else if ( "myFloat".equals( methodName ) ) { - builder.setMyfloat( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) ); - } - else if ( "myDouble".equals( methodName ) ) { - builder.setMydouble( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) ); - } - else if ( "myString".equals( methodName ) ) { - builder.setMystring( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) ); - } - else if ( "myEnum".equals( methodName ) ) { - builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) ); + switch (methodName) { + case "myClassWithDefault": + builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); + break; + case "myBooleanWithDefault": + builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); + break; + case "myCharWithDefault": + builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) ); + break; + case "myByteWithDefault": + builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) ); + break; + case "mShortWithDefault": + builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) ); + break; + case "myIntWithDefault": + builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + break; + case "myLongWithDefault": + builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + break; + case "myFloatWithDefault": + builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) ); + break; + case "myDoubleWithDefault": + builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) ); + break; + case "myStringWithDefault": + builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) ); + break; + case "myEnumWithDefault": + builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) ); + break; + case "myClass": + builder.setMyclass( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); + break; + case "myBoolean": + builder.setMyboolean( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); + break; + case "myChar": + builder.setMychar( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) ); + break; + case "myByte": + builder.setMybyte( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) ); + break; + case "myShort": + builder.setMyshort( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) ); + break; + case "myInt": + builder.setMyint( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + break; + case "myLong": + builder.setMylong( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + break; + case "myFloat": + builder.setMyfloat( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) ); + break; + case "myDouble": + builder.setMydouble( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) ); + break; + case "myString": + builder.setMystring( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) ); + break; + case "myEnum": + builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) ); + break; } } builder.setMirror( mirror ); diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java index dfb0a81..46876ce 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java @@ -122,17 +122,19 @@ public static T build(AnnotationMirror mirror, Builder builder ) { // iterate and populate builder for ( String methodName : defaultValues.keySet() ) { - if ( "myClassWithDefault".equals( methodName ) ) { - builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); - } - else if ( "myBooleanWithDefault".equals( methodName ) ) { - builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); - } - else if ( "myEnumWithDefault".equals( methodName ) ) { - builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) ); - } - else if ( "myAnnotation".equals( methodName ) ) { - builder.setMyannotation( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), SomeAnnotationGem::instanceOn ) ); + switch (methodName) { + case "myClassWithDefault": + builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); + break; + case "myBooleanWithDefault": + builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); + break; + case "myEnumWithDefault": + builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) ); + break; + case "myAnnotation": + builder.setMyannotation( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), SomeAnnotationGem::instanceOn ) ); + break; } } builder.setMirror( mirror ); From 239bffafad3746347da9e3e2e80a6755893547d0 Mon Sep 17 00:00:00 2001 From: hduelme Date: Fri, 13 Feb 2026 22:52:56 +0100 Subject: [PATCH 2/7] iterate over entrySet --- .../org/mapstruct/tools/gem/processor/Gem.ftl | 18 +++---- .../gem/processor/SomeAnnotationGem.java | 50 +++++++++---------- .../gem/processor/SomeAnnotationsGem.java | 6 +-- .../gem/processor/SomeArrayAnnotationGem.java | 14 +++--- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index caa7bfa..90caa19 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -106,27 +106,27 @@ public class ${gemInfo.gemName} implements Gem { mirror.getElementValues().entrySet().forEach( e -> values.put( e.getKey().getSimpleName().toString(), e.getValue() ) ); // iterate and populate builder - for ( String methodName : defaultValues.keySet() ) { - + for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { + String methodName = defaultMethod.getKey(); <#macro fillBuilder gemValueInfo indnet> ${indnet}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( <#if gemValueInfo.valueType.gem> <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn ) + GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) <#else> - GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn ) + GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) <#elseif gemValueInfo.valueType.enum> <#if gemValueInfo.valueType.array> - GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) + GemValue.createEnumArray( values.get( methodName ), defaultMethod.getValue() ) <#else> - GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) + GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) <#else> <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class ) + GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) <#else> - GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class ) + GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) ); @@ -141,7 +141,7 @@ public class ${gemInfo.gemName} implements Gem { } <#else> - switch (methodName) { + switch ( methodName ) { <#list gemInfo.gemValueInfos as gemValueInfo> case "${gemValueInfo.name}": <#assign indentString = " "> diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java index f2908ad..eeb2587 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java @@ -336,74 +336,74 @@ public static T build(AnnotationMirror mirror, Builder builder ) { mirror.getElementValues().entrySet().forEach( e -> values.put( e.getKey().getSimpleName().toString(), e.getValue() ) ); // iterate and populate builder - for ( String methodName : defaultValues.keySet() ) { - - switch (methodName) { + for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { + String methodName = defaultMethod.getKey(); + switch ( methodName ) { case "myClassWithDefault": - builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); + builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), TypeMirror.class ) ); break; case "myBooleanWithDefault": - builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); + builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Boolean.class ) ); break; case "myCharWithDefault": - builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) ); + builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Character.class ) ); break; case "myByteWithDefault": - builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) ); + builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Byte.class ) ); break; case "mShortWithDefault": - builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) ); + builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Short.class ) ); break; case "myIntWithDefault": - builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); break; case "myLongWithDefault": - builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); break; case "myFloatWithDefault": - builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) ); + builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Float.class ) ); break; case "myDoubleWithDefault": - builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) ); + builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Double.class ) ); break; case "myStringWithDefault": - builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) ); + builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), String.class ) ); break; case "myEnumWithDefault": - builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) ); + builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) ); break; case "myClass": - builder.setMyclass( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); + builder.setMyclass( GemValue.create( values.get( methodName ), defaultMethod.getValue(), TypeMirror.class ) ); break; case "myBoolean": - builder.setMyboolean( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); + builder.setMyboolean( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Boolean.class ) ); break; case "myChar": - builder.setMychar( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) ); + builder.setMychar( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Character.class ) ); break; case "myByte": - builder.setMybyte( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) ); + builder.setMybyte( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Byte.class ) ); break; case "myShort": - builder.setMyshort( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) ); + builder.setMyshort( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Short.class ) ); break; case "myInt": - builder.setMyint( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + builder.setMyint( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); break; case "myLong": - builder.setMylong( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) ); + builder.setMylong( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); break; case "myFloat": - builder.setMyfloat( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) ); + builder.setMyfloat( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Float.class ) ); break; case "myDouble": - builder.setMydouble( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) ); + builder.setMydouble( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Double.class ) ); break; case "myString": - builder.setMystring( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) ); + builder.setMystring( GemValue.create( values.get( methodName ), defaultMethod.getValue(), String.class ) ); break; case "myEnum": - builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) ); + builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) ); break; } } diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java index 83ab83e..e50d627 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java @@ -83,10 +83,10 @@ public static T build(AnnotationMirror mirror, Builder builder ) { mirror.getElementValues().entrySet().forEach( e -> values.put( e.getKey().getSimpleName().toString(), e.getValue() ) ); // iterate and populate builder - for ( String methodName : defaultValues.keySet() ) { - + for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { + String methodName = defaultMethod.getKey(); if ( "value".equals( methodName ) ) { - builder.setValue( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), SomeAnnotationGem::instanceOn ) ); + builder.setValue( GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), SomeAnnotationGem::instanceOn ) ); } } builder.setMirror( mirror ); diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java index 46876ce..4f00079 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java @@ -120,20 +120,20 @@ public static T build(AnnotationMirror mirror, Builder builder ) { mirror.getElementValues().entrySet().forEach( e -> values.put( e.getKey().getSimpleName().toString(), e.getValue() ) ); // iterate and populate builder - for ( String methodName : defaultValues.keySet() ) { - - switch (methodName) { + for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { + String methodName = defaultMethod.getKey(); + switch ( methodName ) { case "myClassWithDefault": - builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) ); + builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), TypeMirror.class ) ); break; case "myBooleanWithDefault": - builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) ); + builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), Boolean.class ) ); break; case "myEnumWithDefault": - builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) ); + builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultMethod.getValue() ) ); break; case "myAnnotation": - builder.setMyannotation( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), SomeAnnotationGem::instanceOn ) ); + builder.setMyannotation( GemValue.create( values.get( methodName ), defaultMethod.getValue(), SomeAnnotationGem::instanceOn ) ); break; } } From 064cf0c1589e28df7b21ba330094f43c62d09c65 Mon Sep 17 00:00:00 2001 From: hduelme Date: Sun, 15 Feb 2026 14:02:54 +0100 Subject: [PATCH 3/7] move macro outside build methode --- .../org/mapstruct/tools/gem/processor/Gem.ftl | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index 90caa19..534de77 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -88,6 +88,30 @@ public class ${gemInfo.gemName} implements Gem { return build( mirror, builder ); } +<#macro fillBuilder gemValueInfo indnet> + ${indnet}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( + <#if gemValueInfo.valueType.gem> + <#if gemValueInfo.valueType.array> + GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) + <#else> + GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) + + <#elseif gemValueInfo.valueType.enum> + <#if gemValueInfo.valueType.array> + GemValue.createEnumArray( values.get( methodName ), defaultMethod.getValue() ) + <#else> + GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) + + <#else> + <#if gemValueInfo.valueType.array> + GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) + <#else> + GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) + + + ); + + public static T build(AnnotationMirror mirror, ${gemInfo.builderName} builder ) { // return fast @@ -108,34 +132,10 @@ public class ${gemInfo.gemName} implements Gem { // iterate and populate builder for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { String methodName = defaultMethod.getKey(); - <#macro fillBuilder gemValueInfo indnet> - ${indnet}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( - <#if gemValueInfo.valueType.gem> - <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) - <#else> - GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) - - <#elseif gemValueInfo.valueType.enum> - <#if gemValueInfo.valueType.array> - GemValue.createEnumArray( values.get( methodName ), defaultMethod.getValue() ) - <#else> - GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) - - <#else> - <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) - <#else> - GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) - - - ); - - <#if (gemInfo.gemValueInfos?size < 4)> <#list gemInfo.gemValueInfos as gemValueInfo> <#if gemValueInfo_index != 0>else if ( "${gemValueInfo.name}".equals( methodName ) ) { - <#assign indentString = " "> + <#assign indentString = " "> <@fillBuilder gemValueInfo, indentString/> } @@ -144,7 +144,7 @@ public class ${gemInfo.gemName} implements Gem { switch ( methodName ) { <#list gemInfo.gemValueInfos as gemValueInfo> case "${gemValueInfo.name}": - <#assign indentString = " "> + <#assign indentString = " "> <@fillBuilder gemValueInfo, indentString/> break; From fedb6806dc5986481dcefe554fc29e41ad6d5f88 Mon Sep 17 00:00:00 2001 From: hduelme Date: Sun, 15 Feb 2026 14:03:23 +0100 Subject: [PATCH 4/7] fix typo --- .../main/resources/org/mapstruct/tools/gem/processor/Gem.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index 534de77..38e56a2 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -88,8 +88,8 @@ public class ${gemInfo.gemName} implements Gem { return build( mirror, builder ); } -<#macro fillBuilder gemValueInfo indnet> - ${indnet}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( +<#macro fillBuilder gemValueInfo indent> + ${indent}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( <#if gemValueInfo.valueType.gem> <#if gemValueInfo.valueType.array> GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) From fb6f7d96dac537beb170e8cbeb251aec08b137e7 Mon Sep 17 00:00:00 2001 From: hduelme Date: Sun, 15 Feb 2026 14:04:29 +0100 Subject: [PATCH 5/7] move assigment in front of list --- .../main/resources/org/mapstruct/tools/gem/processor/Gem.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index 38e56a2..3c4a39b 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -133,18 +133,18 @@ public class ${gemInfo.gemName} implements Gem { for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { String methodName = defaultMethod.getKey(); <#if (gemInfo.gemValueInfos?size < 4)> + <#assign indentString = " "> <#list gemInfo.gemValueInfos as gemValueInfo> <#if gemValueInfo_index != 0>else if ( "${gemValueInfo.name}".equals( methodName ) ) { - <#assign indentString = " "> <@fillBuilder gemValueInfo, indentString/> } <#else> switch ( methodName ) { + <#assign indentString = " "> <#list gemInfo.gemValueInfos as gemValueInfo> case "${gemValueInfo.name}": - <#assign indentString = " "> <@fillBuilder gemValueInfo, indentString/> break; From 98c7e7935403a3e25dea32ed74ecd44be65e363b Mon Sep 17 00:00:00 2001 From: hduelme Date: Sun, 15 Feb 2026 15:33:23 +0100 Subject: [PATCH 6/7] move value and defaultValue at beginning of loop --- .../org/mapstruct/tools/gem/processor/Gem.ftl | 14 +++--- .../gem/processor/SomeAnnotationGem.java | 46 ++++++++++--------- .../gem/processor/SomeAnnotationsGem.java | 4 +- .../gem/processor/SomeArrayAnnotationGem.java | 10 ++-- 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index 3c4a39b..916bd56 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -92,21 +92,21 @@ public class ${gemInfo.gemName} implements Gem { ${indent}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( <#if gemValueInfo.valueType.gem> <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) + GemValue.createArray( value, defaultValue, ${gemValueInfo.valueType.gemName}::instanceOn ) <#else> - GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.gemName}::instanceOn ) + GemValue.create( value, defaultValue, ${gemValueInfo.valueType.gemName}::instanceOn ) <#elseif gemValueInfo.valueType.enum> <#if gemValueInfo.valueType.array> - GemValue.createEnumArray( values.get( methodName ), defaultMethod.getValue() ) + GemValue.createEnumArray( value, defaultValue ) <#else> - GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) + GemValue.createEnum( value, defaultValue ) <#else> <#if gemValueInfo.valueType.array> - GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) + GemValue.createArray( value, defaultValue, ${gemValueInfo.valueType.elementName}.class ) <#else> - GemValue.create( values.get( methodName ), defaultMethod.getValue(), ${gemValueInfo.valueType.elementName}.class ) + GemValue.create( value, defaultValue, ${gemValueInfo.valueType.elementName}.class ) ); @@ -132,6 +132,8 @@ public class ${gemInfo.gemName} implements Gem { // iterate and populate builder for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { String methodName = defaultMethod.getKey(); + AnnotationValue defaultValue = defaultMethod.getValue(); + AnnotationValue value = values.get( methodName ); <#if (gemInfo.gemValueInfos?size < 4)> <#assign indentString = " "> <#list gemInfo.gemValueInfos as gemValueInfo> diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java index eeb2587..b5b83ad 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java @@ -338,72 +338,74 @@ public static T build(AnnotationMirror mirror, Builder builder ) { // iterate and populate builder for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { String methodName = defaultMethod.getKey(); + AnnotationValue defaultValue = defaultMethod.getValue(); + AnnotationValue value = values.get( methodName ); switch ( methodName ) { case "myClassWithDefault": - builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), TypeMirror.class ) ); + builder.setMyclasswithdefault( GemValue.create( value, defaultValue, TypeMirror.class ) ); break; case "myBooleanWithDefault": - builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Boolean.class ) ); + builder.setMybooleanwithdefault( GemValue.create( value, defaultValue, Boolean.class ) ); break; case "myCharWithDefault": - builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Character.class ) ); + builder.setMycharwithdefault( GemValue.create( value, defaultValue, Character.class ) ); break; case "myByteWithDefault": - builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Byte.class ) ); + builder.setMybytewithdefault( GemValue.create( value, defaultValue, Byte.class ) ); break; case "mShortWithDefault": - builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Short.class ) ); + builder.setMshortwithdefault( GemValue.create( value, defaultValue, Short.class ) ); break; case "myIntWithDefault": - builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); + builder.setMyintwithdefault( GemValue.create( value, defaultValue, Integer.class ) ); break; case "myLongWithDefault": - builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); + builder.setMylongwithdefault( GemValue.create( value, defaultValue, Integer.class ) ); break; case "myFloatWithDefault": - builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Float.class ) ); + builder.setMyfloatwithdefault( GemValue.create( value, defaultValue, Float.class ) ); break; case "myDoubleWithDefault": - builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Double.class ) ); + builder.setMydoublewithdefault( GemValue.create( value, defaultValue, Double.class ) ); break; case "myStringWithDefault": - builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultMethod.getValue(), String.class ) ); + builder.setMystringwithdefault( GemValue.create( value, defaultValue, String.class ) ); break; case "myEnumWithDefault": - builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) ); + builder.setMyenumwithdefault( GemValue.createEnum( value, defaultValue ) ); break; case "myClass": - builder.setMyclass( GemValue.create( values.get( methodName ), defaultMethod.getValue(), TypeMirror.class ) ); + builder.setMyclass( GemValue.create( value, defaultValue, TypeMirror.class ) ); break; case "myBoolean": - builder.setMyboolean( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Boolean.class ) ); + builder.setMyboolean( GemValue.create( value, defaultValue, Boolean.class ) ); break; case "myChar": - builder.setMychar( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Character.class ) ); + builder.setMychar( GemValue.create( value, defaultValue, Character.class ) ); break; case "myByte": - builder.setMybyte( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Byte.class ) ); + builder.setMybyte( GemValue.create( value, defaultValue, Byte.class ) ); break; case "myShort": - builder.setMyshort( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Short.class ) ); + builder.setMyshort( GemValue.create( value, defaultValue, Short.class ) ); break; case "myInt": - builder.setMyint( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); + builder.setMyint( GemValue.create( value, defaultValue, Integer.class ) ); break; case "myLong": - builder.setMylong( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Integer.class ) ); + builder.setMylong( GemValue.create( value, defaultValue, Integer.class ) ); break; case "myFloat": - builder.setMyfloat( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Float.class ) ); + builder.setMyfloat( GemValue.create( value, defaultValue, Float.class ) ); break; case "myDouble": - builder.setMydouble( GemValue.create( values.get( methodName ), defaultMethod.getValue(), Double.class ) ); + builder.setMydouble( GemValue.create( value, defaultValue, Double.class ) ); break; case "myString": - builder.setMystring( GemValue.create( values.get( methodName ), defaultMethod.getValue(), String.class ) ); + builder.setMystring( GemValue.create( value, defaultValue, String.class ) ); break; case "myEnum": - builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultMethod.getValue() ) ); + builder.setMyenum( GemValue.createEnum( value, defaultValue ) ); break; } } diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java index e50d627..f834ad2 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java @@ -85,8 +85,10 @@ public static T build(AnnotationMirror mirror, Builder builder ) { // iterate and populate builder for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { String methodName = defaultMethod.getKey(); + AnnotationValue defaultValue = defaultMethod.getValue(); + AnnotationValue value = values.get( methodName ); if ( "value".equals( methodName ) ) { - builder.setValue( GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), SomeAnnotationGem::instanceOn ) ); + builder.setValue( GemValue.createArray( value, defaultValue, SomeAnnotationGem::instanceOn ) ); } } builder.setMirror( mirror ); diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java index 4f00079..356e00c 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java @@ -122,18 +122,20 @@ public static T build(AnnotationMirror mirror, Builder builder ) { // iterate and populate builder for ( Map.Entry defaultMethod : defaultValues.entrySet() ) { String methodName = defaultMethod.getKey(); + AnnotationValue defaultValue = defaultMethod.getValue(); + AnnotationValue value = values.get( methodName ); switch ( methodName ) { case "myClassWithDefault": - builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), TypeMirror.class ) ); + builder.setMyclasswithdefault( GemValue.createArray( value, defaultValue, TypeMirror.class ) ); break; case "myBooleanWithDefault": - builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultMethod.getValue(), Boolean.class ) ); + builder.setMybooleanwithdefault( GemValue.createArray( value, defaultValue, Boolean.class ) ); break; case "myEnumWithDefault": - builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultMethod.getValue() ) ); + builder.setMyenumwithdefault( GemValue.createEnumArray( value, defaultValue ) ); break; case "myAnnotation": - builder.setMyannotation( GemValue.create( values.get( methodName ), defaultMethod.getValue(), SomeAnnotationGem::instanceOn ) ); + builder.setMyannotation( GemValue.create( value, defaultValue, SomeAnnotationGem::instanceOn ) ); break; } } From b8da1390d41876bde0b9a713b118efa9094d11ef Mon Sep 17 00:00:00 2001 From: hduelme Date: Sun, 15 Feb 2026 15:33:55 +0100 Subject: [PATCH 7/7] move macro to end of file --- .../org/mapstruct/tools/gem/processor/Gem.ftl | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index 916bd56..5f5e35c 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -88,30 +88,6 @@ public class ${gemInfo.gemName} implements Gem { return build( mirror, builder ); } -<#macro fillBuilder gemValueInfo indent> - ${indent}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( - <#if gemValueInfo.valueType.gem> - <#if gemValueInfo.valueType.array> - GemValue.createArray( value, defaultValue, ${gemValueInfo.valueType.gemName}::instanceOn ) - <#else> - GemValue.create( value, defaultValue, ${gemValueInfo.valueType.gemName}::instanceOn ) - - <#elseif gemValueInfo.valueType.enum> - <#if gemValueInfo.valueType.array> - GemValue.createEnumArray( value, defaultValue ) - <#else> - GemValue.createEnum( value, defaultValue ) - - <#else> - <#if gemValueInfo.valueType.array> - GemValue.createArray( value, defaultValue, ${gemValueInfo.valueType.elementName}.class ) - <#else> - GemValue.create( value, defaultValue, ${gemValueInfo.valueType.elementName}.class ) - - - ); - - public static T build(AnnotationMirror mirror, ${gemInfo.builderName} builder ) { // return fast @@ -217,3 +193,27 @@ public class ${gemInfo.gemName} implements Gem { } } +<#macro fillBuilder gemValueInfo indent> + ${indent}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}( + <#if gemValueInfo.valueType.gem> + <#if gemValueInfo.valueType.array> + GemValue.createArray( value, defaultValue, ${gemValueInfo.valueType.gemName}::instanceOn ) + <#else> + GemValue.create( value, defaultValue, ${gemValueInfo.valueType.gemName}::instanceOn ) + + <#elseif gemValueInfo.valueType.enum> + <#if gemValueInfo.valueType.array> + GemValue.createEnumArray( value, defaultValue ) + <#else> + GemValue.createEnum( value, defaultValue ) + + <#else> + <#if gemValueInfo.valueType.array> + GemValue.createArray( value, defaultValue, ${gemValueInfo.valueType.elementName}.class ) + <#else> + GemValue.create( value, defaultValue, ${gemValueInfo.valueType.elementName}.class ) + + + ); + + \ No newline at end of file