Avro
  1. Avro
  2. AVRO-648

Use a template library for the SpecificCompiler

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.5.0
    • Component/s: java
    • Labels:
      None
    • Hadoop Flags:
      Reviewed

      Description

      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.)

      1. AVRO-648.patch
        40 kB
        Doug Cutting
      2. AVRO-648.patch.txt
        37 kB
        Philip Zeyliger

        Activity

        Philip Zeyliger created issue -
        Philip Zeyliger made changes -
        Field Original Value New Value
        Attachment AVRO-648.patch.txt [ 12453582 ]
        Doug Cutting made changes -
        Fix Version/s 1.5.0 [ 12315282 ]
        Doug Cutting made changes -
        Attachment AVRO-648.patch [ 12458289 ]
        Doug Cutting made changes -
        Status Open [ 1 ] Patch Available [ 10002 ]
        Doug Cutting made changes -
        Status Patch Available [ 10002 ] Resolved [ 5 ]
        Hadoop Flags [Reviewed]
        Resolution Fixed [ 1 ]
        Doug Cutting made changes -
        Status Resolved [ 5 ] Closed [ 6 ]

          People

          • Assignee:
            Philip Zeyliger
            Reporter:
            Philip Zeyliger
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development