public static function patch($source)
 {
     $patched = false;
     self::$replacement = [];
     $parser = new PhpParser\Parser(new PhpParser\Lexer(['usedAttributes' => ['startTokenPos', 'endTokenPos']]));
     $traverser = new PhpParser\NodeTraverser();
     $traverser->addVisitor(new CIPHPUnitTestFunctionPatcherNodeVisitor());
     $ast_orig = $parser->parse($source);
     $traverser->traverse($ast_orig);
     if (self::$replacement !== []) {
         $patched = true;
         $new_source = self::generateNewSource($source);
     } else {
         $new_source = $source;
     }
     return [$new_source, $patched];
 }