Exakat\Analyzer\Analyzer::getName PHP Method

getName() public static method

public static getName ( $classname )
    public static function getName($classname)
    {
        return str_replace(array('Exakat\\Analyzer\\', '\\'), array('', '/'), $classname);
    }

Usage Example

Example #1
0
    public function run()
    {
        $analyzer = $this->config->program;
        if (empty($analyzer)) {
            die('Provide the analyzer with the option -P X/Y. Aborting' . "\n");
        }
        $analyzerClass = Analyzer::getClass($analyzer);
        if ($analyzerClass === false) {
            $die = "'{$analyzer}' doesn't exist. Aborting\n";
            $r = Analyzer::getSuggestionClass($analyzer);
            if (count($r) > 0) {
                $die .= 'Did you mean : ' . implode(', ', str_replace('_', '/', $r)) . "\n";
            }
            die($die);
        }
        $analyzer = Analyzer::getName($analyzerClass);
        $query = <<<GREMLIN
g.V().hasLabel("Analysis").has("analyzer", "{$analyzer}").out().count();
GREMLIN;
        $vertices = $this->gremlin->query($query)->results;
        if (isset($vertices[0]->notCompatibleWithPhpVersion)) {
            die($this->config->program . " is not compatible with the running version of PHP. No result available.\n");
        }
        if (isset($vertices[0]->notCompatibleWithPhpConfiguration)) {
            die($this->config->program . " is not compatible with the compilation of the running version of PHP. No result available.\n");
        }
        $return = array();
        if ($this->config->style == 'BOOLEAN') {
            $queryTemplate = 'g.V().hasLabel("Analysis").has("analyzer", "' . $analyzer . '").out().count().is(gt(0))';
            $vertices = $this->gremlin->query($queryTemplate);
            $return[] = $vertices[0];
        } elseif ($this->config->style == 'COUNTED_ALL') {
            $queryTemplate = 'g.V().hasLabel("Analysis").has("analyzer", "' . $analyzer . '").out().count()';
            $vertices = $this->gremlin->query($queryTemplate)->results;
            $return[] = $vertices[0];
        } elseif ($this->config->style == 'ALL') {
            $linksDown = Token::linksAsList();
            $query = <<<GREMLIN
g.V().hasLabel("Analysis").has("analyzer", "{$analyzer}").out('ANALYZED')
.sideEffect{ line = it.get().value('line');
             fullcode = it.get().value('fullcode');
             file='None'; 
             theFunction = 'None'; 
             theClass='None'; 
             theNamespace='None'; 
             }
.sideEffect{ line = it.get().value('line'); }
.until( hasLabel('Project') ).repeat( 
    __.in({$linksDown})
      .sideEffect{ if (it.get().label() == 'Function') { theFunction = it.get().value('code')} }
      .sideEffect{ if (it.get().label() == 'Class') { theClass = it.get().value('fullcode')} }
      .sideEffect{ if (it.get().label() == 'File') { file = it.get().value('fullcode')} }
       )

.map{ ['line':line, 'file':file, 'fullcode':fullcode, 'function':theFunction, 'class':theClass, 'namespace':theNamespace]; }
GREMLIN;
            $vertices = $this->gremlin->query($query)->results;
            $return = array();
            foreach ($vertices as $k => $v) {
                $row = array($v->fullcode, $v->file, $v->line, $v->namespace, $v->class, $v->function);
                $return[] = $row;
            }
        } elseif ($this->config->style == 'DISTINCT') {
            $queryTemplate = 'g.V().hasLabel("Analysis").has("analyzer", "' . $analyzer . '").out("ANALYZED").values("code").unique()';
            $vertices = $this->gremlin->query($queryTemplate)->results;
            $return = array();
            foreach ($vertices as $k => $v) {
                $return[] = array($v);
            }
        } elseif ($this->config->style == 'COUNTED') {
            $queryTemplate = 'g.V().hasLabel("Analysis").has("analyzer", "' . $analyzer . '").out("ANALYZED").groupCount("m")by("code").cap("m")';
            $vertices = $this->gremlin->query($queryTemplate)->results;
            $return = array();
            foreach ($vertices[0] as $k => $v) {
                $return[$k] = $v;
            }
        }
        if ($this->config->json === true) {
            $text = json_encode($return);
        } elseif ($this->config->csv === true) {
            $text = array(array('Code', 'File', 'Namespace', 'Class', 'Function'));
            foreach ($return as $k => $v) {
                if (is_array($v)) {
                    $text[] = $v;
                } else {
                    $text[] = array($k, $v);
                }
            }
        } elseif ($this->config->html === true || $this->config->odt === true) {
            $text = '';
            foreach ($return as $k => $r) {
                if ($this->config->style == 'COUNTED') {
                    $text .= "+ {$k} => {$r}\n";
                } else {
                    $text .= "+ {$k}\n";
                    if (is_array($r)) {
                        $text .= '  + ' . implode("\n  + ", $r) . "\n";
                    } else {
                        $text .= "+ {$r}\n";
                    }
                }
            }
        } else {
            // count also for $this->config->text == 1
            $text = '';
            foreach ($return as $k => $v) {
                if ($this->config->style == 'COUNTED') {
                    $text .= "{$k} => {$v}\n";
                } else {
                    $text .= implode(', ', $v) . "\n";
                }
            }
        }
        if ($this->config->output) {
            echo $text;
        }
        switch (1) {
            case $this->config->json:
                $extension = 'json';
                break 1;
            case $this->config->odt:
                $extension = 'odt';
                break 1;
            case $this->config->html:
                $extension = 'html';
                break 1;
            case $this->config->csv:
                $extension = 'csv';
                break 1;
            case $this->config->text:
            default:
                $extension = 'txt';
                break 1;
        }
        if ($this->config->file != 'stdout') {
            $name = $this->config->file . '.' . $extension;
            if (file_exists($name)) {
                die("{$name} already exists. Aborting\n");
            }
            if ($this->config->format == 'ODT') {
                $name1 = FILE . '.html';
                file_put_contents($name1, $text);
                $name = FILE . '.' . $extension;
                shell_exec('pandoc -o ' . $name . ' ' . $name1);
                unlink($name1);
            } elseif ($this->config->format == 'CSV') {
                $csvFile = fopen($name, 'w');
                foreach ($text as $t) {
                    fputcsv($csvFile, $t);
                }
                fclose($csvFile);
            } else {
                file_put_contents($name, $text);
            }
        }
    }
Analyzer