Skip to content

Commit b83cf71

Browse files
committed
Add granular allowlist for underscores in member names
1 parent 4420912 commit b83cf71

3 files changed

Lines changed: 50 additions & 0 deletions

File tree

codegen/src/main/java/software/amazon/awssdk/codegen/model/config/customization/CustomizationConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,11 @@ public class CustomizationConfig {
363363
*/
364364
private boolean enableEndpointProviderUriCaching;
365365

366+
/**
367+
* List of specific shape or member names that are allowed to contain underscores.
368+
*/
369+
private List<String> allowedUnderscoreNames = new ArrayList<>();
370+
366371
private CustomizationConfig() {
367372
}
368373

@@ -951,4 +956,12 @@ public boolean getEnableEndpointProviderUriCaching() {
951956
public void setEnableEndpointProviderUriCaching(boolean enableEndpointProviderUriCaching) {
952957
this.enableEndpointProviderUriCaching = enableEndpointProviderUriCaching;
953958
}
959+
960+
public List<String> getAllowedUnderscoreNames() {
961+
return allowedUnderscoreNames;
962+
}
963+
964+
public void setAllowedUnderscoreNames(List<String> allowedUnderscoreNames) {
965+
this.allowedUnderscoreNames = allowedUnderscoreNames;
966+
}
954967
}

codegen/src/main/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategy.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Arrays;
2929
import java.util.Collections;
3030
import java.util.HashSet;
31+
import java.util.List;
3132
import java.util.Locale;
3233
import java.util.Objects;
3334
import java.util.Optional;
@@ -498,6 +499,11 @@ private void validateCustomerVisibleName(String name, String location) {
498499
}
499500

500501
if (name.contains("_")) {
502+
List<String> allowedNames = customizationConfig.getAllowedUnderscoreNames();
503+
if (allowedNames != null && allowedNames.contains(name)) {
504+
return;
505+
}
506+
501507
UnderscoresInNameBehavior behavior = customizationConfig.getUnderscoresInNameBehavior();
502508

503509
String supportedBehaviors = Arrays.toString(UnderscoresInNameBehavior.values());

codegen/src/test/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategyTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import java.util.ArrayList;
2727
import java.util.Arrays;
28+
import java.util.List;
2829
import java.util.Map;
2930
import java.util.function.Consumer;
3031
import org.junit.Before;
@@ -337,6 +338,36 @@ public void validateAllowsUnderscoresWithCustomization() {
337338
strategy.validateCustomerVisibleNaming(model);
338339
}
339340

341+
@Test
342+
public void validateAllowsSpecificUnderscoresWithAllowlist() {
343+
CustomizationConfig customization =
344+
CustomizationConfig.create();
345+
customization.setAllowedUnderscoreNames(Arrays.asList("checksumXXHASH3_64", "foo_bar"));
346+
347+
NamingStrategy strategy = new DefaultNamingStrategy(serviceModel, customization);
348+
Metadata metadata = new Metadata();
349+
350+
metadata.setAsyncBuilderInterface("foo_bar");
351+
IntermediateModel model = new IntermediateModel();
352+
model.setMetadata(metadata);
353+
strategy.validateCustomerVisibleNaming(model);
354+
}
355+
356+
@Test
357+
public void validateRejectsSpecificUnderscoresWithAllowlist() {
358+
CustomizationConfig customization =
359+
CustomizationConfig.create();
360+
customization.setAllowedUnderscoreNames(Arrays.asList("checksumXXHASH3_64", "foo_bar"));
361+
362+
NamingStrategy strategy = new DefaultNamingStrategy(serviceModel, customization);
363+
Metadata metadata = new Metadata();
364+
365+
metadata.setAsyncBuilderInterface("fizz_buzz");
366+
IntermediateModel model = new IntermediateModel();
367+
model.setMetadata(metadata);
368+
assertThatThrownBy(() -> strategy.validateCustomerVisibleNaming(model)).isInstanceOf(RuntimeException.class);
369+
}
370+
340371
@Test
341372
public void getSigningNameForEnvironmentVariables_convertsDashAndUppercases() {
342373
when(serviceModel.getMetadata()).thenReturn(serviceMetadata);

0 commit comments

Comments
 (0)