public function getAssets($resource, $previousContext = null)
 {
     if (!is_string($resource)) {
         throw new InvalidResourceException('Expected string filename as resource', $resource);
     } elseif (!is_file($resource) || !is_readable($resource) || !stream_is_local($resource)) {
         throw new InvalidResourceException('File not found, not readable or not local', $resource);
     }
     if ($previousContext !== null) {
         if (!is_array($previousContext) || !isset($previousContext['modified_at']) || !is_int($previousContext['modified_at']) || !isset($previousContext['assets']) || !is_array($previousContext['assets'])) {
             throw new InvalidContextException('Expected context with int `modified_at` and array `assets`', $previousContext);
         }
         if ($previousContext['modified_at'] === filemtime($resource)) {
             $assetResult = new AssetResult();
             $assetResult->setAssets($previousContext['assets']);
             $assetResult->setContext($previousContext);
             return $assetResult;
         }
     }
     try {
         $tokens = $this->twig->tokenize(file_get_contents($resource), $resource);
         $node = $this->twig->parse($tokens);
     } catch (SyntaxException $exception) {
         $this->errorHandler->processException(new ResourceParsingException('Got twig syntax exception while parsing', 0, $exception));
         return new AssetResult();
     }
     $assets = $this->loadNode($node, $resource);
     $assetResult = new AssetResult();
     $assetResult->setAssets($assets);
     $assetResult->setContext(array('modified_at' => filemtime($resource), 'assets' => $assets));
     return $assetResult;
 }
 public function getAssets($resource, $previousContext = null)
 {
     $internalResources = array();
     foreach ($this->collectionResource->getInternalResources($resource) as $internalResource) {
         $internalResourceKey = json_encode($internalResource);
         $internalResources[$internalResourceKey] = $internalResource;
     }
     $result = new AssetResult();
     $context = array();
     $internalContexts = $this->getResourceContexts(array_keys($internalResources), $previousContext);
     foreach ($internalResources as $internalResourceKey => $internalResource) {
         $internalContext = isset($internalContexts[$internalResourceKey]) ? $internalContexts[$internalResourceKey] : null;
         $internalResult = $this->internalResourceProvider->getAssets($internalResource, $internalContext);
         $result->addAssets($internalResult->getAssets());
         $context[$internalResourceKey] = $internalResult->getContext();
     }
     $result->setContext($context);
     return $result;
 }