Beispiel #1
0
require_once 'signature.inc.php';
require_once 'xtrace.inc.php';
require_once 'scanner.inc.php';
require_once 'transform.inc.php';
require_once 'reflector.inc.php';
if (realpath($_SERVER['SCRIPT_FILENAME']) === __FILE__) {
    error_reporting(E_ALL | E_STRICT);
    $trace_filename = "dumpfile.xt";
    $file_to_weave = $argv[1];
    if (!is_file($file_to_weave)) {
        throw new Exception("File ({$file_to_weave}) isn't readable");
    }
    // read trace
    $reflector = new StaticReflector();
    $sigs = new Signatures($reflector);
    $trace = new xtrace_TraceReader(new SplFileObject($trace_filename));
    $collector = new xtrace_TraceSignatureLogger($sigs, $reflector);
    $trace->process(new xtrace_FunctionTracer($collector, $reflector));
    // transform file
    $scanner = new ScannerMultiplexer();
    $parameters_scanner = $scanner->appendScanner(new FunctionParametersScanner());
    $function_body_scanner = $scanner->appendScanner(new FunctionBodyScanner());
    $modifiers_scanner = $scanner->appendScanner(new ModifiersScanner());
    $class_scanner = $scanner->appendScanner(new ClassScanner());
    $editor = new TracerDocBlockEditor($sigs, $class_scanner, $function_body_scanner);
    $transformer = $scanner->appendScanner(new DocCommentEditorTransformer($function_body_scanner, $modifiers_scanner, $parameters_scanner, $editor));
    $tokenizer = new TokenStreamParser();
    $token_stream = $tokenizer->scan(file_get_contents($file_to_weave));
    $token_stream->iterate($scanner);
    if (isset($argv[2])) {
        file_put_contents($argv[2], $transformer->getOutput());
Beispiel #2
0
 function test_can_collate_classes()
 {
     chdir($this->sandbox());
     shell_exec(escapeshellcmd($this->bindir() . '/trace.sh') . " " . escapeshellarg($this->sandbox() . '/main.php'));
     $reflector = new StaticReflector();
     $sigs = new Signatures($reflector);
     $trace = new xtrace_TraceReader(new SplFileObject($this->sandbox() . '/dumpfile.xt'));
     $collector = new xtrace_TraceSignatureLogger($sigs, $reflector);
     $trace->process(new xtrace_FunctionTracer($collector));
     $this->assertEqual('Foo', $sigs->get('do_stuff')->getArgumentById(0)->getType());
 }