Skip to content
This repository has been archived by the owner on May 16, 2018. It is now read-only.

Zend_CodeGenerator_Php_Docblock _docCommentize() produces unnecessary blank lines #95

Closed
teejayhh opened this issue May 7, 2013 · 4 comments
Assignees
Milestone

Comments

@teejayhh
Copy link

teejayhh commented May 7, 2013

Steps to reporduce;

  1. create new class and save it
class Fb_Cms_Content_BlockObject extends Fb_Core_BaseObject
{
    /**
     * @var int
     */
    public $id = null;
    /**
     * @var string
     */
    public $componentId = null;
    /**
     * @var string
     */
    public $title = null;
    /**
     * @var int
     */
    public $status = null;
    /**
     * @var string
     */
    public $createdAt = null;
    /**
     * @var string
     */
    public $updatedAt = null;
}
  1. now use the the gode generator to read in this class
$reflectionClass = new Zend_Reflection_Class($classNameToGenerate);
$phpClass = Zend_CodeGenerator_Php_Class::fromReflection($reflectionClass);
  1. now generate the code
$phpClass->generate();

Result: Each property will gain an additional line which should not happen.

    /**
     * @var string
     * 
     */
    pub.....

you can resolve this issue with the following

    /**
     * _docCommentize()
     *
     * @param string $content
     * @return string
     */
    protected function _docCommentize($content)
    {
        $indent = $this->getIndentation();
        $output = $indent . '/**' . self::LINE_FEED;
        $content = wordwrap($content, 80, self::LINE_FEED);
        $lines = explode(self::LINE_FEED, $content);
        foreach ($lines as $line) {
            // change this
            $output .= $indent . ' *';
            if ($line) { 
                $output .= " $line";
            }
             $output .= self::LINE_FEED;
            // to this
            if ($line) { 
                $output .= $indent . ' *';
                $output .= " $line";
                $output .= self::LINE_FEED;
            }
        }
        $output .= $indent . ' */' . self::LINE_FEED;
        return $output;
    }
@froschdesign
Copy link
Member

@teejayhh
Your fix removes all empty lines!

From this:

/**
 * File header here
 *
 * @author Ralph Schindler <ralph.schindler@zend.com>
 *
 */

to this:

/**
 * File header here
 * @author Ralph Schindler <ralph.schindler@zend.com>
 */

👎

@froschdesign
Copy link
Member

Maybe:

protected function _docCommentize($content)
{
    $indent  = $this->getIndentation();
    $output  = $indent . '/**' . self::LINE_FEED;
    $content = wordwrap($content, 80, self::LINE_FEED);
    $lines   = explode(self::LINE_FEED, $content);

    foreach ($lines as $line) {
        $output .= $indent . ' *';
        if ($line) {
            $output .= " $line";
        }
        $output .= self::LINE_FEED;
    }

    // New!
    $output = rtrim($output, ' *' . self::LINE_FEED) . self::LINE_FEED;

    $output .= $indent . ' */' . self::LINE_FEED;
    return $output;
}

@froschdesign
Copy link
Member

@weierophinney
Is this a BC break? What do you think?

At the moment it works as documented: Reference Guide

@weierophinney
Copy link
Member

IF it were to retain blank lines between content in the docblocks, I'd be okay with it. Since it currently removes all blank lines in docblocks, we cannot keep it, as that removes the intent of short vs. long description, etc.

@ghost ghost assigned froschdesign Jan 2, 2014
xopherdeep pushed a commit to xopherdeep/Zend-Framework-v1 that referenced this issue Jul 3, 2014
anupdugar added a commit to anupdugar/zf1 that referenced this issue Feb 6, 2015
Zend Framework 1.12.10

