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


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