Add 'primitive' option to 'Java' code generator
-----------------------------------------------

                 Key: THRIFT-872
                 URL: https://issues.apache.org/jira/browse/THRIFT-872
             Project: Thrift
          Issue Type: New Feature
          Components: Java - Compiler
    Affects Versions: 0.4
            Reporter: Dave Engberg
             Fix For: 0.5


I'm attaching a patch that modifies 0.4.0 to add a new 'primitive' compiler 
option to the Java code generator that will produce a style of code that 
reduces library dependencies for generated struct and service interfaces.  This 
will make the generated code easier to use in some contexts and more compatible 
with generated code from prior Thrift releases.

The 'primitive' option changes generated code in the following ways:
*  Removes dependencies on:  BitSet, ByteBuffer, and the third-party 
org.slf4j.Logger*
*  The 'isset' vector is implemented via boolean[] instead of BitSet
*  The 'Iface' interface for service 'Foo' is moved from an inner class to 
top-level FooIface.jar (and replaced with dummy Foo.Iface which just extends 
FooIface)
*  'binary' fields from the IDL are changed from ByteBuffer back to byte[]

The patch also includes runtime support library changes:
*  Added writeBinary(byte[]) and readBytes() methods to TProtocol to read and 
write byte[] primitives
*  Added TBaseHelper.toString(byte[],StringBuilder)

To use (e.g.):  thrift -r --gen java:beans,primitive Foo.thrift

Rationale:
1)  The generated structures and services are more compatible with previous 
versions (in particular, v 0.2.0), requiring fewer code changes for existing 
projects upgrading to 0.4.0.
2)  The generated POJO structures and service interfaces have a much lower 
external dependency "footprint", so may be used more easily in platforms and 
libraries.  For example, the structure *.java files and the FooIface.java files 
may be used within restricted environments like GWT, which don't support 
java.nio.ByteBuffer, java.util.BitSet, or org.slf4j.*  
(http://www.projectpossibility.org/projects/word_prediction/gwt-linux-1.4.60/doc/html/jre.html)
3)  In some contexts, 'binary' data fields may require fewer lines of code to 
juggle and serialize slightly faster.


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