From 6c2e3db7d25ceceabe056aeb8b65477fdd509214 Mon Sep 17 00:00:00 2001 From: Andrey Litvitski <120543954+panic08@users.noreply.github.com> Date: Sun, 13 Oct 2024 23:29:46 +0300 Subject: [PATCH] Enforce rawType to be a Class in ParameterizedTypeImpl (#2759) Enforce rawType to be a Class in ParameterizedTypeImpl Enforce rawType to be a Class in ParameterizedTypeImpl --- .../java/com/google/gson/internal/$Gson$Types.java | 12 ++++++------ .../main/java/com/google/gson/reflect/TypeToken.java | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/$Gson$Types.java b/gson/src/main/java/com/google/gson/internal/$Gson$Types.java index 8a65031d1a..ab024b4bfa 100644 --- a/gson/src/main/java/com/google/gson/internal/$Gson$Types.java +++ b/gson/src/main/java/com/google/gson/internal/$Gson$Types.java @@ -57,7 +57,7 @@ public final class $Gson$Types { * @return a {@link java.io.Serializable serializable} parameterized type. */ public static ParameterizedType newParameterizedTypeWithOwner( - Type ownerType, Type rawType, Type... typeArguments) { + Type ownerType, Class rawType, Type... typeArguments) { return new ParameterizedTypeImpl(ownerType, rawType, typeArguments); } @@ -112,7 +112,7 @@ public static Type canonicalize(Type type) { } else if (type instanceof ParameterizedType) { ParameterizedType p = (ParameterizedType) type; return new ParameterizedTypeImpl( - p.getOwnerType(), p.getRawType(), p.getActualTypeArguments()); + p.getOwnerType(), (Class) p.getRawType(), p.getActualTypeArguments()); } else if (type instanceof GenericArrayType) { GenericArrayType g = (GenericArrayType) type; @@ -411,7 +411,8 @@ private static Type resolve( toResolve = ownerChanged || argsChanged - ? newParameterizedTypeWithOwner(newOwnerType, original.getRawType(), args) + ? newParameterizedTypeWithOwner( + newOwnerType, (Class) original.getRawType(), args) : original; break; @@ -519,10 +520,9 @@ private static final class ParameterizedTypeImpl implements ParameterizedType, S @SuppressWarnings("serial") private final Type[] typeArguments; - public ParameterizedTypeImpl(Type ownerType, Type rawType, Type... typeArguments) { - // TODO: Should this enforce that rawType is a Class? See JDK implementation of - // the ParameterizedType interface and https://bugs.openjdk.org/browse/JDK-8250659 + public ParameterizedTypeImpl(Type ownerType, Class rawType, Type... typeArguments) { requireNonNull(rawType); + if (ownerType == null && requiresOwnerType(rawType)) { throw new IllegalArgumentException("Must specify owner type for " + rawType); } diff --git a/gson/src/main/java/com/google/gson/reflect/TypeToken.java b/gson/src/main/java/com/google/gson/reflect/TypeToken.java index 49de430039..6298ae7f44 100644 --- a/gson/src/main/java/com/google/gson/reflect/TypeToken.java +++ b/gson/src/main/java/com/google/gson/reflect/TypeToken.java @@ -440,7 +440,8 @@ public static TypeToken getParameterized(Type rawType, Type... typeArguments) } } - return new TypeToken<>($Gson$Types.newParameterizedTypeWithOwner(null, rawType, typeArguments)); + return new TypeToken<>( + $Gson$Types.newParameterizedTypeWithOwner(null, rawClass, typeArguments)); } /**