diff --git a/slack-api-client/src/main/java/com/slack/api/util/json/GsonFactory.java b/slack-api-client/src/main/java/com/slack/api/util/json/GsonFactory.java index 20f424bd9..f501907e9 100644 --- a/slack-api-client/src/main/java/com/slack/api/util/json/GsonFactory.java +++ b/slack-api-client/src/main/java/com/slack/api/util/json/GsonFactory.java @@ -29,23 +29,10 @@ private GsonFactory() { * Most of the Slack APIs' key naming is snake-cased. */ public static Gson createSnakeCase() { - return new GsonBuilder() - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) - .registerTypeAdapter(Instant.class, new JavaTimeInstantFactory()) - .registerTypeAdapter(File.class, new GsonFileFactory()) - .registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory()) - .registerTypeAdapter(TextObject.class, new GsonTextObjectFactory()) - .registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory()) - .registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory()) - .registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory()) - .registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory()) - .registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory()) - .registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory()) - .registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory()) - .registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory()) - .registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory()) - .registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory()) - .create(); + GsonBuilder gsonBuilder = new GsonBuilder() + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); + registerTypeAdapters(gsonBuilder, false); + return gsonBuilder.create(); } /** @@ -54,21 +41,8 @@ public static Gson createSnakeCase() { public static Gson createSnakeCase(SlackConfig config) { boolean failOnUnknownProps = config.isFailOnUnknownProperties(); GsonBuilder gsonBuilder = new GsonBuilder() - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) - .registerTypeAdapter(Instant.class, new JavaTimeInstantFactory(failOnUnknownProps)) - .registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProps)) - .registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory(failOnUnknownProps)) - .registerTypeAdapter(TextObject.class, new GsonTextObjectFactory(failOnUnknownProps)) - .registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory(failOnUnknownProps)) - .registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory(failOnUnknownProps)) - .registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory(failOnUnknownProps)) - .registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory()) - .registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory(failOnUnknownProps)) - .registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps)) - .registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory(failOnUnknownProps)) - .registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory(failOnUnknownProps)) - .registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps)) - .registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory(failOnUnknownProps)); + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); + registerTypeAdapters(gsonBuilder, failOnUnknownProps); if (failOnUnknownProps || config.isLibraryMaintainerMode()) { gsonBuilder = gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory()); } @@ -83,7 +57,19 @@ public static Gson createSnakeCase(SlackConfig config) { */ public static Gson createCamelCase(SlackConfig config) { boolean failOnUnknownProps = config.isFailOnUnknownProperties(); - GsonBuilder gsonBuilder = new GsonBuilder() + GsonBuilder gsonBuilder = new GsonBuilder(); + registerTypeAdapters(gsonBuilder, failOnUnknownProps); + if (failOnUnknownProps || config.isLibraryMaintainerMode()) { + gsonBuilder = gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory()); + } + if (config.isPrettyResponseLoggingEnabled()) { + gsonBuilder = gsonBuilder.setPrettyPrinting(); + } + return gsonBuilder.create(); + } + + public static void registerTypeAdapters(GsonBuilder builder, boolean failOnUnknownProps) { + builder .registerTypeAdapter(Instant.class, new JavaTimeInstantFactory(failOnUnknownProps)) .registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProps)) .registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory(failOnUnknownProps)) @@ -91,19 +77,12 @@ public static Gson createCamelCase(SlackConfig config) { .registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory(failOnUnknownProps)) .registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory(failOnUnknownProps)) .registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory(failOnUnknownProps)) - .registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps)) - .registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps)) + .registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory()) + .registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory(failOnUnknownProps)) .registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps)) .registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory(failOnUnknownProps)) .registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory(failOnUnknownProps)) .registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps)) .registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory(failOnUnknownProps)); - if (failOnUnknownProps || config.isLibraryMaintainerMode()) { - gsonBuilder = gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory()); - } - if (config.isPrettyResponseLoggingEnabled()) { - gsonBuilder = gsonBuilder.setPrettyPrinting(); - } - return gsonBuilder.create(); } }