From 2b7e5a345326838184cccc3e32a6735f6e508564 Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Sat, 11 Nov 2017 18:37:04 -0800 Subject: [PATCH] Add error message for accidental primitive usage. Also, add a test for the requirement. --- .../main/java/com/squareup/moshi/Types.java | 2 +- .../java/com/squareup/moshi/TypesTest.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/moshi/src/main/java/com/squareup/moshi/Types.java b/moshi/src/main/java/com/squareup/moshi/Types.java index e03dc65..0b07880 100644 --- a/moshi/src/main/java/com/squareup/moshi/Types.java +++ b/moshi/src/main/java/com/squareup/moshi/Types.java @@ -492,7 +492,7 @@ public final class Types { static void checkNotPrimitive(Type type) { if ((type instanceof Class) && ((Class) type).isPrimitive()) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Unexpected primitive " + type + ". Use the boxed type."); } } diff --git a/moshi/src/test/java/com/squareup/moshi/TypesTest.java b/moshi/src/test/java/com/squareup/moshi/TypesTest.java index 890fae4..2f7b74d 100644 --- a/moshi/src/test/java/com/squareup/moshi/TypesTest.java +++ b/moshi/src/test/java/com/squareup/moshi/TypesTest.java @@ -227,4 +227,25 @@ public final class TypesTest { assertThat(Types.equals(String[].class, Types.arrayOf(String.class))).isTrue(); assertThat(Types.equals(Types.arrayOf(String.class), String[].class)).isTrue(); } + + @Test public void parameterizedAndWildcardTypesCannotHavePrimitiveArguments() throws Exception { + try { + Types.newParameterizedType(List.class, int.class); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected).hasMessage("Unexpected primitive int. Use the boxed type."); + } + try { + Types.subtypeOf(byte.class); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected).hasMessage("Unexpected primitive byte. Use the boxed type."); + } + try { + Types.subtypeOf(boolean.class); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected).hasMessage("Unexpected primitive boolean. Use the boxed type."); + } + } }