@SuppressWarnings("unchecked") // Casts guarded by conditionals. static TypeAdapter<?> getTypeAdapter(ConstructorConstructor constructorConstructor, Gson gson, TypeToken<?> fieldType, JsonAdapter annotation) { Class<?> value = annotation.value(); if (TypeAdapter.class.isAssignableFrom(value)) { Class<TypeAdapter<?>> typeAdapter = (Class<TypeAdapter<?>>) value; return constructorConstructor.get(TypeToken.get(typeAdapter)).construct(); } if (TypeAdapterFactory.class.isAssignableFrom(value)) { Class<TypeAdapterFactory> typeAdapterFactory = (Class<TypeAdapterFactory>) value; return constructorConstructor.get(TypeToken.get(typeAdapterFactory)) .construct() .create(gson, fieldType); } throw new IllegalArgumentException( "@JsonAdapter value must be TypeAdapter or TypeAdapterFactory reference."); }
@SuppressWarnings("unchecked") // Casts guarded by conditionals. static TypeAdapter<?> getTypeAdapter(ConstructorConstructor constructorConstructor, Gson gson, TypeToken<?> fieldType, JsonAdapter annotation) { Class<?> value = annotation.value(); TypeAdapter<?> typeAdapter; if (TypeAdapter.class.isAssignableFrom(value)) { Class<TypeAdapter<?>> typeAdapterClass = (Class<TypeAdapter<?>>) value; typeAdapter = constructorConstructor.get(TypeToken.get(typeAdapterClass)).construct(); } else if (TypeAdapterFactory.class.isAssignableFrom(value)) { Class<TypeAdapterFactory> typeAdapterFactory = (Class<TypeAdapterFactory>) value; typeAdapter = constructorConstructor.get(TypeToken.get(typeAdapterFactory)) .construct() .create(gson, fieldType); } else { throw new IllegalArgumentException( "@JsonAdapter value must be TypeAdapter or TypeAdapterFactory reference."); } if (typeAdapter != null) { typeAdapter = typeAdapter.nullSafe(); } return typeAdapter; }
private void serializeConfigurableProperties(JsonObject configJsonObject, Object configInstance, JsonSerializationContext jsonSerializationContext) { List<Field> configurableFields = Arrays.stream(configInstance.getClass().getFields()) .filter(field -> field.getAnnotation(ConfigurableProperty.class) != null).collect(Collectors.toList()); configurableFields.forEach(field -> { String fieldName = determineNameToUseForField(field); Object fieldValue = ReflectionUtils.getValue(field, configInstance); if (fieldValue != null) { JsonElement fieldJsonObject; if (field.getAnnotation(JsonAdapter.class) != null) { try { JsonSerializer customSerializer = (JsonSerializer) field.getAnnotation(JsonAdapter.class).value().newInstance(); fieldJsonObject = customSerializer.serialize(fieldValue, field.getType(), jsonSerializationContext); } catch (InstantiationException | IllegalAccessException e) { throw new RuntimeReflectiveOperationException(e); } } else { fieldJsonObject = jsonSerializationContext.serialize(fieldValue); } configJsonObject.add(fieldName, fieldJsonObject); } }); }
@SuppressWarnings("unchecked") public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) { JsonAdapter annotation = targetType.getRawType().getAnnotation(JsonAdapter.class); if (annotation == null) { return null; } return (TypeAdapter<T>) getTypeAdapter(constructorConstructor, gson, targetType, annotation); }
private TypeAdapter<?> getFieldAdapter(Gson gson, Field field, TypeToken<?> fieldType) { JsonAdapter annotation = field.getAnnotation(JsonAdapter.class); if (annotation != null) { TypeAdapter<?> adapter = getTypeAdapter(constructorConstructor, gson, fieldType, annotation); if (adapter != null) return adapter; } return gson.getAdapter(fieldType); }
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) { JsonAdapter annotation = (JsonAdapter) targetType.getRawType().getAnnotation(JsonAdapter .class); if (annotation == null) { return null; } return getTypeAdapter(this.constructorConstructor, gson, targetType, annotation); }
static TypeAdapter<?> getTypeAdapter(ConstructorConstructor constructorConstructor, Gson gson, TypeToken<?> fieldType, JsonAdapter annotation) { Class<?> value = annotation.value(); if (TypeAdapter.class.isAssignableFrom(value)) { return (TypeAdapter) constructorConstructor.get(TypeToken.get((Class) value)) .construct(); } if (TypeAdapterFactory.class.isAssignableFrom(value)) { return ((TypeAdapterFactory) constructorConstructor.get(TypeToken.get((Class) value)) .construct()).create(gson, fieldType); } throw new IllegalArgumentException("@JsonAdapter value must be TypeAdapter or " + "TypeAdapterFactory reference."); }
private TypeAdapter<?> getFieldAdapter(Gson gson, Field field, TypeToken<?> fieldType) { JsonAdapter annotation = (JsonAdapter) field.getAnnotation(JsonAdapter.class); if (annotation != null) { TypeAdapter<?> adapter = JsonAdapterAnnotationTypeAdapterFactory.getTypeAdapter(this .constructorConstructor, gson, fieldType, annotation); if (adapter != null) { return adapter; } } return gson.getAdapter((TypeToken) fieldType); }
@SuppressWarnings("unchecked") @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) { JsonAdapter annotation = targetType.getRawType().getAnnotation(JsonAdapter.class); if (annotation == null) { return null; } return (TypeAdapter<T>) getTypeAdapter(constructorConstructor, gson, targetType, annotation); }
TypeAdapter<?> getFieldAdapter(Gson gson, Field field, TypeToken<?> fieldType) { JsonAdapter annotation = field.getAnnotation(JsonAdapter.class); if (annotation != null) { TypeAdapter<?> adapter = getTypeAdapter(constructorConstructor, gson, fieldType, annotation); if (adapter != null) return adapter; } return gson.getAdapter(fieldType); }
@SuppressWarnings("unchecked") @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) { Class<? super T> rawType = targetType.getRawType(); JsonAdapter annotation = rawType.getAnnotation(JsonAdapter.class); if (annotation == null) { return null; } return (TypeAdapter<T>) getTypeAdapter(constructorConstructor, gson, targetType, annotation); }
@SuppressWarnings({ "unchecked", "rawtypes" }) // Casts guarded by conditionals. TypeAdapter<?> getTypeAdapter(ConstructorConstructor constructorConstructor, Gson gson, TypeToken<?> type, JsonAdapter annotation) { Object instance = constructorConstructor.get(TypeToken.get(annotation.value())).construct(); TypeAdapter<?> typeAdapter; if (instance instanceof TypeAdapter) { typeAdapter = (TypeAdapter<?>) instance; } else if (instance instanceof TypeAdapterFactory) { typeAdapter = ((TypeAdapterFactory) instance).create(gson, type); } else if (instance instanceof JsonSerializer || instance instanceof JsonDeserializer) { JsonSerializer<?> serializer = instance instanceof JsonSerializer ? (JsonSerializer) instance : null; JsonDeserializer<?> deserializer = instance instanceof JsonDeserializer ? (JsonDeserializer) instance : null; typeAdapter = new TreeTypeAdapter(serializer, deserializer, gson, type, null); } else { throw new IllegalArgumentException( "@JsonAdapter value must be TypeAdapter, TypeAdapterFactory, " + "JsonSerializer or JsonDeserializer reference."); } if (typeAdapter != null) { typeAdapter = typeAdapter.nullSafe(); } return typeAdapter; }
@SuppressWarnings({ "unchecked", "rawtypes" }) // Casts guarded by conditionals. TypeAdapter<?> getTypeAdapter(ConstructorConstructor constructorConstructor, Gson gson, TypeToken<?> type, JsonAdapter annotation) { Object instance = constructorConstructor.get(TypeToken.get(annotation.value())).construct(); TypeAdapter<?> typeAdapter; if (instance instanceof TypeAdapter) { typeAdapter = (TypeAdapter<?>) instance; } else if (instance instanceof TypeAdapterFactory) { typeAdapter = ((TypeAdapterFactory) instance).create(gson, type); } else if (instance instanceof JsonSerializer || instance instanceof JsonDeserializer) { JsonSerializer<?> serializer = instance instanceof JsonSerializer ? (JsonSerializer) instance : null; JsonDeserializer<?> deserializer = instance instanceof JsonDeserializer ? (JsonDeserializer) instance : null; typeAdapter = new TreeTypeAdapter(serializer, deserializer, gson, type, null); } else { throw new IllegalArgumentException( "@JsonAdapter value must be TypeAdapter, TypeAdapterFactory, " + "JsonSerializer or JsonDeserializer reference."); } if (typeAdapter != null && annotation.nullSafe()) { typeAdapter = typeAdapter.nullSafe(); } return typeAdapter; }
@Override public WorkflowConfig deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { Class typeClass = (Class) type; List<Field> additionalConfigFields = Arrays.stream(typeClass.getFields()) .filter(field -> field.getAnnotation(SectionConfig.class) != null).collect(Collectors.toList()); WorkflowConfig config = (WorkflowConfig) ReflectionUtils.newInstance(typeClass); List<Field> configurableFields = Arrays.stream(typeClass.getFields()) .filter(field -> field.getAnnotation(ConfigurableProperty.class) != null).collect(Collectors.toList()); JsonObject configJsonObject = jsonElement.getAsJsonObject(); configurableFields.forEach(field -> { String fieldName = determineNameToUseForField(field); JsonElement fieldJsonObject = configJsonObject.get(fieldName); if (fieldJsonObject != null) { Object fieldValue; if (field.getAnnotation(JsonAdapter.class) != null) { JsonDeserializer customDeserializer = (JsonDeserializer) ReflectionUtils.newInstance(field.getAnnotation(JsonAdapter.class).value()); fieldValue = customDeserializer.deserialize(fieldJsonObject, field.getType(), jsonDeserializationContext); } else { fieldValue = jsonDeserializationContext.deserialize(fieldJsonObject, field.getType()); } setFieldValue(field, config, fieldValue); } }); additionalConfigFields.forEach(field -> { Object fieldConfig = jsonDeserializationContext.deserialize(jsonElement, field.getType()); setFieldValue(field, config, fieldConfig); }); return config; }
@SuppressWarnings({"rawtypes", "unchecked"}) public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) { JsonAdapter annotation = targetType.getRawType().getAnnotation(JsonAdapter.class); if (annotation == null) { return null; } return (TypeAdapter<T>) getTypeAdapter(constructorConstructor, gson, targetType, annotation); }