[ 
https://issues.apache.org/jira/browse/THRIFT-3709?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15183172#comment-15183172
 ] 

Tom Davis commented on THRIFT-3709:
-----------------------------------

Thanks, [~jensg]!

> Comment syntax can produce broken code
> --------------------------------------
>
>                 Key: THRIFT-3709
>                 URL: https://issues.apache.org/jira/browse/THRIFT-3709
>             Project: Thrift
>          Issue Type: Bug
>          Components: Compiler (General)
>    Affects Versions: 1.0
>            Reporter: Tom Davis
>            Assignee: Jens Geyer
>             Fix For: 0.10.0
>
>         Attachments: THRIFT-3709-Comment-syntax-can-produce-broken-code.patch
>
>
> Somewhere between 85650612e15c79c79e470553d3779d18f755150c and 
> 6ec6860801bdc87236e636add071c4faa2ac7e4b the handling of comments was 
> changed. This change appears to have removed support for the syntax {{/** 
> Comment **/}}. In particular, the comment-end token can't have more than one 
> asterisk.
> However, it is possible to "trick" the parser by having multiple comments:
> {code}
> struct Thing {
>   /** This is a comment */
>   1: required string id,
>   /** This is also a comment **/
>   2: required string typeId,
>   /** Yet another comment! */
>   3: required i32 endTimestamp
> }
> {code}
> In this case, the IDL file will parse correctly but will produce broken code, 
> at least in the case of the Java compiler. Here is the relevant part of the 
> generated file, first from the older commit (functional), then from master 
> (broken).
> *older commit (expected result)*
> {code:java}
>   /**
>    * This is a comment
>    */
>   public String id; // required
>   /**
>    * This is also a comment *
>    */
>   public String typeId; // required
>   /**
>    * Yet another comment!
>    */
>   public int endTimestamp; // required
> {code}
> *current master (broken)*
> {code:java}
>   /**
>    * This is a comment
>    */
>   public String id; // required
>   /**
>    * This is also a comment **/
>    * 2: required string typeId,
>    * /** Yet another comment!
>    */
>   public int endTimestamp; // required
> {code}
> The line {{* 2: required string typeId,}} lives outside the comment so the 
> code fails to compile.
> For my part, I'll modify my IDL files to only use the single-asterisk syntax. 
> However, I would expect generation to fail similarly to how it does with a 
> single {{/** Comment **/}} (with a maybe-not-totally-helpful "unexpected 
> token" error)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to