- [1: isLast not working as expected in Zend&zendframework#95;Service&zendframework#95;Amazon&zendframework#95;SimpleDb&zendframework#95;Page](zendframework#1)
- [8: Zend&zendframework#95;Loader&zendframework#95;ClassMapAutoloader is not auto included when using Zend&zendframework#95;Loader&zendframework#95;AutoloaderFactory::factory](zendframework#8)
- [15: Zend&zendframework#95;Db&zendframework#95;Table&zendframework#95;Abstract::delete does not delete from dependent table](zendframework#15)
- [32: Zend&zendframework#95;Soap&zendframework#95;Client has no 'exceptions' flag.](zendframework#32)
- [62: Zend&zendframework#95;Validate&zendframework#95;EmailAddress-&gt;&zendframework#95;validateMXRecords() fails on Umlaut-Domains](zendframework#62)
- [187: Zend&zendframework#95;Rest&zendframework#95;Server does not properly handle optional parameters when anonymous (arg1, etc) parameters are passed in](zendframework#187)
- [322: Zend&zendframework#95;Validate&zendframework#95;Hostname: disallowed Unicode code point](zendframework#322)
- [324: SlideShare API change some tag names.](zendframework#324)
- [345: CallbackHandler throws warning if WeakRef-extension not installed](zendframework#345)
- [377: Zend&zendframework#95;Console&zendframework#95;Getopt: Missing required parameter consumes next option as its parameter value](zendframework#377)
- [400: PHPUnit contraints: use real class names to help classmap generators](zendframework#400)
- [426: Use relative filenames for &zendframework#95;validIdns for direct include in Zend&zendframework#95;Validate&zendframework#95;Hostname](zendframework#426)
- [434: Corrected type of property &zendframework#95;currentRoute](zendframework#434)
- [440: Zend&zendframework#95;Controller&zendframework#95;Dispatcher&zendframework#95;Abstract::&zendframework#95;formatName() inconsistent with Action name handling](zendframework#440)
- [441: Loosen regex to allow nested function calls in SQL](zendframework#441)
- [444: Update Zend&zendframework#95;Validate&zendframework#95;Hostname TLDs list to 2014102301 version](zendframework#444)
- [446: fix typo unkown -&gt; unknown](zendframework#446)
- [448: fix travis ci build for php 5.2](zendframework#448)
- [449: Zend&zendframework#95;Date doesn't create correct date when seconds are missing from 8601 format](zendframework#449)
- [452: &quot;fluent&quot;, not &quot;fluid&quot;](zendframework#452)
- [453: Zend&zendframework#95;Cache&zendframework#95;Backend&zendframework#95;Memcached looks at &quot;bytes&quot;, but Couchbase 1.x returns &quot;mem&zendframework#95;used&quot;](zendframework#453)
- [456: Documentation of Zend&zendframework#95;Feed&zendframework#95;Pubsubhubbub&zendframework#95;Model&zendframework#95;ModelAbstract](zendframework#456)
- [458: Fixed bug in quoteInto with $count parameter and question sign in $value](zendframework#458)
- [461: CDATA section for category elements in RSS feed](zendframework#461)
- [465: Zend&zendframework#95;Currency creates invalid cache ids for values with fractions](zendframework#465)
- [467: debug&zendframework#95;backtrace() called twice when only once needed ](zendframework#467)
- [468: Zend&zendframework#95;Validate&zendframework#95;Hostname improvements](zendframework#468)
- [469: &zendframework#91;Zend&zendframework#95;Validate&zendframework#92; Testcase for zendframework#322](zendframework#469)
- [471: End of life for PHPUnit installation using pear](zendframework#471)
- [475: Zend Json Server Exception is missing the method name](zendframework#475)
- [478: Create .gitattributes to mirror archive { } in composer.json](zendframework#478)
- [480: Virtual machine doesn't install initial packages](zendframework#480)
- [483: Update copyright to 2015](zendframework#483)
- [484: Adds content headers on POST request in Zend&zendframework#95;Controller&zendframework#95;Request&zendframework#95;HTTP](zendframework#484)
- [487: Allow overriding cache id and tag validation in Zend&zendframework#95;Cache](zendframework#487)
- [488: Zend&zendframework#95;Dojo&zendframework#95;View&zendframework#95;Helper&zendframework#95;Dojo&zendframework#95;Container setCdnVersion error...](zendframework#488)
- [490: Added more specific return documentation for Zend&zendframework#95;Navigation Pages](zendframework#490)

# gpg verification failed.

Conflicts:
	README.md
	library/Zend/Application/Resource/Frontcontroller.php
	library/Zend/Application/Resource/Translate.php
	library/Zend/Barcode/Object/ObjectAbstract.php
	library/Zend/Controller/Router/Rewrite.php
	library/Zend/Db/Select.php
	library/Zend/EventManager/Filter/FilterIterator.php
	library/Zend/EventManager/GlobalEventManager.php
	library/Zend/Gdata/HttpAdapterStreamingProxy.php
	library/Zend/Mime/Part.php
	library/Zend/Mobile/Push/Message/Abstract.php
	library/Zend/Rest/Server.php
	library/Zend/Service/Rackspace/Files.php
	library/Zend/Service/SlideShare.php
	library/Zend/Test/PHPUnit/ControllerTestCase.php
	library/Zend/Validate/Hostname.php
	library/Zend/Version.php
dsikkema-magento pushed a commit to magento/zf1 that referenced this issue Sep 30, 2015
Zend Framework 1.12.15

- [582: Incorrect application of timeout option in curl http client adapter](zendframework#582)
- [587: &quot;Invalid header line detected&quot; error if HTTP header value is empty](zendframework#587)
- [591: ZF2015-06 fix broke the ZF on PHP 5.2](zendframework#591)
- [593: fix typo in PHPDoc @throws annotation of Zend&zendframework#95;Registry::get()](zendframework#593)
- [595: Removing annoying warning.](zendframework#595)
- [597: Fix setting of CURLOPT&zendframework#95;TIMEOUT](zendframework#597)

Conflicts:
	README.md
	library/Zend/Db/Select.php
	library/Zend/Service/DeveloperGarden/BaseUserService.php
	library/Zend/Service/DeveloperGarden/Client/ClientAbstract.php
	library/Zend/Service/DeveloperGarden/Client/Exception.php
	library/Zend/Service/DeveloperGarden/Client/Soap.php
	library/Zend/Service/DeveloperGarden/ConferenceCall.php
	library/Zend/Service/DeveloperGarden/ConferenceCall/ConferenceSchedule.php
	library/Zend/Service/DeveloperGarden/ConferenceCall/Exception.php
	library/Zend/Service/DeveloperGarden/ConferenceCall/Participant.php
	library/Zend/Service/DeveloperGarden/ConferenceCall/ParticipantDetail.php
	library/Zend/Service/DeveloperGarden/ConferenceCall/ParticipantStatus.php
	library/Zend/Service/DeveloperGarden/Credential.php
	library/Zend/Service/DeveloperGarden/Exception.php
	library/Zend/Service/DeveloperGarden/IpLocation.php
	library/Zend/Service/DeveloperGarden/IpLocation/IpAddress.php
	library/Zend/Service/DeveloperGarden/LocalSearch.php
	library/Zend/Service/DeveloperGarden/LocalSearch/Exception.php
	library/Zend/Service/DeveloperGarden/LocalSearch/SearchParameters.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/AddConferenceTemplateParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/CommitConferenceRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/CreateConferenceRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/CreateConferenceTemplateRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetConferenceListRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetConferenceStatusRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetConferenceTemplateListRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetConferenceTemplateParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetConferenceTemplateRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetParticipantStatusRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/GetRunningConferenceRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/NewParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/RemoveConferenceRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/RemoveConferenceTemplateParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/RemoveConferenceTemplateRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/RemoveParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/UpdateConferenceRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/UpdateConferenceTemplateParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/UpdateConferenceTemplateRequest.php
	library/Zend/Service/DeveloperGarden/Request/ConferenceCall/UpdateParticipantRequest.php
	library/Zend/Service/DeveloperGarden/Request/Exception.php
	library/Zend/Service/DeveloperGarden/Request/IpLocation/LocateIPRequest.php
	library/Zend/Service/DeveloperGarden/Request/LocalSearch/LocalSearchRequest.php
	library/Zend/Service/DeveloperGarden/Request/SendSms/SendFlashSMS.php
	library/Zend/Service/DeveloperGarden/Request/SendSms/SendSMS.php
	library/Zend/Service/DeveloperGarden/Request/SendSms/SendSmsAbstract.php
	library/Zend/Service/DeveloperGarden/Request/SmsValidation/GetValidatedNumbers.php
	library/Zend/Service/DeveloperGarden/Request/SmsValidation/Invalidate.php
	library/Zend/Service/DeveloperGarden/Request/SmsValidation/SendValidationKeyword.php
	library/Zend/Service/DeveloperGarden/Request/SmsValidation/Validate.php
	library/Zend/Service/DeveloperGarden/Request/VoiceButler/CallStatus.php
	library/Zend/Service/DeveloperGarden/Request/VoiceButler/NewCall.php
	library/Zend/Service/DeveloperGarden/Request/VoiceButler/NewCallSequenced.php
	library/Zend/Service/DeveloperGarden/Request/VoiceButler/TearDownCall.php
	library/Zend/Service/DeveloperGarden/Request/VoiceButler/VoiceButlerAbstract.php
	library/Zend/Service/DeveloperGarden/Response/BaseType.php
	library/Zend/Service/DeveloperGarden/Response/BaseUserService/ChangeQuotaPoolResponse.php
	library/Zend/Service/DeveloperGarden/Response/BaseUserService/GetAccountBalanceResponse.php
	library/Zend/Service/DeveloperGarden/Response/BaseUserService/GetQuotaInformationResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/AddConferenceTemplateParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/AddConferenceTemplateParticipantResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/CCSResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/CommitConferenceResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/ConferenceCallAbstract.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/CreateConferenceResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/CreateConferenceResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/CreateConferenceTemplateResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/CreateConferenceTemplateResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceListResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceListResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceStatusResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceStatusResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateListResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateListResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateParticipantResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetConferenceTemplateResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetParticipantStatusResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetParticipantStatusResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetRunningConferenceResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/GetRunningConferenceResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/NewParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/NewParticipantResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/RemoveConferenceResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/RemoveConferenceTemplateParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/RemoveConferenceTemplateResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/RemoveParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/UpdateConferenceResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/UpdateConferenceTemplateParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/UpdateConferenceTemplateResponse.php
	library/Zend/Service/DeveloperGarden/Response/ConferenceCall/UpdateParticipantResponse.php
	library/Zend/Service/DeveloperGarden/Response/Exception.php
	library/Zend/Service/DeveloperGarden/Response/IpLocation/CityType.php
	library/Zend/Service/DeveloperGarden/Response/IpLocation/GeoCoordinatesType.php
	library/Zend/Service/DeveloperGarden/Response/IpLocation/IPAddressLocationType.php
	library/Zend/Service/DeveloperGarden/Response/IpLocation/LocateIPResponse.php
	library/Zend/Service/DeveloperGarden/Response/IpLocation/LocateIPResponseType.php
	library/Zend/Service/DeveloperGarden/Response/IpLocation/RegionType.php
	library/Zend/Service/DeveloperGarden/Response/LocalSearch/LocalSearchResponse.php
	library/Zend/Service/DeveloperGarden/Response/LocalSearch/LocalSearchResponseType.php
	library/Zend/Service/DeveloperGarden/Response/ResponseAbstract.php
	library/Zend/Service/DeveloperGarden/Response/SecurityTokenServer/Exception.php
	library/Zend/Service/DeveloperGarden/Response/SecurityTokenServer/GetTokensResponse.php
	library/Zend/Service/DeveloperGarden/Response/SecurityTokenServer/SecurityTokenResponse.php
	library/Zend/Service/DeveloperGarden/Response/SendSms/SendFlashSMSResponse.php
	library/Zend/Service/DeveloperGarden/Response/SendSms/SendSMSResponse.php
	library/Zend/Service/DeveloperGarden/Response/SendSms/SendSmsAbstract.php
	library/Zend/Service/DeveloperGarden/Response/SmsValidation/GetValidatedNumbersResponse.php
	library/Zend/Service/DeveloperGarden/Response/SmsValidation/InvalidateResponse.php
	library/Zend/Service/DeveloperGarden/Response/SmsValidation/SendValidationKeywordResponse.php
	library/Zend/Service/DeveloperGarden/Response/SmsValidation/ValidateResponse.php
	library/Zend/Service/DeveloperGarden/Response/VoiceButler/CallStatus2Response.php
	library/Zend/Service/DeveloperGarden/Response/VoiceButler/CallStatusResponse.php
	library/Zend/Service/DeveloperGarden/Response/VoiceButler/NewCallResponse.php
	library/Zend/Service/DeveloperGarden/Response/VoiceButler/NewCallSequencedResponse.php
	library/Zend/Service/DeveloperGarden/Response/VoiceButler/TearDownCallResponse.php
	library/Zend/Service/DeveloperGarden/Response/VoiceButler/VoiceButlerAbstract.php
	library/Zend/Service/DeveloperGarden/SecurityTokenServer.php
	library/Zend/Service/DeveloperGarden/SecurityTokenServer/Cache.php
	library/Zend/Service/DeveloperGarden/SendSms.php
	library/Zend/Service/DeveloperGarden/SmsValidation.php
	library/Zend/Service/DeveloperGarden/VoiceCall.php
	library/Zend/Service/Technorati.php
	library/Zend/Service/Technorati/Author.php
	library/Zend/Service/Technorati/BlogInfoResult.php
	library/Zend/Service/Technorati/CosmosResult.php
	library/Zend/Service/Technorati/CosmosResultSet.php
	library/Zend/Service/Technorati/DailyCountsResult.php
	library/Zend/Service/Technorati/DailyCountsResultSet.php
	library/Zend/Service/Technorati/GetInfoResult.php
	library/Zend/Service/Technorati/Result.php
	library/Zend/Service/Technorati/ResultSet.php
	library/Zend/Service/Technorati/SearchResult.php
	library/Zend/Service/Technorati/SearchResultSet.php
	library/Zend/Service/Technorati/TagResult.php
	library/Zend/Service/Technorati/TagResultSet.php
	library/Zend/Service/Technorati/TagsResult.php
	library/Zend/Service/Technorati/TagsResultSet.php
	library/Zend/Service/Technorati/Utils.php
	library/Zend/Service/Technorati/Weblog.php
	library/Zend/Xml/Security.php
	tests/Zend/Xml/TestAsset/Security.php
dsikkema-magento pushed a commit to magento/zf1 that referenced this issue Sep 30, 2015
Zend Framework 1.12.16

- [504: Cannot parse huge documents in Zend&zendframework#95;Dom&zendframework#95;Query](zendframework#504)
- [599: Wrong return type in DocBlock of Zend&zendframework#95;Console&zendframework#95;Getopt::getOption()](zendframework#599)
- [600: Undefined property $config in Zend&zendframework#95;Http&zendframework#95;Client&zendframework#95;Adapter&zendframework#95;Curl](zendframework#600)
- [604: add doccomments to Zend&zendframework#95;Log covering its magic methods](zendframework#604)
- [606: Fix typo in Zend&zendframework#95;Cache-Backends documentation.](zendframework#606)
- [610: Add &szlig; (Latin small letter sharp s) to .de domain IDNA check](zendframework#610)
- [612: Zend&zendframework#95;Validate&zendframework#95;Hostname does not validate NTP hostnames starting with '0' character](zendframework#612)

SECURITY UPDATES
----------------

- **ZF2015-07**: A number of components, including `Zend_Cloud`, `Zend_Search_Lucene`, and `Zend_Service_WindowsAzure` were creating directories with a liberal umask that could lead to local arbitrary code execution and/or local privilege escalation. This release contains a patch that ensures the directories are created using permissions of 0775 and files using 0664 (essentially umask 0002).

- **ZF2015-08**: ZF2014-06 uncovered an issue in the sqlsrv adapter provided by the framework whereby null bytes were not filtered correctly when generating SQL. A reporter discovered the same vulnerability is present in our PDO implementation when used with pdo_dblib, and could potentially be applied to other PDO adapters.  This release contains a patch to properly escape null bytes used in SQL queries across all PDO adapters shipped with the framework.

Conflicts:
	README.md
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants