php-code-generator icon indicating copy to clipboard operation
php-code-generator copied to clipboard

Unable to create method typed array with docblock Object[]

Open 3ehu opened this issue 5 years ago • 2 comments

This line:

https://github.com/gossi/php-code-generator/blob/d67b8f9d775710e9401fc1a9306c7b7797860a65/src/model/parts/TypeDocblockGeneratorPart.php#L52

Overwriting @return tag if you define method type.

This causes that I'm unable to generate method

/**

  • @return Bar[] */ function Foo(): array

3ehu avatar Mar 21 '19 12:03 3ehu

Can you give a code example?

gossi avatar Mar 21 '19 20:03 gossi

Case 1:

        $method = PhpMethod::create('MyMethod');
        $method->setType('Bar[]');

//        $method->getDocblock()->appendTag(ReturnTag::create("Bar[]"));

        $class = PhpClass::create("Bar")
            ->setMethod($method);

        $generator = new CodeGenerator([
            'generateReturnTypeHints' =>  true
        ]);
        print_r($generator->generate($class));

Result

	/**
	 * @return Bar[]
	 */
	public function MyMethod(): Bar[] {

Case 2:

        $method = PhpMethod::create('MyMethod');
//        $method->setType('array');

        $method->getDocblock()->appendTag(ReturnTag::create("Bar[]"));

        $class = PhpClass::create("Bar")
            ->setMethod($method);

        $generator = new CodeGenerator([
            'generateReturnTypeHints' =>  true
        ]);
        print_r($generator->generate($class));

Result:

	/**
	 * @return Bar[]
	 */
	public function MyMethod() {

Case 3

        $method = PhpMethod::create('MyMethod');
        $method->setType('array');

        $method->getDocblock()->appendTag(ReturnTag::create("Bar[]"));

        $class = PhpClass::create("Bar")
            ->setMethod($method);

        $generator = new CodeGenerator([
            'generateReturnTypeHints' =>  true
        ]);
        print_r($generator->generate($class));

Result:

	/**
	 * @return array
	 */
	public function MyMethod(): array {

Expected Result ( Comment lines 51-53 in TypeDocblockGeneratorPart.php)

	/**
	 * @return Bar[]
	 */
	public function MyMethod(): array {

3ehu avatar Mar 22 '19 13:03 3ehu