diff --git a/lib/src/json_schema/json_schema.dart b/lib/src/json_schema/json_schema.dart index 2a828844..aa9aca1a 100644 --- a/lib/src/json_schema/json_schema.dart +++ b/lib/src/json_schema/json_schema.dart @@ -595,7 +595,7 @@ class JsonSchema { // Follow JSON Pointer path of fragments if provided. if (pathUri.fragment.isNotEmpty) { final List fragments = Uri.parse(pathUri.fragment).pathSegments; - final foundSchema = _recursiveResolvePath(pathUri, fragments.slice(0), baseSchema, refsEncountered); + final foundSchema = _recursiveResolvePath(pathUri, fragments, baseSchema, refsEncountered); _memomizedResults[currentPair] = foundSchema; return foundSchema; } @@ -607,7 +607,7 @@ class JsonSchema { // When there are 2 possible path to be resolve, traverse both paths. JsonSchema _resolveParallelPaths( Uri pathUri, // The path being resolved - ListSlice fragments, // A slice of fragments being traversed. + List fragments, // A list of fragments being traversed. JsonSchema schemaWithRef, // A JsonSchema containing a ref. Set refsEncountered, // Refs encountered from schemaWithRef ) { @@ -666,8 +666,7 @@ class JsonSchema { return null; } - JsonSchema _recursiveResolvePath( - Uri pathUri, ListSlice fragments, JsonSchema baseSchema, Set refsEncountered, + JsonSchema _recursiveResolvePath(Uri pathUri, List fragments, JsonSchema baseSchema, Set refsEncountered, {bool skipInitialRefCheck = false}) { // Set of properties that are ignored when set beside a `$ref`. final Set consts = Set.of([r'$id', r'$schema', r'$comment']); @@ -762,7 +761,7 @@ class JsonSchema { // If currentSchema has additional values, then traverse both paths to find the result. if (i + 1 < fragments.length && currentSchema._schemaMap.keys.toSet().difference(consts).length > 1) { return _resolveParallelPaths( - pathUri, fragments.slice(i, fragments.length - 1), currentSchema, refsEncountered); + pathUri, fragments.sublist(i + 1, fragments.length), currentSchema, refsEncountered); } currentSchema = _resolveSchemaWithAccounting(pathUri, currentSchema, refsEncountered);