Skip to content

Commit e767908

Browse files
committed
Settings.setting() supports generic return type
Issue spring-projectsgh-117
1 parent 2084fa0 commit e767908

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/Settings.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,15 @@ public <T> T setting(String name) {
6868
*
6969
* @param name the name of the setting
7070
* @param value the value of the setting
71+
* @param <T> the type of the {@link Settings}
7172
* @return the {@link Settings}
7273
*/
73-
public Settings setting(String name, Object value) {
74+
@SuppressWarnings("unchecked")
75+
public <T extends Settings> T setting(String name, Object value) {
7476
Assert.hasText(name, "name cannot be empty");
7577
Assert.notNull(value, "value cannot be null");
7678
this.settings.put(name, value);
77-
return this;
79+
return (T) this;
7880
}
7981

8082
/**
@@ -91,10 +93,12 @@ public Map<String, Object> settings() {
9193
* allowing the ability to add, replace, or remove.
9294
*
9395
* @param settingsConsumer a {@link Consumer} of the configuration settings {@code Map}
96+
* @param <T> the type of the {@link Settings}
9497
* @return the {@link Settings}
9598
*/
96-
public Settings settings(Consumer<Map<String, Object>> settingsConsumer) {
99+
@SuppressWarnings("unchecked")
100+
public <T extends Settings> T settings(Consumer<Map<String, Object>> settingsConsumer) {
97101
settingsConsumer.accept(this.settings);
98-
return this;
102+
return (T) this;
99103
}
100104
}

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/ClientSettingsTests.java

+14
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,18 @@ public void requireUserConsentWhenTrueThenSet() {
5353
ClientSettings clientSettings = new ClientSettings().requireUserConsent(true);
5454
assertThat(clientSettings.requireUserConsent()).isTrue();
5555
}
56+
57+
@Test
58+
public void settingWhenCalledThenReturnClientSettings() {
59+
ClientSettings clientSettings = new ClientSettings()
60+
.<ClientSettings>setting("name1", "value1")
61+
.requireProofKey(true)
62+
.<ClientSettings>settings(settings -> settings.put("name2", "value2"))
63+
.requireUserConsent(true);
64+
assertThat(clientSettings.settings()).hasSize(4);
65+
assertThat(clientSettings.requireProofKey()).isTrue();
66+
assertThat(clientSettings.requireUserConsent()).isTrue();
67+
assertThat(clientSettings.<String>setting("name1")).isEqualTo("value1");
68+
assertThat(clientSettings.<String>setting("name2")).isEqualTo("value2");
69+
}
5670
}

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/TokenSettingsTests.java

+13
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,17 @@ public void accessTokenTimeToLiveWhenProvidedThenSet() {
4949
TokenSettings tokenSettings = new TokenSettings().accessTokenTimeToLive(accessTokenTimeToLive);
5050
assertThat(tokenSettings.accessTokenTimeToLive()).isEqualTo(accessTokenTimeToLive);
5151
}
52+
53+
@Test
54+
public void settingWhenCalledThenReturnTokenSettings() {
55+
Duration accessTokenTimeToLive = Duration.ofMinutes(10);
56+
TokenSettings tokenSettings = new TokenSettings()
57+
.<TokenSettings>setting("name1", "value1")
58+
.accessTokenTimeToLive(accessTokenTimeToLive)
59+
.<TokenSettings>settings(settings -> settings.put("name2", "value2"));
60+
assertThat(tokenSettings.settings()).hasSize(3);
61+
assertThat(tokenSettings.accessTokenTimeToLive()).isEqualTo(accessTokenTimeToLive);
62+
assertThat(tokenSettings.<String>setting("name1")).isEqualTo("value1");
63+
assertThat(tokenSettings.<String>setting("name2")).isEqualTo("value2");
64+
}
5265
}

0 commit comments

Comments
 (0)