Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PhpMetrics v2.0.0 Fatal error on analyze folder (catchable error) #238

Closed
clagiordano opened this issue Aug 18, 2016 · 10 comments
Closed

PhpMetrics v2.0.0 Fatal error on analyze folder (catchable error) #238

clagiordano opened this issue Aug 18, 2016 · 10 comments

Comments

@clagiordano
Copy link

My test environment:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux unstable (sid)
Release:    unstable
Codename:   sid
$ php --version
PHP 7.0.8-3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8-3, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
$ ../PhpMetrics/bin/phpmetrics --version
PhpMetrics v2.0.0 <http://phpmetrics.org>
by Jean-François Lépine <https://twitter.com/Halleck45>
$ ../PhpMetrics/bin/phpmetrics --report-html=build/metrics ./src
 27/34 [======================>-----]  79% 2 secsPHP Catchable fatal error:  Object of class PhpParser\Node\Expr\PropertyFetch could not be converted to string in PhpMetrics/src/functions.php on line 84
PHP Stack trace:
PHP   1. {main}() PhpMetrics/bin/phpmetrics:0
PHP   2. Hal\Application\Application->run() PhpMetrics/bin/phpmetrics:6
PHP   3. Hal\Application\Analyze->run() PhpMetrics/src/Hal/Application/Application.php:56
PHP   4. PhpParser\NodeTraverser->traverse() PhpMetrics/src/Hal/Application/Analyze.php:86
PHP   5. PhpParser\NodeTraverser->traverseArray() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:64
PHP   6. PhpParser\NodeTraverser->traverseNode() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP   7. PhpParser\NodeTraverser->traverseArray() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP   8. Hal\Metric\Class_\Structural\LcomVisitor->leaveNode() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:139
PHP   9. iterate_over_node() PhpMetrics/src/Hal/Metric/Class_/Structural/LcomVisitor.php:81
PHP  10. PhpParser\NodeTraverser->traverse() PhpMetrics/src/functions.php:39
PHP  11. PhpParser\NodeTraverser->traverseArray() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:64
PHP  12. PhpParser\NodeTraverser->traverseNode() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  13. PhpParser\NodeTraverser->traverseArray() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  14. PhpParser\NodeTraverser->traverseNode() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  15. PhpParser\NodeTraverser->traverseArray() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  16. PhpParser\NodeTraverser->traverseNode() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  17. MyVisitor->leaveNode() PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:101
PHP  18. Hal\Metric\Class_\Structural\LcomVisitor->Hal\Metric\Class_\Structural\{closure}() PhpMetrics/src/functions.php:26
PHP  19. getNameOfNode() PhpMetrics/src/Hal/Metric/Class_/Structural/LcomVisitor.php:56
@clagiordano
Copy link
Author

Object of class PhpParser\Node\Expr\PropertyFetch could not be converted to string

Environment

Backtrace

  • File: PhpMetrics/src/functions.php (line 84)
  • PhpMetrics/src/functions.php (line 84)
  • PhpMetrics/src/Hal/Metric/Class_/Structural/LcomVisitor.php (line 56)
  • PhpMetrics/src/functions.php (line 26)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 101)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 135)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 84)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 135)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 84)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 135)
  • PhpMetrics/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php (line 64)

@Halleck45
Copy link
Collaborator

Hi,

did your see the analyzed code in the output ? I cannot reproduce this bug without the parsed code. Can you provide it please ?

@clagiordano
Copy link
Author

clagiordano commented Aug 24, 2016

Sorry unfortunately this issue occurs on work proprietary code and I can't publish it but I try to reproduce to another open source code.

@Halleck45
Copy link
Collaborator

Ok I understand.

Maybe you can only provide the code of the analyzed class (you'll find it in the ./phpmetrics-error.log file), but with anonymized data ?

@clagiordano
Copy link
Author

clagiordano commented Nov 14, 2016

Hi,

this issue occurs in certain cases where I used the reflection class and variable properties like this:

$reflection = new \ReflectionObject($this);

        foreach ($reflection->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) {
            $return[$property->name] = $this->{$property->name};
        }

in this case on functions.php on line 84:

return (string) $node->name;

$node->name is an object (PhpParser\Node\Expr\PropertyFetch) and cannot be converted to string,
but adding this fix the problem does not occurs anymore:

if($node->name instanceof \PhpParser\Node\Expr\PropertyFetch) {
        return get_class($node->name);
    }

clagiordano added a commit to clagiordano/PhpMetrics that referenced this issue Nov 14, 2016
@clagiordano
Copy link
Author

I have submit a pull request to fix this bug #247

@pounard
Copy link

pounard commented Jan 17, 2017

I have experienced the exact same bug using 2.0.0-rc

@pounard
Copy link

pounard commented Jan 17, 2017

[pounard@guinevere] /var/www/gtd/vendor/makinacorpus/goat
 >  phpmetrics --exclude="compat,cache,.phan,Tests,benchmarks" --report-html=myreport.html .
  680/2408 [=======>--------------------]  28% 24 secsPHP Catchable fatal error:  Object of class PhpParser\Node\Expr\ArrayDimFetch could not be converted to string in /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/functions.php on line 84
PHP Stack trace:
PHP   1. {main}() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/bin/phpmetrics:0
PHP   2. Hal\Application\Application->run() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/bin/phpmetrics:20
PHP   3. Hal\Application\Analyze->run() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/Hal/Application/Application.php:56
PHP   4. PhpParser\NodeTraverser->traverse() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/Hal/Application/Analyze.php:86
PHP   5. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:64
PHP   6. PhpParser\NodeTraverser->traverseNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP   7. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP   8. Hal\Metric\Class_\Structural\SystemComplexityVisitor->leaveNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:139
PHP   9. iterate_over_node() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/Hal/Metric/Class_/Structural/SystemComplexityVisitor.php:64
PHP  10. PhpParser\NodeTraverser->traverse() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/functions.php:39
PHP  11. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:64
PHP  12. PhpParser\NodeTraverser->traverseNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  13. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  14. PhpParser\NodeTraverser->traverseNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  15. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  16. PhpParser\NodeTraverser->traverseNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  17. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  18. PhpParser\NodeTraverser->traverseNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  19. PhpParser\NodeTraverser->traverseArray() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  20. MyVisitor->leaveNode() /home/pounard/.composer/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:139
PHP  21. Hal\Metric\Class_\Structural\SystemComplexityVisitor->Hal\Metric\Class_\Structural\{closure}() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/functions.php:26
PHP  22. getNameOfNode() /home/pounard/.composer/vendor/phpmetrics/phpmetrics/src/Hal/Metric/Class_/Structural/SystemComplexityVisitor.php:62

@syrm
Copy link

syrm commented Apr 7, 2017

I have error about ArrayDimFetch on this repo and this commit :
blackprism/couchbase-odm@172e1f2

Halleck45 added a commit that referenced this issue Apr 10, 2017
@Halleck45
Copy link
Collaborator

This issue has been fixed8755576 by @clagiordano .

I've added unit tests with 1310058ed70c483fd67ccf5dfcc409251587f843

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants