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

FatalThrowableError when calling 'getDocComment()' if value is null #437

Open
Jarown opened this issue Apr 7, 2017 · 1 comment
Open

Comments

@Jarown
Copy link

Jarown commented Apr 7, 2017

Q A
Bundle version 1.3.1
Symfony version 3.2.6
PHP version 7.1.3
nikic/php-parser 2.1.1

Expected behavior

translation:extract does not result in fatal errors

Actual behavior

translation:extract throws this fatal in the described situation below
[Symfony\Component\Debug\Exception\FatalThrowableError] Call to a member function getDocComment() on null

Steps to reproduce

Run for attached files:
bin/console translation:extract en --bundle=MyBundle

Steps to reproduce

It looks like the items in the 'choices'-array cause this error. The attached patch fixes the fatal by checking first if value is an object, before calling the function.

FatalThrowableError.patch.txt
StatisticsTrackingHelper.php.txt
MyApiFormType.php.txt

@Beny13
Copy link

Beny13 commented Apr 12, 2017

I get the same exception but with another case.

The choices_as_values allows me to use the symfony3 format for the array (http://symfony.com/doc/2.8/reference/forms/types/choice.html#choices-as-values).

Another point to add is that I don't want JMS to parse these choices, since I don't have any "key" and only values, but @Ignore seems to have no effect at all.

Q A
Bundle version 1.3.1
Symfony version 2.8.18
PHP version 5.6

Here's the code:

$builder
    ->add('activated', ChoiceType::class, array(
        'choices' => array(
            '1',
            '0',
            'inherited'
        ),
        'choices_as_values' => true,
    ))
;

Here's the stack:

PHP Fatal error:  Call to a member function getDocComment() on null in /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/File/FormExtractor.php on line 350
PHP Stack trace:
PHP   1. {main}() /opt/rgsupv-dashboard/app/console:0
PHP   2. Symfony\Component\Console\Application->run() /opt/rgsupv-dashboard/app/console:22
PHP   3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /opt/rgsupv-dashboard/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:122
PHP   4. Symfony\Component\Console\Application->doRun() /opt/rgsupv-dashboard/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:92
PHP   5. Symfony\Component\Console\Application->doRunCommand() /opt/rgsupv-dashboard/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:191
PHP   6. Symfony\Component\Console\Command\Command->run() /opt/rgsupv-dashboard/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:872
PHP   7. JMS\TranslationBundle\Command\ExtractTranslationCommand->execute() /opt/rgsupv-dashboard/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:267
PHP   8. JMS\TranslationBundle\Translation\Updater->process() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Command/ExtractTranslationCommand.php:131
PHP   9. JMS\TranslationBundle\Translation\Updater->setConfig() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Updater.php:143
PHP  10. JMS\TranslationBundle\Translation\ExtractorManager->extract() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Updater.php:253
PHP  11. JMS\TranslationBundle\Translation\Extractor\FileExtractor->extract() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/ExtractorManager.php:137
PHP  12. call_user_func_array:{/opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/FileExtractor.php:235}() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/FileExtractor.php:235
PHP  13. JMS\TranslationBundle\Translation\Extractor\File\FormExtractor->visitPhpFile() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/FileExtractor.php:235
PHP  14. PhpParser\NodeTraverser->traverse() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/File/FormExtractor.php:440
PHP  15. PhpParser\NodeTraverser->traverseArray() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:64
PHP  16. PhpParser\NodeTraverser->traverseNode() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  17. PhpParser\NodeTraverser->traverseArray() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  18. PhpParser\NodeTraverser->traverseNode() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  19. PhpParser\NodeTraverser->traverseArray() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  20. PhpParser\NodeTraverser->traverseNode() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  21. PhpParser\NodeTraverser->traverseArray() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  22. PhpParser\NodeTraverser->traverseNode() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  23. PhpParser\NodeTraverser->traverseArray() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:84
PHP  24. PhpParser\NodeTraverser->traverseNode() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
PHP  25. JMS\TranslationBundle\Translation\Extractor\File\FormExtractor->enterNode() /opt/rgsupv-dashboard/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:88
PHP  26. JMS\TranslationBundle\Translation\Extractor\File\FormExtractor->parseChoiceNode() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/File/FormExtractor.php:141
PHP  27. JMS\TranslationBundle\Translation\Extractor\File\FormExtractor->parseItem() /opt/rgsupv-dashboard/vendor/jms/translation-bundle/JMS/TranslationBundle/Translation/Extractor/File/FormExtractor.php:248


  [Symfony\Component\Debug\Exception\FatalErrorException]
  Error: Call to a member function getDocComment() on null

EDIT: After applying, @Jarown 's modifications, it worked like a charm. Could you make a PR with them? (For the time being I'll just use a personal fork)

evertharmeling pushed a commit to evertharmeling/JMSTranslationBundle that referenced this issue Aug 3, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants