Skip to content

Commit 10655a5

Browse files
committed
use switch for String matching, if more than 3 Strings are present
1 parent 7c46783 commit 10655a5

3 files changed

Lines changed: 119 additions & 97 deletions

File tree

processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -108,31 +108,49 @@ public class ${gemInfo.gemName} implements Gem {
108108
// iterate and populate builder
109109
for ( String methodName : defaultValues.keySet() ) {
110110

111-
<#list gemInfo.gemValueInfos as gemValueInfo>
112-
<#if gemValueInfo_index != 0>else </#if>if ( "${gemValueInfo.name}".equals( methodName ) ) {
113-
<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}(
114-
<#if gemValueInfo.valueType.gem>
115-
<#if gemValueInfo.valueType.array>
116-
GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn )
117-
<#else>
118-
GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn )
119-
</#if>
120-
<#elseif gemValueInfo.valueType.enum>
121-
<#if gemValueInfo.valueType.array>
122-
GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) )
123-
<#else>
124-
GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) )
125-
</#if>
111+
<#macro fillBuilder gemValueInfo indnet>
112+
${indnet}<@compress single_line=true>builder.set${gemValueInfo.name?capitalize}(
113+
<#if gemValueInfo.valueType.gem>
114+
<#if gemValueInfo.valueType.array>
115+
GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn )
116+
<#else>
117+
GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.gemName}::instanceOn )
118+
</#if>
119+
<#elseif gemValueInfo.valueType.enum>
120+
<#if gemValueInfo.valueType.array>
121+
GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) )
122+
<#else>
123+
GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) )
124+
</#if>
125+
<#else>
126+
<#if gemValueInfo.valueType.array>
127+
GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class )
126128
<#else>
127-
<#if gemValueInfo.valueType.array>
128-
GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class )
129-
<#else>
130-
GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class )
131-
</#if>
129+
GemValue.create( values.get( methodName ), defaultValues.get( methodName ), ${gemValueInfo.valueType.elementName}.class )
132130
</#if>
133-
);</@compress>
131+
</#if>
132+
);
133+
</@compress>
134+
</#macro>
135+
<#if (gemInfo.gemValueInfos?size < 4)>
136+
<#list gemInfo.gemValueInfos as gemValueInfo>
137+
<#if gemValueInfo_index != 0>else </#if>if ( "${gemValueInfo.name}".equals( methodName ) ) {
138+
<#assign indentString = " ">
139+
<@fillBuilder gemValueInfo, indentString/>
140+
134141
}
135142
</#list>
143+
<#else>
144+
switch (methodName) {
145+
<#list gemInfo.gemValueInfos as gemValueInfo>
146+
case "${gemValueInfo.name}":
147+
<#assign indentString = " ">
148+
<@fillBuilder gemValueInfo, indentString/>
149+
150+
break;
151+
</#list>
152+
}
153+
</#if>
136154
}
137155
</#if>
138156
builder.setMirror( mirror );

processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java

Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -338,71 +338,73 @@ public static <T> T build(AnnotationMirror mirror, Builder<T> builder ) {
338338
// iterate and populate builder
339339
for ( String methodName : defaultValues.keySet() ) {
340340

341-
if ( "myClassWithDefault".equals( methodName ) ) {
342-
builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) );
343-
}
344-
else if ( "myBooleanWithDefault".equals( methodName ) ) {
345-
builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) );
346-
}
347-
else if ( "myCharWithDefault".equals( methodName ) ) {
348-
builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) );
349-
}
350-
else if ( "myByteWithDefault".equals( methodName ) ) {
351-
builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) );
352-
}
353-
else if ( "mShortWithDefault".equals( methodName ) ) {
354-
builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) );
355-
}
356-
else if ( "myIntWithDefault".equals( methodName ) ) {
357-
builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
358-
}
359-
else if ( "myLongWithDefault".equals( methodName ) ) {
360-
builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
361-
}
362-
else if ( "myFloatWithDefault".equals( methodName ) ) {
363-
builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) );
364-
}
365-
else if ( "myDoubleWithDefault".equals( methodName ) ) {
366-
builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) );
367-
}
368-
else if ( "myStringWithDefault".equals( methodName ) ) {
369-
builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) );
370-
}
371-
else if ( "myEnumWithDefault".equals( methodName ) ) {
372-
builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) );
373-
}
374-
else if ( "myClass".equals( methodName ) ) {
375-
builder.setMyclass( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) );
376-
}
377-
else if ( "myBoolean".equals( methodName ) ) {
378-
builder.setMyboolean( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) );
379-
}
380-
else if ( "myChar".equals( methodName ) ) {
381-
builder.setMychar( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) );
382-
}
383-
else if ( "myByte".equals( methodName ) ) {
384-
builder.setMybyte( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) );
385-
}
386-
else if ( "myShort".equals( methodName ) ) {
387-
builder.setMyshort( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) );
388-
}
389-
else if ( "myInt".equals( methodName ) ) {
390-
builder.setMyint( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
391-
}
392-
else if ( "myLong".equals( methodName ) ) {
393-
builder.setMylong( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
394-
}
395-
else if ( "myFloat".equals( methodName ) ) {
396-
builder.setMyfloat( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) );
397-
}
398-
else if ( "myDouble".equals( methodName ) ) {
399-
builder.setMydouble( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) );
400-
}
401-
else if ( "myString".equals( methodName ) ) {
402-
builder.setMystring( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) );
403-
}
404-
else if ( "myEnum".equals( methodName ) ) {
405-
builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) );
341+
switch (methodName) {
342+
case "myClassWithDefault":
343+
builder.setMyclasswithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) );
344+
break;
345+
case "myBooleanWithDefault":
346+
builder.setMybooleanwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) );
347+
break;
348+
case "myCharWithDefault":
349+
builder.setMycharwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) );
350+
break;
351+
case "myByteWithDefault":
352+
builder.setMybytewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) );
353+
break;
354+
case "mShortWithDefault":
355+
builder.setMshortwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) );
356+
break;
357+
case "myIntWithDefault":
358+
builder.setMyintwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
359+
break;
360+
case "myLongWithDefault":
361+
builder.setMylongwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
362+
break;
363+
case "myFloatWithDefault":
364+
builder.setMyfloatwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) );
365+
break;
366+
case "myDoubleWithDefault":
367+
builder.setMydoublewithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) );
368+
break;
369+
case "myStringWithDefault":
370+
builder.setMystringwithdefault( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) );
371+
break;
372+
case "myEnumWithDefault":
373+
builder.setMyenumwithdefault( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) );
374+
break;
375+
case "myClass":
376+
builder.setMyclass( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) );
377+
break;
378+
case "myBoolean":
379+
builder.setMyboolean( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) );
380+
break;
381+
case "myChar":
382+
builder.setMychar( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Character.class ) );
383+
break;
384+
case "myByte":
385+
builder.setMybyte( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Byte.class ) );
386+
break;
387+
case "myShort":
388+
builder.setMyshort( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Short.class ) );
389+
break;
390+
case "myInt":
391+
builder.setMyint( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
392+
break;
393+
case "myLong":
394+
builder.setMylong( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Integer.class ) );
395+
break;
396+
case "myFloat":
397+
builder.setMyfloat( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Float.class ) );
398+
break;
399+
case "myDouble":
400+
builder.setMydouble( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), Double.class ) );
401+
break;
402+
case "myString":
403+
builder.setMystring( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), String.class ) );
404+
break;
405+
case "myEnum":
406+
builder.setMyenum( GemValue.createEnum( values.get( methodName ), defaultValues.get( methodName ) ) );
407+
break;
406408
}
407409
}
408410
builder.setMirror( mirror );

processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,19 @@ public static <T> T build(AnnotationMirror mirror, Builder<T> builder ) {
122122
// iterate and populate builder
123123
for ( String methodName : defaultValues.keySet() ) {
124124

125-
if ( "myClassWithDefault".equals( methodName ) ) {
126-
builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) );
127-
}
128-
else if ( "myBooleanWithDefault".equals( methodName ) ) {
129-
builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) );
130-
}
131-
else if ( "myEnumWithDefault".equals( methodName ) ) {
132-
builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) );
133-
}
134-
else if ( "myAnnotation".equals( methodName ) ) {
135-
builder.setMyannotation( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), SomeAnnotationGem::instanceOn ) );
125+
switch (methodName) {
126+
case "myClassWithDefault":
127+
builder.setMyclasswithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), TypeMirror.class ) );
128+
break;
129+
case "myBooleanWithDefault":
130+
builder.setMybooleanwithdefault( GemValue.createArray( values.get( methodName ), defaultValues.get( methodName ), Boolean.class ) );
131+
break;
132+
case "myEnumWithDefault":
133+
builder.setMyenumwithdefault( GemValue.createEnumArray( values.get( methodName ), defaultValues.get( methodName ) ) );
134+
break;
135+
case "myAnnotation":
136+
builder.setMyannotation( GemValue.create( values.get( methodName ), defaultValues.get( methodName ), SomeAnnotationGem::instanceOn ) );
137+
break;
136138
}
137139
}
138140
builder.setMirror( mirror );

0 commit comments

Comments
 (0)