Skip to content

Commit 6622633

Browse files
committed
Convert exceptions to validation errors
1 parent 9ec6d43 commit 6622633

File tree

4 files changed

+50
-16
lines changed

4 files changed

+50
-16
lines changed

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

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@
4343
import software.amazon.awssdk.codegen.model.intermediate.Metadata;
4444
import software.amazon.awssdk.codegen.model.service.ServiceModel;
4545
import software.amazon.awssdk.codegen.model.service.Shape;
46+
import software.amazon.awssdk.codegen.validation.ModelInvalidException;
47+
import software.amazon.awssdk.codegen.validation.ValidationEntry;
48+
import software.amazon.awssdk.codegen.validation.ValidationErrorId;
49+
import software.amazon.awssdk.codegen.validation.ValidationErrorSeverity;
4650
import software.amazon.awssdk.utils.Logger;
4751
import software.amazon.awssdk.utils.StringUtils;
48-
import software.amazon.awssdk.utils.Validate;
4952

5053
/**
5154
* Default implementation of naming strategy respecting.
@@ -498,17 +501,36 @@ private void validateCustomerVisibleName(String name, String location) {
498501
UnderscoresInNameBehavior behavior = customizationConfig.getUnderscoresInNameBehavior();
499502

500503
String supportedBehaviors = Arrays.toString(UnderscoresInNameBehavior.values());
501-
Validate.notNull(behavior,
502-
"Encountered a name or identifier that the customer will see (%s in the %s) with an underscore. "
503-
+ "This isn't idiomatic in Java. Please either remove the underscores or apply the "
504-
+ "'underscoresInNameBehavior' customization for this service (Supported "
505-
+ "'underscoresInNameBehavior' values: %s).", name, location, supportedBehaviors);
506-
Validate.isTrue(behavior == UnderscoresInNameBehavior.ALLOW,
507-
"Unsupported underscoresInShapeNameBehavior: %s. Supported values: %s", behavior, supportedBehaviors);
504+
if (behavior == null) {
505+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
506+
ValidationErrorId.INVALID_IDENTIFIER_NAME,
507+
ValidationErrorSeverity.DANGER,
508+
String.format(
509+
"Encountered a name or identifier that the customer will see (%s in the %s) with an underscore. "
510+
+ "This isn't idiomatic in Java. Please either remove the underscores or apply the "
511+
+ "'underscoresInNameBehavior' customization for this service (Supported "
512+
+ "'underscoresInNameBehavior' values: %s).", name, location, supportedBehaviors)
513+
));
514+
}
515+
if (behavior != UnderscoresInNameBehavior.ALLOW) {
516+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
517+
ValidationErrorId.INVALID_CODEGEN_CUSTOMIZATION,
518+
ValidationErrorSeverity.DANGER,
519+
String.format(
520+
"Unsupported underscoresInShapeNameBehavior: %s. Supported values: %s",
521+
behavior, supportedBehaviors)
522+
));
523+
}
508524
}
509525

510-
Validate.isTrue(VALID_IDENTIFIER_NAME.matcher(name).matches(),
511-
"Encountered a name or identifier that is invalid within Java (%s in %s). Please remove invalid "
512-
+ "characters.", name, location);
526+
if (!VALID_IDENTIFIER_NAME.matcher(name).matches()) {
527+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
528+
ValidationErrorId.INVALID_IDENTIFIER_NAME,
529+
ValidationErrorSeverity.DANGER,
530+
String.format(
531+
"Encountered a name or identifier that is invalid within Java (%s in %s). Please remove invalid "
532+
+ "characters.", name, location)
533+
));
534+
}
513535
}
514536
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpec.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
import software.amazon.awssdk.codegen.poet.ClassSpec;
3535
import software.amazon.awssdk.codegen.poet.PoetExtension;
3636
import software.amazon.awssdk.codegen.poet.model.TypeProvider;
37+
import software.amazon.awssdk.codegen.validation.ModelInvalidException;
38+
import software.amazon.awssdk.codegen.validation.ValidationEntry;
39+
import software.amazon.awssdk.codegen.validation.ValidationErrorId;
40+
import software.amazon.awssdk.codegen.validation.ValidationErrorSeverity;
3741
import software.amazon.awssdk.core.util.PaginatorUtils;
3842

3943
public abstract class PaginatorsClassSpec implements ClassSpec {
@@ -64,7 +68,12 @@ public PaginatorsClassSpec(IntermediateModel model, String c2jOperationName, Pag
6468
this.typeProvider = new TypeProvider(model);
6569
this.operationModel = model.getOperation(c2jOperationName);
6670
if (operationModel == null) {
67-
throw new IllegalArgumentException("The service model does not model an operation '" + c2jOperationName + "'");
71+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
72+
ValidationErrorId.UNKNOWN_OPERATION,
73+
ValidationErrorSeverity.DANGER,
74+
"Invalid paginator definition - The service model does not model the referenced operation '" +
75+
c2jOperationName + "'"
76+
));
6877
}
6978
this.paginationDocs = new PaginationDocs(model, operationModel, paginatorDefinition);
7079
}

codegen/src/main/java/software/amazon/awssdk/codegen/validation/ValidationErrorId.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public enum ValidationErrorId {
2424
REQUEST_URI_NOT_FOUND("The request URI does not exist."),
2525

2626
INVALID_CODEGEN_CUSTOMIZATION("A customization is enabled for this service that cannot be applied for the given service "
27-
+ "model.")
28-
;
27+
+ "model."),
28+
UNKNOWN_OPERATION("The model references an unknown operation."),
29+
INVALID_IDENTIFIER_NAME("The model contains an invalid or non-idiomatic name or identifier.");
2930

3031
private final String description;
3132

codegen/src/test/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpecTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@
2323
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2424
import software.amazon.awssdk.codegen.model.service.PaginatorDefinition;
2525
import software.amazon.awssdk.codegen.poet.ClientTestModels;
26+
import software.amazon.awssdk.codegen.validation.ModelInvalidException;
2627

2728
public class PaginatorsClassSpecTest {
2829
@Test
2930
public void constructor_unknownOperationName_throws() {
3031
assertThatThrownBy(() -> new TestPaginatorSpec(ClientTestModels.awsJsonServiceModels(),
3132
"~~DoesNotExist",
3233
new PaginatorDefinition()))
33-
.isInstanceOf(IllegalArgumentException.class)
34-
.hasMessageContaining("The service model does not model an operation '~~DoesNotExist'");
34+
.isInstanceOf(ModelInvalidException.class)
35+
.hasMessageContaining("Invalid paginator definition - "
36+
+ "The service model does not model the referenced operation '~~DoesNotExist'");
3537
}
3638

3739
private static class TestPaginatorSpec extends PaginatorsClassSpec {

0 commit comments

Comments
 (0)