From 003f95d656558ee81d4cc3c085c0552907861498 Mon Sep 17 00:00:00 2001 From: Justin Tay <49700559+justin-tay@users.noreply.github.com> Date: Thu, 13 Jun 2024 08:13:02 +0800 Subject: [PATCH] Set initial array list size --- .../schema/AdditionalPropertiesValidator.java | 2 +- .../java/com/networknt/schema/AllOfValidator.java | 3 ++- .../java/com/networknt/schema/AnyOfValidator.java | 3 ++- .../java/com/networknt/schema/ItemsValidator.java | 3 ++- .../java/com/networknt/schema/JsonSchema.java | 4 +++- .../com/networknt/schema/NotAllowedValidator.java | 5 ++++- .../java/com/networknt/schema/OneOfValidator.java | 3 ++- .../networknt/schema/PrefixItemsValidator.java | 3 +-- .../com/networknt/schema/RequiredValidator.java | 5 ++++- .../com/networknt/schema/UnionTypeValidator.java | 15 +++++++++------ 10 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/networknt/schema/AdditionalPropertiesValidator.java b/src/main/java/com/networknt/schema/AdditionalPropertiesValidator.java index d2c21f97..0f978a0f 100644 --- a/src/main/java/com/networknt/schema/AdditionalPropertiesValidator.java +++ b/src/main/java/com/networknt/schema/AdditionalPropertiesValidator.java @@ -71,7 +71,7 @@ public AdditionalPropertiesValidator(SchemaLocation schemaLocation, JsonNodePath JsonNode patternPropertiesNode = parentSchema.getSchemaNode().get(PatternPropertiesValidator.PROPERTY); if (patternPropertiesNode != null) { - this.patternProperties = new ArrayList<>(); + this.patternProperties = new ArrayList<>(patternPropertiesNode.size()); for (Iterator it = patternPropertiesNode.fieldNames(); it.hasNext(); ) { patternProperties.add(RegularExpression.compile(it.next(), validationContext)); } diff --git a/src/main/java/com/networknt/schema/AllOfValidator.java b/src/main/java/com/networknt/schema/AllOfValidator.java index 884930c1..01bc1b6d 100644 --- a/src/main/java/com/networknt/schema/AllOfValidator.java +++ b/src/main/java/com/networknt/schema/AllOfValidator.java @@ -31,7 +31,7 @@ public class AllOfValidator extends BaseJsonValidator { private static final Logger logger = LoggerFactory.getLogger(AllOfValidator.class); - private final List schemas = new ArrayList<>(); + private final List schemas; public AllOfValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) { super(schemaLocation, evaluationPath, schemaNode, parentSchema, ValidatorTypeCode.ALL_OF, validationContext); @@ -44,6 +44,7 @@ public AllOfValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath .build()); } int size = schemaNode.size(); + this.schemas = new ArrayList<>(size); for (int i = 0; i < size; i++) { this.schemas.add(validationContext.newSchema(schemaLocation.append(i), evaluationPath.append(i), schemaNode.get(i), parentSchema)); diff --git a/src/main/java/com/networknt/schema/AnyOfValidator.java b/src/main/java/com/networknt/schema/AnyOfValidator.java index 5e9773b4..202b98db 100644 --- a/src/main/java/com/networknt/schema/AnyOfValidator.java +++ b/src/main/java/com/networknt/schema/AnyOfValidator.java @@ -31,7 +31,7 @@ public class AnyOfValidator extends BaseJsonValidator { private static final Logger logger = LoggerFactory.getLogger(AnyOfValidator.class); private static final String DISCRIMINATOR_REMARK = "and the discriminator-selected candidate schema didn't pass validation"; - private final List schemas = new ArrayList<>(); + private final List schemas; private Boolean canShortCircuit = null; @@ -46,6 +46,7 @@ public AnyOfValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath .build()); } int size = schemaNode.size(); + this.schemas = new ArrayList<>(size); for (int i = 0; i < size; i++) { this.schemas.add(validationContext.newSchema(schemaLocation.append(i), evaluationPath.append(i), schemaNode.get(i), parentSchema)); diff --git a/src/main/java/com/networknt/schema/ItemsValidator.java b/src/main/java/com/networknt/schema/ItemsValidator.java index 4407f91b..5a6932f5 100644 --- a/src/main/java/com/networknt/schema/ItemsValidator.java +++ b/src/main/java/com/networknt/schema/ItemsValidator.java @@ -50,15 +50,16 @@ public ItemsValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath Boolean additionalItems = null; - this.tupleSchema = new ArrayList<>(); JsonSchema foundSchema = null; JsonSchema foundAdditionalSchema = null; JsonNode additionalItemsSchemaNode = null; if (schemaNode.isObject() || schemaNode.isBoolean()) { foundSchema = validationContext.newSchema(schemaLocation, evaluationPath, schemaNode, parentSchema); + this.tupleSchema = Collections.emptyList(); } else { int i = 0; + this.tupleSchema = new ArrayList<>(schemaNode.size()); for (JsonNode s : schemaNode) { this.tupleSchema.add(validationContext.newSchema(schemaLocation.append(i), evaluationPath.append(i), s, parentSchema)); diff --git a/src/main/java/com/networknt/schema/JsonSchema.java b/src/main/java/com/networknt/schema/JsonSchema.java index 7257681d..5b5ff299 100644 --- a/src/main/java/com/networknt/schema/JsonSchema.java +++ b/src/main/java/com/networknt/schema/JsonSchema.java @@ -420,8 +420,9 @@ private JsonNode handleNullNode(String ref, JsonSchema schema) { * Please note that the key in {@link #validators} map is the evaluation path. */ private List read(JsonNode schemaNode) { - List validators = new ArrayList<>(); + List validators; if (schemaNode.isBoolean()) { + validators = new ArrayList<>(1); if (schemaNode.booleanValue()) { JsonNodePath path = getEvaluationPath().append("true"); JsonValidator validator = this.validationContext.newValidator(getSchemaLocation().append("true"), path, @@ -437,6 +438,7 @@ private List read(JsonNode schemaNode) { JsonValidator refValidator = null; Iterator> iterator = schemaNode.fields(); + validators = new ArrayList<>(schemaNode.size()); while (iterator.hasNext()) { Entry entry = iterator.next(); String pname = entry.getKey(); diff --git a/src/main/java/com/networknt/schema/NotAllowedValidator.java b/src/main/java/com/networknt/schema/NotAllowedValidator.java index 401729d6..448bd978 100644 --- a/src/main/java/com/networknt/schema/NotAllowedValidator.java +++ b/src/main/java/com/networknt/schema/NotAllowedValidator.java @@ -28,15 +28,18 @@ public class NotAllowedValidator extends BaseJsonValidator implements JsonValidator { private static final Logger logger = LoggerFactory.getLogger(NotAllowedValidator.class); - private final List fieldNames = new ArrayList<>(); + private final List fieldNames; public NotAllowedValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) { super(schemaLocation, evaluationPath, schemaNode, parentSchema, ValidatorTypeCode.NOT_ALLOWED, validationContext); if (schemaNode.isArray()) { int size = schemaNode.size(); + this.fieldNames = new ArrayList<>(size); for (int i = 0; i < size; i++) { fieldNames.add(schemaNode.get(i).asText()); } + } else { + this.fieldNames = Collections.emptyList(); } } diff --git a/src/main/java/com/networknt/schema/OneOfValidator.java b/src/main/java/com/networknt/schema/OneOfValidator.java index c78df983..35505b24 100644 --- a/src/main/java/com/networknt/schema/OneOfValidator.java +++ b/src/main/java/com/networknt/schema/OneOfValidator.java @@ -30,7 +30,7 @@ public class OneOfValidator extends BaseJsonValidator { private static final Logger logger = LoggerFactory.getLogger(OneOfValidator.class); - private final List schemas = new ArrayList<>(); + private final List schemas; private Boolean canShortCircuit = null; @@ -45,6 +45,7 @@ public OneOfValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath .build()); } int size = schemaNode.size(); + this.schemas = new ArrayList<>(size); for (int i = 0; i < size; i++) { JsonNode childNode = schemaNode.get(i); this.schemas.add(validationContext.newSchema( schemaLocation.append(i), evaluationPath.append(i), childNode, parentSchema)); diff --git a/src/main/java/com/networknt/schema/PrefixItemsValidator.java b/src/main/java/com/networknt/schema/PrefixItemsValidator.java index a1db79a0..f79bf834 100644 --- a/src/main/java/com/networknt/schema/PrefixItemsValidator.java +++ b/src/main/java/com/networknt/schema/PrefixItemsValidator.java @@ -44,10 +44,9 @@ public class PrefixItemsValidator extends BaseJsonValidator { public PrefixItemsValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) { super(schemaLocation, evaluationPath, schemaNode, parentSchema, ValidatorTypeCode.PREFIX_ITEMS, validationContext); - this.tupleSchema = new ArrayList<>(); - if (schemaNode instanceof ArrayNode && 0 < schemaNode.size()) { int i = 0; + this.tupleSchema = new ArrayList<>(schemaNode.size()); for (JsonNode s : schemaNode) { this.tupleSchema.add(validationContext.newSchema(schemaLocation.append(i), evaluationPath.append(i), s, parentSchema)); diff --git a/src/main/java/com/networknt/schema/RequiredValidator.java b/src/main/java/com/networknt/schema/RequiredValidator.java index 1e084c10..b0bf63b6 100644 --- a/src/main/java/com/networknt/schema/RequiredValidator.java +++ b/src/main/java/com/networknt/schema/RequiredValidator.java @@ -28,14 +28,17 @@ public class RequiredValidator extends BaseJsonValidator implements JsonValidator { private static final Logger logger = LoggerFactory.getLogger(RequiredValidator.class); - private final List fieldNames = new ArrayList<>(); + private final List fieldNames; public RequiredValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) { super(schemaLocation, evaluationPath, schemaNode, parentSchema, ValidatorTypeCode.REQUIRED, validationContext); if (schemaNode.isArray()) { + this.fieldNames = new ArrayList<>(schemaNode.size()); for (JsonNode fieldNme : schemaNode) { fieldNames.add(fieldNme.asText()); } + } else { + this.fieldNames = Collections.emptyList(); } } diff --git a/src/main/java/com/networknt/schema/UnionTypeValidator.java b/src/main/java/com/networknt/schema/UnionTypeValidator.java index 184a119f..c6292ef8 100644 --- a/src/main/java/com/networknt/schema/UnionTypeValidator.java +++ b/src/main/java/com/networknt/schema/UnionTypeValidator.java @@ -31,7 +31,7 @@ public class UnionTypeValidator extends BaseJsonValidator implements JsonValidator { private static final Logger logger = LoggerFactory.getLogger(UnionTypeValidator.class); - private final List schemas = new ArrayList<>(); + private final List schemas; private final String error; public UnionTypeValidator(SchemaLocation schemaLocation, JsonNodePath evaluationPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) { @@ -41,21 +41,24 @@ public UnionTypeValidator(SchemaLocation schemaLocation, JsonNodePath evaluation String sep = ""; errorBuilder.append('['); - if (!schemaNode.isArray()) + if (!schemaNode.isArray()) { throw new JsonSchemaException("Expected array for type property on Union Type Definition."); + } int i = 0; + this.schemas = new ArrayList<>(schemaNode.size()); for (JsonNode n : schemaNode) { JsonType t = TypeFactory.getSchemaNodeType(n); errorBuilder.append(sep).append(t); sep = ", "; - if (n.isObject()) + if (n.isObject()) { schemas.add(validationContext.newSchema(schemaLocation.append(ValidatorTypeCode.TYPE.getValue()), evaluationPath.append(ValidatorTypeCode.TRUE.getValue()), n, parentSchema)); - else - schemas.add(new TypeValidator(schemaLocation.append(i), evaluationPath.append(i), n, parentSchema, validationContext)); - + } else { + schemas.add(new TypeValidator(schemaLocation.append(i), evaluationPath.append(i), n, parentSchema, + validationContext)); + } i++; }