[ 
https://issues.apache.org/jira/browse/AVRO-648?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12905076#action_12905076
 ] 

Philip Zeyliger commented on AVRO-648:
--------------------------------------

I'll take a look at regenerating the patch with less whitespace later on.  As 
you can tell, I was working on it rather late, and excited that I got the tests 
to pass :)

Pluggability for a template directory is the natural next patch.  (Eventually, 
we'll need templating or pluggability for filenames, too, since the deep nested 
directory hierarchies are a Java thing: I have in mind as a use case a "doc" 
generator a la javadoc, though maybe javadoc is good enough.)

BTW, I've now posted the patch at 
https://review.cloudera.org/r/762/diff/#index_header , if you want to see it 
side-by-side.

-- Philip

> Use a template library for the SpecificCompiler
> -----------------------------------------------
>
>                 Key: AVRO-648
>                 URL: https://issues.apache.org/jira/browse/AVRO-648
>             Project: Avro
>          Issue Type: Improvement
>          Components: java
>            Reporter: Philip Zeyliger
>            Assignee: Philip Zeyliger
>         Attachments: AVRO-648.patch.txt
>
>
> This JIRA proposes uses a templating library instead of string concatenation 
> for the SpecificCompiler.
> We've had conversations on the list about customizing the generated code (by 
> adding getters and setters, adding utility classes for the arrays, adding 
> String-friendly (as opposed to Utf8) accessors, etc.), but we've been stymied 
> by the fact that the specific compiler is hard-coded to use one template, and 
> it's hard to experiment with.   Sam Pullara (at 
> http://github.com/spullara/avrocompiler) has done pretty much this: he 
> forked/subclassed a copy of SpecificCompiler that uses the Mustache language 
> to generate code.  He's also gone ahead and done some of the customizations.
> In the patch I'm about to post, I've replicated the existing code generation 
> using Velocity.  We already build Velocity for some of the IPC plugins, and 
> it's an Apache project.  The existing tests pass, plus I've added tests that 
> check that the generated code is character-for-character the same, in a 
> handful of cases.  This was actually quite painful, since I had to reproduce 
> some questionable indentation and trailing whitespace :).  That said, I'm 
> pleased with how easy it was to incorporate the templates.
> Eventually, I hope we support getters and setters, or perhaps support 
> multiple versions of templates.  (If someone wants to generate, say, C++ 
> code, the path is now a lot easier for that, as well.)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to