theseer / phpdox

Documentation generator for PHP Code using standard technology (SRC, DOCBLOCK, XML and XSLT)
http://phpdox.de
Other
601 stars 121 forks source link

Error: addMethod() on null - PHP 7.4 | PHPDox 0.12.0-dev #420

Open Tanktiger opened 1 year ago

Tanktiger commented 1 year ago

Hello,

i want to generate the documentation for my phalcon PHP code. It worked for several years but now i'm getting this error:

phpDox 0.12.0-dev - Copyright (C) 2010 - 2022 by Arne Blankerts and Contributors

[26.09.2022 - 13:00:00] Using config file 'tests/build/phpdox.xml'
[26.09.2022 - 13:00:00] Registered collector backend 'parser'
[26.09.2022 - 13:00:00] Registered enricher 'build'
[26.09.2022 - 13:00:00] Registered enricher 'git'
[26.09.2022 - 13:00:00] Registered enricher 'checkstyle'
[26.09.2022 - 13:00:00] Registered enricher 'phpcs'
[26.09.2022 - 13:00:00] Registered enricher 'pmd'
[26.09.2022 - 13:00:00] Registered enricher 'phpunit'
[26.09.2022 - 13:00:00] Registered enricher 'phploc'
[26.09.2022 - 13:00:00] Registered output engine 'xml'
[26.09.2022 - 13:00:00] Registered output engine 'html'
[26.09.2022 - 13:00:00] Starting to process project 'platform'
[26.09.2022 - 13:00:00] Starting collector
[26.09.2022 - 13:00:00] Scanning directory '.' for files to process

..................................................      [50]
..................................................      [100]
..................................................      [150]
................................................f.      [200]
...............................................f.f      [250]
..................................................      [300]
..................................................      [350]
..................................................      [400]
..................................................      [450]
..................................................      [500]
..................................................      [550]
.........................f........................      [600]
..................................................      [650]
..................................................      [700]
..................................................      [750]
..................................................      [800]
..................................................      [850]
..................................................      [900]
............

Oups... phpDox encountered a problem and has terminated!

It most likely means you've found a bug, so please file a report for this
and paste the following details and the stacktrace (if given) along:

PHP Version: 7.4.28 (Linux)
PHPDox Version: 0.12.0-dev
Exception: Error (Code: 0)
Location: /var/www/vendor/theseer/phpdox/src/collector/backend/parser/UnitCollectingVisitor.php (Line 228)

Call to a member function addMethod() on null

#0 /var/www/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): TheSeer\phpDox\Collector\Backend\UnitCollectingVisitor->enterNode()
#1 /var/www/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#2 /var/www/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#3 /var/www/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray()
#4 /var/www/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode()
#5 /var/www/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray()
#6 /var/www/vendor/theseer/phpdox/src/collector/backend/parser/PHPParser.php(44): PhpParser\NodeTraverser->traverse()
#7 /var/www/vendor/theseer/phpdox/src/collector/Collector.php(101): TheSeer\phpDox\Collector\Backend\PHPParser->parse()
#8 /var/www/vendor/theseer/phpdox/src/collector/Collector.php(71): TheSeer\phpDox\Collector\Collector->processFile()
#9 /var/www/vendor/theseer/phpdox/src/Application.php(88): TheSeer\phpDox\Collector\Collector->run()
#10 /var/www/vendor/theseer/phpdox/src/CLI.php(120): TheSeer\phpDox\Application->runCollector()
#11 /var/www/vendor/bin/phpdox(21) : eval()'d code(67): TheSeer\phpDox\CLI->run()
#12 /var/www/vendor/bin/phpdox(21): eval()

My XML:

<?xml version="1.0" encoding="utf-8" ?>
<phpdox xmlns="http://xml.phpdox.net/config">
    <project name="platform" source="./" workdir="${basedir}/xml">
        <collector backend="parser">
            <exclude mask="**/vendor/**"/>
        </collector>
        <generator output="${basedir}">
            <build engine="html" output="html"/>
            <enrich base="${basedir}/logs">
                <source type="phploc">
                    <file name="phploc.xml"/>
                </source>

                <source type="phpcs">
                    <file name="checkstyle.xml"/>
                </source>

                <source type="pmd">
                    <file name="pmd.xml"/>
                </source>
            </enrich>
        </generator>
    </project>
