Skip to content

Commit 4339fc2

Browse files
committed
addressing more comments
1 parent d4ca333 commit 4339fc2

File tree

3 files changed

+62
-64
lines changed

3 files changed

+62
-64
lines changed

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

Lines changed: 42 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -30,83 +30,71 @@ private GsonFactory() {
3030
* Most of the Slack APIs' key naming is snake-cased.
3131
*/
3232
public static Gson createSnakeCase() {
33-
GsonBuilder gsonBuilder = getSnakeCaseBuilder();
34-
configureBuilder(gsonBuilder);
33+
GsonBuilder gsonBuilder = new GsonBuilder()
34+
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
35+
registerTypeAdapters(gsonBuilder, false);
3536
return gsonBuilder.create();
3637
}
3738

3839
/**
3940
* Most of the Slack APIs' key naming is snake-cased.
4041
*/
4142
public static Gson createSnakeCase(SlackConfig config) {
42-
GsonBuilder gsonBuilder = getSnakeCaseBuilder();
43-
configureBuilder(gsonBuilder, config);
43+
boolean failOnUnknownProps = config.isFailOnUnknownProperties();
44+
GsonBuilder gsonBuilder = new GsonBuilder()
45+
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
46+
registerTypeAdapters(gsonBuilder, failOnUnknownProps);
47+
48+
if (failOnUnknownProps || config.isLibraryMaintainerMode()) {
49+
gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
50+
}
51+
if (config.isFailOnRequiredProperties()) {
52+
gsonBuilder.registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory());
53+
}
54+
if (config.isPrettyResponseLoggingEnabled()) {
55+
gsonBuilder.setPrettyPrinting();
56+
}
57+
4458
return gsonBuilder.create();
4559
}
4660

4761
/**
4862
* Mainly used for SCIM APIs.
4963
*/
5064
public static Gson createCamelCase(SlackConfig config) {
65+
boolean failOnUnknownProps = config.isFailOnUnknownProperties();
5166
GsonBuilder gsonBuilder = new GsonBuilder();
52-
configureBuilder(gsonBuilder, config);
53-
return gsonBuilder.create();
54-
}
67+
registerTypeAdapters(gsonBuilder, failOnUnknownProps);
5568

56-
private static GsonBuilder getSnakeCaseBuilder() {
57-
return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
58-
}
59-
60-
private static void configureBuilder(GsonBuilder builder) {
61-
configureBuilder(builder, false, false, false, false);
62-
}
63-
64-
private static void configureBuilder(GsonBuilder builder, SlackConfig config) {
65-
configureBuilder(
66-
builder,
67-
config.isFailOnUnknownProperties(),
68-
config.isFailOnRequiredProperties(),
69-
config.isPrettyResponseLoggingEnabled(),
70-
config.isLibraryMaintainerMode()
71-
);
72-
}
73-
74-
private static void configureBuilder(
75-
GsonBuilder builder,
76-
boolean failOnUnknownProps,
77-
boolean failOnRequiredProps,
78-
boolean isPrettyResponseLoggingEnabled,
79-
boolean isLibraryMaintainerMode
80-
) {
81-
if (failOnUnknownProps || isLibraryMaintainerMode) {
82-
builder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
69+
if (failOnUnknownProps || config.isLibraryMaintainerMode()) {
70+
gsonBuilder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
8371
}
84-
if (failOnRequiredProps) {
85-
builder.registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory());
72+
if (config.isFailOnRequiredProperties()) {
73+
gsonBuilder.registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory());
8674
}
87-
if (isPrettyResponseLoggingEnabled) {
88-
builder.setPrettyPrinting();
75+
if (config.isPrettyResponseLoggingEnabled()) {
76+
gsonBuilder.setPrettyPrinting();
8977
}
9078

91-
registerTypeAdapters(builder, failOnUnknownProps);
79+
return gsonBuilder.create();
9280
}
9381

9482
public static void registerTypeAdapters(GsonBuilder builder, boolean failOnUnknownProps) {
9583
builder
96-
.registerTypeAdapter(Instant.class, new JavaTimeInstantFactory(failOnUnknownProps))
97-
.registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProps))
98-
.registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory(failOnUnknownProps))
99-
.registerTypeAdapter(TextObject.class, new GsonTextObjectFactory(failOnUnknownProps))
100-
.registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory(failOnUnknownProps))
101-
.registerTypeAdapter(ContextActionsBlockElement.class, new GsonContextActionsBlockElementFactory(failOnUnknownProps))
102-
.registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory(failOnUnknownProps))
103-
.registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory(failOnUnknownProps))
104-
.registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory())
105-
.registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory(failOnUnknownProps))
106-
.registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps))
107-
.registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory(failOnUnknownProps))
108-
.registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory(failOnUnknownProps))
109-
.registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps))
110-
.registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory(failOnUnknownProps));
84+
.registerTypeAdapter(Instant.class, new JavaTimeInstantFactory(failOnUnknownProps))
85+
.registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProps))
86+
.registerTypeAdapter(LayoutBlock.class, new GsonLayoutBlockFactory(failOnUnknownProps))
87+
.registerTypeAdapter(TextObject.class, new GsonTextObjectFactory(failOnUnknownProps))
88+
.registerTypeAdapter(ContextBlockElement.class, new GsonContextBlockElementFactory(failOnUnknownProps))
89+
.registerTypeAdapter(ContextActionsBlockElement.class, new GsonContextActionsBlockElementFactory(failOnUnknownProps))
90+
.registerTypeAdapter(BlockElement.class, new GsonBlockElementFactory(failOnUnknownProps))
91+
.registerTypeAdapter(RichTextElement.class, new GsonRichTextElementFactory(failOnUnknownProps))
92+
.registerTypeAdapter(FunctionExecutedEvent.InputValue.class, new GsonFunctionExecutedEventInputValueFactory())
93+
.registerTypeAdapter(Attachment.VideoHtml.class, new GsonMessageAttachmentVideoHtmlFactory(failOnUnknownProps))
94+
.registerTypeAdapter(MessageChangedEvent.PreviousMessage.class, new GsonMessageChangedEventPreviousMessageFactory(failOnUnknownProps))
95+
.registerTypeAdapter(AppWorkflow.StepInputValue.class, new GsonAppWorkflowStepInputValueFactory(failOnUnknownProps))
96+
.registerTypeAdapter(AppWorkflow.StepInputValueElementDefault.class, new GsonAppWorkflowStepInputValueDefaultFactory(failOnUnknownProps))
97+
.registerTypeAdapter(LogsResponse.DetailsChangedValue.class, new GsonAuditLogsDetailsChangedValueFactory(failOnUnknownProps))
98+
.registerTypeAdapter(LogsResponse.UserIDs.class, new GsonAuditLogsDetailsUserIDsFactory(failOnUnknownProps));
11199
}
112100
}

