Go\Instrument\Transformer\WeavingTransformer::processFunctions PHP Method

processFunctions() private method

Performs weaving of functions in the current namespace
private processFunctions ( array $advisors, StreamMetaData $metadata, Go\ParserReflection\ReflectionFileNamespace $namespace ) : boolean
$advisors array List of advisors
$metadata StreamMetaData Source stream information
$namespace Go\ParserReflection\ReflectionFileNamespace Current namespace for file
return boolean True if functions were processed, false otherwise
    private function processFunctions(array $advisors, StreamMetaData $metadata, $namespace)
    {
        static $cacheDirSuffix = '/_functions/';
        $wasProcessedFunctions = false;
        $functionAdvices = $this->adviceMatcher->getAdvicesForFunctions($namespace, $advisors);
        $cacheDir = $this->cachePathManager->getCacheDir();
        if (!empty($functionAdvices) && $cacheDir) {
            $cacheDir = $cacheDir . $cacheDirSuffix;
            $fileName = str_replace('\\', '/', $namespace->getName()) . '.php';
            $functionFileName = $cacheDir . $fileName;
            if (!file_exists($functionFileName) || !$this->container->isFresh(filemtime($functionFileName))) {
                $dirname = dirname($functionFileName);
                if (!file_exists($dirname)) {
                    mkdir($dirname, $this->options['cacheFileMode'], true);
                }
                $source = new FunctionProxy($namespace, $functionAdvices);
                file_put_contents($functionFileName, $source, LOCK_EX);
                // For cache files we don't want executable bits by default
                chmod($functionFileName, $this->options['cacheFileMode'] & ~0111);
            }
            $content = 'include_once AOP_CACHE_DIR . ' . var_export($cacheDirSuffix . $fileName, true) . ';' . PHP_EOL;
            $metadata->source .= $content;
            $wasProcessedFunctions = true;
        }
        return $wasProcessedFunctions;
    }