@@ -64,6 +64,9 @@ public class Schema implements Validator {
6464 * The validators sorted and indexed by evaluation path.
6565 */
6666 private List <KeywordValidator > validators = null ;
67+ private boolean unevaluatedPropertiesPresent = false ;
68+ private boolean unevaluatedItemsPresent = false ;
69+
6770 private boolean validatorsLoaded = false ;
6871 private boolean recursiveAnchor = false ;
6972 private TypeValidator typeValidator = null ;
@@ -660,6 +663,11 @@ private List<KeywordValidator> read(JsonNode schemaNode) {
660663 pname , nodeToUse , this );
661664 if (validator != null ) {
662665 validators .add (validator );
666+ if ("unevaluatedProperties" .equals (pname )) {
667+ this .unevaluatedPropertiesPresent = true ;
668+ } else if ("unevaluatedItems" .equals (pname )) {
669+ this .unevaluatedItemsPresent = true ;
670+ }
663671
664672 if ("$ref" .equals (pname )) {
665673 refValidator = validator ;
@@ -723,13 +731,13 @@ public void validate(ExecutionContext executionContext, JsonNode jsonNode, JsonN
723731// System.out.println("-----------------");
724732// }
725733 executionContext .evaluationSchema .addLast (this );
726- boolean unevaluatedPropertiesPresent = executionContext .isUnevaluatedPropertiesPresent () ;
727- boolean unevaluatedItemsPresent = executionContext .isUnevaluatedItemsPresent () ;
728- if (! unevaluatedPropertiesPresent ) {
729- executionContext .setUnevaluatedPropertiesPresent ( hasKeyword ( "unevaluatedProperties" )) ;
734+ boolean unevaluatedPropertiesPresent = executionContext .unevaluatedPropertiesPresent ;
735+ boolean unevaluatedItemsPresent = executionContext .unevaluatedItemsPresent ;
736+ if (this . unevaluatedPropertiesPresent ) {
737+ executionContext .unevaluatedPropertiesPresent = this . unevaluatedPropertiesPresent ;
730738 }
731- if (! unevaluatedItemsPresent ) {
732- executionContext .setUnevaluatedItemsPresent ( hasKeyword ( "unevaluatedItems" )) ;
739+ if (this . unevaluatedItemsPresent ) {
740+ executionContext .unevaluatedItemsPresent = this . unevaluatedItemsPresent ;
733741 }
734742 try {
735743 int currentErrors = executionContext .getErrors ().size ();
@@ -750,8 +758,8 @@ public void validate(ExecutionContext executionContext, JsonNode jsonNode, JsonN
750758 }
751759 } finally {
752760 executionContext .evaluationSchema .removeLast ();
753- executionContext .setUnevaluatedPropertiesPresent ( unevaluatedPropertiesPresent ) ;
754- executionContext .setUnevaluatedItemsPresent ( unevaluatedItemsPresent ) ;
761+ executionContext .unevaluatedPropertiesPresent = unevaluatedPropertiesPresent ;
762+ executionContext .unevaluatedItemsPresent = unevaluatedItemsPresent ;
755763 }
756764 }
757765
0 commit comments