slack-api-model/src/test/java/test_locally/unit/GsonFactory.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,26 @@ private GsonFactory() {
2020
}
2121

2222
public static Gson createSnakeCase() {
23-
return createSnakeCase(false, true);
23+
return createSnakeCase(false, true, false);
2424
}
2525

2626
public static Gson createSnakeCaseWithoutUnknownPropertyDetection(boolean failOnUnknownProperties) {
27-
return createSnakeCase(failOnUnknownProperties, false);
27+
return createSnakeCase(failOnUnknownProperties, false, false);
28+
}
29+
30+
public static Gson createSnakeCaseWithRequiredPropertyDetection() {
31+
return createSnakeCase(false, true, true);
2832
}
2933

3034
public static Gson createSnakeCase(boolean failOnUnknownProperties, boolean unknownPropertyDetection) {
31-
return getBuilder(failOnUnknownProperties, unknownPropertyDetection).create();
35+
return createSnakeCase(failOnUnknownProperties, unknownPropertyDetection, false);
3236
}
3337

34-
public static GsonBuilder getBuilder(boolean failOnUnknownProperties, boolean unknownPropertyDetection) {
38+
public static Gson createSnakeCase(
39+
boolean failOnUnknownProperties,
40+
boolean unknownPropertyDetection,
41+
boolean failOnRequiredProperties
42+
) {
3543
GsonBuilder builder = new GsonBuilder()
3644
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
3745
.registerTypeAdapter(File.class, new GsonFileFactory(failOnUnknownProperties))
@@ -51,7 +59,10 @@ public static GsonBuilder getBuilder(boolean failOnUnknownProperties, boolean un
5159
if (unknownPropertyDetection) {
5260
builder.registerTypeAdapterFactory(new UnknownPropertyDetectionAdapterFactory());
5361
}
62+
if (failOnRequiredProperties) {
63+
builder.registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory());
64+
}
5465

55-
return builder;
66+
return builder.create();
5667
}
5768
}

slack-api-model/src/test/java/test_locally/util/JSONUtilityTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,7 @@ public void testGsonFunctionExecutedEventInputValueFactory() {
166166

167167
@Test
168168
public void testRequiredPropertyDetectionAdapterFactory_basicCase_failureCases() {
169-
Gson gson = GsonFactory.getBuilder(true, true)
170-
.registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory()).create();
169+
Gson gson = GsonFactory.createSnakeCaseWithRequiredPropertyDetection();
171170

172171
// Serialization
173172
TestClassWithRequiredBasic instance = TestClassWithRequiredBasic.builder().build();
@@ -180,7 +179,7 @@ public void testRequiredPropertyDetectionAdapterFactory_basicCase_failureCases()
180179

181180
@Test
182181
public void testRequiredPropertyDetectionAdapterFactory_basicCase_happyPath() {
183-
Gson gson = GsonFactory.getBuilder(true, true).registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory()).create();
182+
Gson gson = GsonFactory.createSnakeCaseWithRequiredPropertyDetection();
184183
TestClassWithRequiredBasic instanceNoName = TestClassWithRequiredBasic.builder().id(1).build();
185184
TestClassWithRequiredBasic instanceWithName = TestClassWithRequiredBasic.builder().id(1).name("Hello").build();
186185

@@ -202,7 +201,7 @@ public void testRequiredPropertyDetectionAdapterFactory_basicCase_happyPath() {
202201

203202
@Test
204203
public void testRequiredPropertyDetectionAdapterFactory_advancedCase_failureCases() {
205-
Gson gson = GsonFactory.getBuilder(true, true).registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory()).create();
204+
Gson gson = GsonFactory.createSnakeCaseWithRequiredPropertyDetection();
206205

207206
// Serialization
208207
JsonParseException e = assertThrows(JsonParseException.class, () -> gson.toJson(TestClassWithRequiredAdvanced.builder().build()));
@@ -239,7 +238,7 @@ public void testRequiredPropertyDetectionAdapterFactory_advancedCase_failureCase
239238

240239
@Test
241240
public void testRequiredPropertyDetectionAdapterFactory_advancedCase_happyPath() {
242-
Gson gson = GsonFactory.getBuilder(true, true).registerTypeAdapterFactory(new RequiredPropertyDetectionAdapterFactory()).create();
241+
Gson gson = GsonFactory.createSnakeCaseWithRequiredPropertyDetection();
243242
TestClassWithRequiredAdvanced instance = TestClassWithRequiredAdvanced.builder()
244243
.id(1)
245244
.name("test")

0 commit comments

Comments
 (0)