Skip to content

Commit 1d9af46

Browse files
Gravewalker666mtdowling
authored andcommitted
Address comments
1 parent 42a890c commit 1d9af46

2 files changed

Lines changed: 13 additions & 20 deletions

File tree

core/src/main/java/software/amazon/smithy/java/core/schema/Validator.java

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
import java.nio.ByteBuffer;
1111
import java.time.Instant;
1212
import java.util.ArrayList;
13-
import java.util.Arrays;
1413
import java.util.List;
1514
import java.util.ServiceLoader;
1615
import java.util.function.BiConsumer;
16+
import java.util.function.Supplier;
1717
import software.amazon.smithy.java.core.serde.ListSerializer;
1818
import software.amazon.smithy.java.core.serde.MapSerializer;
1919
import software.amazon.smithy.java.core.serde.SerializationException;
@@ -127,30 +127,22 @@ static final class ShapeValidator implements ShapeSerializer, MapSerializer {
127127
private static final List<CustomConstraint>[] CUSTOM_CONSTRAINTS_BY_TYPE = new List[ShapeType.values().length];
128128
private static final boolean HAS_CUSTOM_CONSTRAINTS;
129129

130-
private static void addConstraint(int index, CustomConstraint constraint) {
131-
if (CUSTOM_CONSTRAINTS_BY_TYPE[index] == null) {
132-
CUSTOM_CONSTRAINTS_BY_TYPE[index] = new ArrayList<>();
133-
}
134-
CUSTOM_CONSTRAINTS_BY_TYPE[index].add(constraint);
135-
}
136-
137130
static {
138131
// Load all custom constraints at startup and organize by type
139132
var loader = ServiceLoader.load(CustomConstraint.class, CustomConstraint.class.getClassLoader());
133+
var anyConstraintsFound = false;
140134
for (var constraint : loader) {
141135
var types = constraint.appliesTo();
142-
if (types.isEmpty()) {
143-
// Add the constraint to all types if the enum set is empty
144-
for (var i = 0; i < CUSTOM_CONSTRAINTS_BY_TYPE.length; i++) {
145-
addConstraint(i, constraint);
146-
}
147-
} else {
148-
for (var type : types) {
149-
addConstraint(type.ordinal(), constraint);
136+
for (var type : types) {
137+
var index = type.ordinal();
138+
if (CUSTOM_CONSTRAINTS_BY_TYPE[index] == null) {
139+
CUSTOM_CONSTRAINTS_BY_TYPE[index] = new ArrayList<>();
150140
}
141+
CUSTOM_CONSTRAINTS_BY_TYPE[index].add(constraint);
142+
anyConstraintsFound = true;
151143
}
152144
}
153-
HAS_CUSTOM_CONSTRAINTS = Arrays.stream(CUSTOM_CONSTRAINTS_BY_TYPE).anyMatch(java.util.Objects::nonNull);
145+
HAS_CUSTOM_CONSTRAINTS = anyConstraintsFound;
154146
}
155147

156148
private final int maxAllowedErrors;
@@ -546,8 +538,9 @@ private void applyCustomConstraints(Schema schema, Object value) {
546538
// Get constraints for this specific type
547539
var typeConstraints = CUSTOM_CONSTRAINTS_BY_TYPE[schema.type().ordinal()];
548540
if (typeConstraints != null) {
541+
Supplier<String> pathSupplier = this::createPath;
549542
for (var constraint : typeConstraints) {
550-
var validationErrors = constraint.validate(schema, value, this::createPath);
543+
var validationErrors = constraint.validate(schema, value, pathSupplier);
551544
for (var error : validationErrors) {
552545
addError(error);
553546
}

core/src/test/java/software/amazon/smithy/java/core/schema/TestCustomConstraints.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ private TestCustomConstraints() {}
1717
public static class AlwaysFailsConstraint implements CustomConstraint {
1818
@Override
1919
public EnumSet<ShapeType> appliesTo() {
20-
// Empty set means wildcard - applies to all types
21-
return EnumSet.noneOf(ShapeType.class);
20+
// Applies to all types
21+
return EnumSet.allOf(ShapeType.class);
2222
}
2323

2424
@Override

0 commit comments

Comments
 (0)