diff --git a/src/spec/Reference.php b/src/spec/Reference.php index 1eef2eca..5b5b88c7 100644 --- a/src/spec/Reference.php +++ b/src/spec/Reference.php @@ -29,6 +29,8 @@ */ class Reference implements SpecObjectInterface, DocumentContextInterface { + static $file_cache = []; + private $_to; private $_ref; private $_jsonReference; @@ -206,7 +208,7 @@ public function resolve(ReferenceContext $context = null) // resolve in external document $file = $context->resolveRelativeUri($jsonReference->getDocumentUri()); // TODO could be a good idea to cache loaded files in current context to avoid loading the same files over and over again - $referencedDocument = $this->fetchReferencedFile($file); + $referencedDocument = $this->getReferencedFile($file); $referencedData = $jsonReference->getJsonPointer()->evaluate($referencedDocument); if ($referencedData === null) { @@ -258,6 +260,18 @@ public function resolve(ReferenceContext $context = null) } } + /** + * @throws UnresolvableReferenceException + */ + private function getReferencedFile($uri) + { + if(!isset(self::$file_cache[$uri])) { + self::$file_cache[$uri] = $this->fetchReferencedFile($uri); + } + + return self::$file_cache[$uri]; + } + /** * @throws UnresolvableReferenceException */