From 49b6bf5c0be9c0325f65dc27fc653cc13755f9a8 Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Fri, 8 Sep 2017 12:09:15 +0200 Subject: [PATCH] HV-1480 Only set the property value if required Only property and container node exposes it to users. --- .../validator/internal/engine/ValueContext.java | 2 +- .../validator/internal/engine/path/PathImpl.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/engine/src/main/java/org/hibernate/validator/internal/engine/ValueContext.java b/engine/src/main/java/org/hibernate/validator/internal/engine/ValueContext.java index a9b8400d6d..a57dd58c93 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/engine/ValueContext.java +++ b/engine/src/main/java/org/hibernate/validator/internal/engine/ValueContext.java @@ -192,7 +192,7 @@ public final void setCurrentGroup(Class currentGroup) { } public final void setCurrentValidatedValue(V currentValue) { - propertyPath.setLeafNodeValue( currentValue ); + propertyPath.setLeafNodeValueIfRequired( currentValue ); this.currentValue = currentValue; } diff --git a/engine/src/main/java/org/hibernate/validator/internal/engine/path/PathImpl.java b/engine/src/main/java/org/hibernate/validator/internal/engine/path/PathImpl.java index 8915cd47b4..c27eb28c84 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/engine/path/PathImpl.java +++ b/engine/src/main/java/org/hibernate/validator/internal/engine/path/PathImpl.java @@ -222,13 +222,16 @@ public NodeImpl makeLeafNodeIterableAndSetMapKey(Object key) { return currentLeafNode; } - public NodeImpl setLeafNodeValue(Object value) { - requiresWriteableNodeList(); + public NodeImpl setLeafNodeValueIfRequired(Object value) { + // The value is only exposed for property and container element nodes + if ( currentLeafNode.getKind() == ElementKind.PROPERTY || currentLeafNode.getKind() == ElementKind.CONTAINER_ELEMENT ) { + requiresWriteableNodeList(); - currentLeafNode = NodeImpl.setPropertyValue( currentLeafNode, value ); + currentLeafNode = NodeImpl.setPropertyValue( currentLeafNode, value ); - nodeList.set( nodeList.size() - 1, currentLeafNode ); - hashCode = -1; + nodeList.set( nodeList.size() - 1, currentLeafNode ); + hashCode = -1; + } return currentLeafNode; }