</phpdox>

PHPDox is installed via composer and xdebug is installed in version 2.9.8

Does someone know how to fix this issue?

theseer commented 1 year ago

I'll try to have a look tomorrow when travelling.

Tanktiger commented 1 year ago

Hello, the problem was in a PHPUnit Test class. I don't know why this error is occuring but i removed the class and everything worked.

Here is the class and the problem occurs in the function testDatabaseUtilsGetInstalledMigrationVersion2

<?php

namespace Library\Tests;

use Codeception\PHPUnit\TestCase;
use Library\Helper\Converter;
use Library\Helper\DatabaseUtils;
use Library\Helper\Generator;
use Library\Helper\Hashing;
use Library\Helper\Validator;
use Library\Helper\VersionHelper;

class HelperTest extends TestCase
{
    public function testConverter()
    {
        $this->assertEquals("Test", Converter::firstLetterUp("test"));
        $this->assertEquals("Test", Converter::firstLetterUp("TEST"));
        $this->assertEquals("Test3", Converter::firstLetterUp("TesT3"));

        $this->assertEquals(61445, Converter::hexStringToInteger("F005"));
        $this->assertEquals(61444, Converter::hexStringToInteger("F004"));
        $this->assertEquals(0, Converter::hexStringToInteger("00"));
        $this->assertEquals(4294967295, Converter::hexStringToInteger("FFFFFFFF"));

    }

    public function testGenerator()
    {
        $generated = Generator::uniqueString(4);
        $generated2 = Generator::uniqueString(32);
        $this->assertFalse($generated === $generated2);
        $this->assertEquals(4, strlen($generated));
        $this->assertEquals(32, strlen($generated2));
    }

    public function testHashing()
    {
        $hashedPW = Hashing::hashPassword("test");

        $this->assertTrue(Hashing::verifyPassword("test", $hashedPW));
        $this->assertfalse(Hashing::verifyPassword("test2", $hashedPW));
        $this->assertfalse(Hashing::verifyPassword($hashedPW, "test"));
    }

    public function testValidator()
    {
        $this->assertTrue(Validator::isValidMAC("00:00:00:00:00:00"));
        $this->assertTrue(Validator::isValidMAC("AF:FE:AF:FE:AF:FE"));
        $this->assertTrue(Validator::isValidMAC("01:23:45:67:89:0A"));
        $this->assertTrue(Validator::isValidMAC("BC:CD:DE:EF:FF:11"));
        $this->assertTrue(Validator::isValidMAC("01:23:45:67:89:0a"));
        $this->assertTrue(Validator::isValidMAC("bc:cd:de:ef:ff:11"));
        $this->assertfalse(Validator::isValidMAC("00:00:00:00:00:g0"));
        $this->assertfalse(Validator::isValidMAC("00:00:00:00:00:G0"));
        $this->assertfalse(Validator::isValidMAC("00:00:00:00:00G0"));
        $this->assertfalse(Validator::isValidMAC("00:00:00:00:0010"));
        $this->assertfalse(Validator::isValidMAC("00:00:00:00:00: 0"));
        $this->assertfalse(Validator::isValidMAC("000000000000"));
    }

    /**
     * @runInSeparateProcess
     * @preserveGlobalState disabled
     */
    public function testDatabaseUtilsGetInstalledMigrationVersion2()
    {
        $mock = \Mockery::mock("overload:\\App\\Core\\Models\\SharedMigration");
        $mock->shouldReceive('tableExists')
            ->once()
            ->andReturn(false);

        $migratedVersion = DatabaseUtils::getInstalledMigrationVersion();
        $this->assertNull($migratedVersion);
    }

    /**
     * @runInSeparateProcess
     * @preserveGlobalState disabled
     */
    public function testDatabaseUtilsGetInstalledMigrationVersion3()
    {
        $mock = \Mockery::mock("overload:\\App\\Core\\Models\\SharedMigration");
        $mock->shouldReceive('tableExists')
            ->once()
            ->andReturn(true);
        $mock->shouldReceive('findFirst')
            ->once()
            ->andReturn(false);

        $migratedVersion = DatabaseUtils::getInstalledMigrationVersion();
        $this->assertNull($migratedVersion);
    }
}
theseer commented 1 year ago

Thanks for the heads up :)