Go\Instrument\Transformer\MagicConstantTransformer::transform PHP Method

transform() public method

This method may transform the supplied source and return a new replacement for it
public transform ( StreamMetaData $metadata ) : void | boolean
$metadata StreamMetaData Metadata for source
return void | boolean Return false if transformation should be stopped
    public function transform(StreamMetaData $metadata)
    {
        // Make the job only when we use cache directory
        if (!self::$rewriteToPath) {
            return;
        }
        $hasReflectionFilename = strpos($metadata->source, 'getFileName') !== false;
        $hasMagicConstants = strpos($metadata->source, '__DIR__') !== false || strpos($metadata->source, '__FILE__') !== false;
        if (!$hasMagicConstants && !$hasReflectionFilename) {
            return;
        }
        // Resolve magic constants
        if ($hasMagicConstants) {
            $this->replaceMagicConstants($metadata);
        }
        if ($hasReflectionFilename) {
            // need to make more reliable solution
            $metadata->source = preg_replace('/\\$([\\w\\$\\-\\>\\:\\(\\)]*?getFileName\\(\\))/S', '\\' . __CLASS__ . '::resolveFileName(\\$\\1)', $metadata->source);
        }
    }

Usage Example

 public function testTransformerWrapsReflectionFileName()
 {
     $this->metadata->source = '<?php $class = new ReflectionClass("stdClass"); echo $class->getFileName(); ?>';
     $this->transformer->transform($this->metadata);
     $this->assertStringEndsWith('::resolveFileName($class->getFileName()); ?>', $this->metadata->source);
 }