/** * Test whether the given type is Either. */ public static boolean isEither(Type type) { if (type instanceof ParameterizedType) { return isEither(((ParameterizedType) type).getRawType()); } if (type instanceof Class) { return Either.class.isAssignableFrom((Class<?>) type); } return false; }
/** * Test whether the given type is Either. */ public static boolean isEither(Type type) { if (type instanceof ParameterizedType) { return isEither(((ParameterizedType) type).getRawType()); } if (type instanceof Class) { return Either.class.isAssignableFrom((Class<?>) type); } return false; }
private static void collectExpectedTypes(Type type, Collection<Type> types) { if (isEither(type)) { if (type instanceof ParameterizedType) { for (Type typeArgument : ((ParameterizedType) type).getActualTypeArguments()) { collectExpectedTypes(typeArgument, types); } } if (type instanceof Class) { for (Type typeParameter : ((Class<?>) type).getTypeParameters()) { collectExpectedTypes(typeParameter, types); } } } else { types.add(type); } }
private static void collectExpectedTypes(Type type, Collection<Type> types) { if (isEither(type)) { if (type instanceof ParameterizedType) { for (Type typeArgument : ((ParameterizedType) type).getActualTypeArguments()) { collectExpectedTypes(typeArgument, types); } } if (type instanceof Class) { for (Type typeParameter : ((Class<?>) type).getTypeParameters()) { collectExpectedTypes(typeParameter, types); } } } else { types.add(type); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { if (!TypeUtils.isEither(typeToken.getType())) { return null; } return new EitherTypeAdapter(gson, typeToken); }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { if (!TypeUtils.isEither(typeToken.getType())) { return null; } return new EitherTypeAdapter(gson, typeToken); }