Skip to content

Commit 994bfd0

Browse files
mp911dechristophstrobl
authored andcommitted
Polishing.
Add additional conversions for Number that do not require the use of a conversion service. Original Pull Request: #3367
1 parent 19c26ba commit 994bfd0

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/main/java/org/springframework/data/javapoet/LordOfTheStrings.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,10 +858,37 @@ public static class TypedReturnBuilder extends ReturnBuilderSupport {
858858
*/
859859
@Contract("_ -> this")
860860
public TypedReturnBuilder number(String resultToReturn) {
861+
861862
return whenBoxedLong("$1L != null ? $1L.longValue() : null", resultToReturn)
862863
.whenLong("$1L != null ? $1L.longValue() : 0L", resultToReturn)
863864
.whenBoxedInteger("$1L != null ? $1L.intValue() : null", resultToReturn)
864-
.whenInt("$1L != null ? $1L.intValue() : 0", resultToReturn);
865+
.whenInt("$1L != null ? $1L.intValue() : 0", resultToReturn)
866+
.whenBoxed(Byte.class, "$1L != null ? $1L.byteValue() : null", resultToReturn)
867+
.when(byte.class, "$1L != null ? $1L.byteValue() : 0", resultToReturn)
868+
.whenBoxed(Short.class, "$1L != null ? $1L.shortValue() : null", resultToReturn)
869+
.when(short.class, "$1L != null ? $1L.shortValue() : 0", resultToReturn)
870+
.whenBoxed(Double.class, "$1L != null ? $1L.doubleValue() : null", resultToReturn)
871+
.when(double.class, "$1L != null ? $1L.doubleValue() : 0", resultToReturn)
872+
.whenBoxed(Float.class, "$1L != null ? $1L.floatValue() : null", resultToReturn)
873+
.when(float.class, "$1L != null ? $1L.floatValue() : 0f", resultToReturn);
874+
}
875+
876+
/**
877+
* Add return statements for numeric types if the given {@code resultToReturn} points to a non-nullable
878+
* {@link Number}. Considers all primitive numeric types assuming that {@code resultToReturn} is never
879+
* {@literal null}.
880+
*
881+
* @param resultToReturn the argument or variable name holding the result.
882+
* @return {@code this} builder.
883+
*/
884+
@Contract("_ -> this")
885+
public TypedReturnBuilder nonNullableNumber(String resultToReturn) {
886+
return whenPrimitiveOrBoxed(long.class, "$1L.longValue()", resultToReturn)
887+
.whenPrimitiveOrBoxed(int.class, "$1L.intValue()", resultToReturn)
888+
.whenPrimitiveOrBoxed(short.class, "$1L.shortValue()", resultToReturn)
889+
.whenPrimitiveOrBoxed(byte.class, "$1L.byteValue()", resultToReturn)
890+
.whenPrimitiveOrBoxed(float.class, "$1L.floatValue()", resultToReturn)
891+
.whenPrimitiveOrBoxed(double.class, "$1L.doubleValue()", resultToReturn);
865892
}
866893

867894
/**

src/test/java/org/springframework/data/javapoet/JavaPoetUnitTests.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,50 @@ void shouldRenderConditionalNumericReturn() {
188188

189189
block = LordOfTheStrings.returning(Integer.class).number("someNumericVariable").otherwise(":-[").build();
190190
assertThat(block).hasToString("return someNumericVariable != null ? someNumericVariable.intValue() : null");
191+
192+
block = LordOfTheStrings.returning(Short.class).number("someNumericVariable").otherwise(":-[").build();
193+
assertThat(block).hasToString("return someNumericVariable != null ? someNumericVariable.shortValue() : null");
194+
195+
block = LordOfTheStrings.returning(short.class).number("someNumericVariable").otherwise(":-[").build();
196+
assertThat(block).hasToString("return someNumericVariable != null ? someNumericVariable.shortValue() : 0");
197+
198+
block = LordOfTheStrings.returning(Byte.class).number("someNumericVariable").otherwise(":-[").build();
199+
assertThat(block).hasToString("return someNumericVariable != null ? someNumericVariable.byteValue() : null");
200+
201+
block = LordOfTheStrings.returning(Float.class).number("someNumericVariable").otherwise(":-[").build();
202+
assertThat(block).hasToString("return someNumericVariable != null ? someNumericVariable.floatValue() : null");
203+
204+
block = LordOfTheStrings.returning(float.class).number("someNumericVariable").otherwise(":-[").build();
205+
assertThat(block).hasToString("return someNumericVariable != null ? someNumericVariable.floatValue() : 0f");
206+
}
207+
208+
@Test // GH-3357
209+
void shouldRenderConditionalSafeNumericReturn() {
210+
211+
CodeBlock block = LordOfTheStrings.returning(boolean.class).nonNullableNumber("someNumericVariable")
212+
.otherwise(":-[").build();
213+
assertThat(block).hasToString("return :-[");
214+
215+
block = LordOfTheStrings.returning(long.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
216+
assertThat(block).hasToString("return someNumericVariable.longValue()");
217+
218+
block = LordOfTheStrings.returning(Long.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
219+
assertThat(block).hasToString("return someNumericVariable.longValue()");
220+
221+
block = LordOfTheStrings.returning(Integer.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
222+
assertThat(block).hasToString("return someNumericVariable.intValue()");
223+
224+
block = LordOfTheStrings.returning(short.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
225+
assertThat(block).hasToString("return someNumericVariable.shortValue()");
226+
227+
block = LordOfTheStrings.returning(byte.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
228+
assertThat(block).hasToString("return someNumericVariable.byteValue()");
229+
230+
block = LordOfTheStrings.returning(Double.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
231+
assertThat(block).hasToString("return someNumericVariable.doubleValue()");
232+
233+
block = LordOfTheStrings.returning(Float.class).nonNullableNumber("someNumericVariable").otherwise(":-[").build();
234+
assertThat(block).hasToString("return someNumericVariable.floatValue()");
191235
}
192236

193237
@Test // GH-3357

0 commit comments

Comments
 (0)