Skip to content

Commit 84c8d2b

Browse files
feat: Centralize and expose a registerTypeAdapters method on GsonFactory (#1510)
Co-authored-by: William Bergamin <wbergamin@salesforce.com>
1 parent 5b861d8 commit 84c8d2b

File tree

1 file changed

+21
-42
lines changed

1 file changed

+21
-42
lines changed

slack-api-client/src/main/java/com/slack/api/util/json/GsonFactory.java

Lines changed: 21 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,10 @@ private GsonFactory() {
2929
* Most of the Slack APIs' key naming is snake-cased.
3030
*/
3131
public static Gson createSnakeCase() {
32-
return new GsonBuilder()
33-
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
34-
.registerTypeAdapter(Instant.class, new JavaTimeInstantFactory())
35-
.registerTypeAdapter(File.class, new GsonFileFactory())
36-
.registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory())
37-
.registerTypeAdapter(TextObject.class, new GsonTextObjectFactory())
38-
.registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory())
39-
.registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory())
40-
.registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory())
41-
.registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory())
42-
.registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory())
43-
.registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory())
44-
.registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory())
45-
.registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory())
46-
.registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory())
47-
.registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory())
48-
.create();
32+
GsonBuilder gsonBuilder = new GsonBuilder()
33+
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
34+
registerTypeAdapters(gsonBuilder, false);
35+
return gsonBuilder.create();
4936
}
5037

5138
/**
@@ -54,21 +41,8 @@ public static Gson createSnakeCase() {
5441
public static Gson createSnakeCase(SlackConfig config) {
5542
boolean failOnUnknownProps = config.isFailOnUnknownProperties();
5643
GsonBuilder gsonBuilder = new GsonBuilder()
57-
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
58-
.registerTypeAdapter(Instant.class, new JavaTimeInstantFactory(failOnUnknownProps))
59-
.registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProps))
60-
.registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory(failOnUnknownProps))
61-
.registerTypeAdapter(TextObject.class, new GsonTextObjectFactory(failOnUnknownProps))
62-
.registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory(failOnUnknownProps))
63-
.registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory(failOnUnknownProps))
64-
.registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory(failOnUnknownProps))
65-
.registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory())
66-
.registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory(failOnUnknownProps))
67-
.registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps))
68-
.registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory(failOnUnknownProps))
69-
.registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory(failOnUnknownProps))
70-
.registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps))
71-
.registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory(failOnUnknownProps));
44+
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
45+
registerTypeAdapters(gsonBuilder, failOnUnknownProps);
7246
if (failOnUnknownProps || config.isLibraryMaintainerMode()) {
7347
gsonBuilder = gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
7448
}
@@ -83,27 +57,32 @@ public static Gson createSnakeCase(SlackConfig config) {
8357
*/
8458
public static Gson createCamelCase(SlackConfig config) {
8559
boolean failOnUnknownProps = config.isFailOnUnknownProperties();
86-
GsonBuilder gsonBuilder = new GsonBuilder()
60+
GsonBuilder gsonBuilder = new GsonBuilder();
61+
registerTypeAdapters(gsonBuilder, failOnUnknownProps);
62+
if (failOnUnknownProps || config.isLibraryMaintainerMode()) {
63+
gsonBuilder = gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
64+
}
65+
if (config.isPrettyResponseLoggingEnabled()) {
66+
gsonBuilder = gsonBuilder.setPrettyPrinting();
67+
}
68+
return gsonBuilder.create();
69+
}
70+
71+
public static void registerTypeAdapters(GsonBuilder builder, boolean failOnUnknownProps) {
72+
builder
8773
.registerTypeAdapter(Instant.class, new JavaTimeInstantFactory(failOnUnknownProps))
8874
.registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProps))
8975
.registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory(failOnUnknownProps))
9076
.registerTypeAdapter(TextObject.class, new GsonTextObjectFactory(failOnUnknownProps))
9177
.registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory(failOnUnknownProps))
9278
.registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory(failOnUnknownProps))
9379
.registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory(failOnUnknownProps))
94-
.registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps))
95-
.registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps))
80+
.registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory())
81+
.registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory(failOnUnknownProps))
9682
.registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps))
9783
.registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory(failOnUnknownProps))
9884
.registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory(failOnUnknownProps))
9985
.registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps))
10086
.registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory(failOnUnknownProps));
101-
if (failOnUnknownProps || config.isLibraryMaintainerMode()) {
102-
gsonBuilder = gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
103-
}
104-
if (config.isPrettyResponseLoggingEnabled()) {
105-
gsonBuilder = gsonBuilder.setPrettyPrinting();
106-
}
107-
return gsonBuilder.create();
10887
}
10988
}

0 commit comments

Comments
 (0)