|  | @@ -91,9 +91,11 @@ Micro version
 | 
	
		
			
				|  |  |  ============================
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  The runtime and generated code for MICRO_RUNTIME is smaller
 | 
	
		
			
				|  |  | -because it does not include support for the descriptor,
 | 
	
		
			
				|  |  | -reflection or extensions. Also, not currently supported
 | 
	
		
			
				|  |  | -are packed repeated elements nor testing of java_multiple_files.
 | 
	
		
			
				|  |  | +because it does not include support for the descriptor and
 | 
	
		
			
				|  |  | +reflection, and enums are generated as integer constants in
 | 
	
		
			
				|  |  | +the parent message or the file's outer class. Also, not
 | 
	
		
			
				|  |  | +currently supported are packed repeated elements or
 | 
	
		
			
				|  |  | +extensions.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  To create a jar file for the runtime and run tests invoke
 | 
	
		
			
				|  |  |  "mvn package -P micro" from the <protobuf-root>/java
 | 
	
	
		
			
				|  | @@ -128,26 +130,24 @@ opt                  -> speed or space
 | 
	
		
			
				|  |  |  java_use_vector      -> true or false
 | 
	
		
			
				|  |  |  java_package         -> <file-name>|<package-name>
 | 
	
		
			
				|  |  |  java_outer_classname -> <file-name>|<package-name>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -opt:
 | 
	
		
			
				|  |  | -  This changes the code generation to optimize for speed,
 | 
	
		
			
				|  |  | -  opt=speed, or space, opt=space. When opt=speed this
 | 
	
		
			
				|  |  | -  changes the code generation for strings so that multiple
 | 
	
		
			
				|  |  | -  conversions to Utf8 are eliminated. The default value
 | 
	
		
			
				|  |  | -  is opt=space.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -java_use_vector:
 | 
	
		
			
				|  |  | -  Is a boolean flag either java_use_vector=true or
 | 
	
		
			
				|  |  | -  java_use_vector=false. When java_use_vector=true the
 | 
	
		
			
				|  |  | -  code generated for repeated elements uses
 | 
	
		
			
				|  |  | -  java.util.Vector and when java_use_vector=false the
 | 
	
		
			
				|  |  | -  java.util.ArrayList<> is used. When java.util.Vector
 | 
	
		
			
				|  |  | -  is used the code must be compiled with Java 1.3 and
 | 
	
		
			
				|  |  | -  when ArrayList is used Java 1.5 or above must be used.
 | 
	
		
			
				|  |  | -  The using javac the source parameter may be used to
 | 
	
		
			
				|  |  | -  control the version of the source: "javac -source 1.3".
 | 
	
		
			
				|  |  | -  You can also change the <source> xml element for the
 | 
	
		
			
				|  |  | -  maven-compiler-plugin. Below is for 1.5 sources:
 | 
	
		
			
				|  |  | +java_multiple_files  -> true or false
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +opt={speed,space} (default: space)
 | 
	
		
			
				|  |  | +  This changes the code generation to optimize for speed or
 | 
	
		
			
				|  |  | +  space. When opt=speed this changes the code generation
 | 
	
		
			
				|  |  | +  for strings so that multiple conversions to Utf8 are
 | 
	
		
			
				|  |  | +  eliminated.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +java_use_vector={true,false} (default: false)
 | 
	
		
			
				|  |  | +  This specifies the collection class for repeated elements.
 | 
	
		
			
				|  |  | +  If false, repeated elements use java.util.ArrayList<> and
 | 
	
		
			
				|  |  | +  the code must be compiled with Java 1.5 or above. If true,
 | 
	
		
			
				|  |  | +  repeated elements use java.util.Vector and the code can
 | 
	
		
			
				|  |  | +  be compiled with Java 1.3 or above. The 'source'
 | 
	
		
			
				|  |  | +  parameter of 'javac' may be used to control the version
 | 
	
		
			
				|  |  | +  of the source: "javac -source 1.3". You can also change
 | 
	
		
			
				|  |  | +  the <source> xml element for the maven-compiler-plugin.
 | 
	
		
			
				|  |  | +  Below is for 1.5 sources:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <plugin>
 | 
	
		
			
				|  |  |          <artifactId>maven-compiler-plugin</artifactId>
 | 
	
	
		
			
				|  | @@ -157,11 +157,8 @@ java_use_vector:
 | 
	
		
			
				|  |  |          </configuration>
 | 
	
		
			
				|  |  |        </plugin>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  When compiling for 1.5 java_use_vector=false or not
 | 
	
		
			
				|  |  | -  present where the default value is false.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  And below would be for 1.3 sources note when changing
 | 
	
		
			
				|  |  | -  to 1.3 you must also set java_use_vector=true:
 | 
	
		
			
				|  |  | +  And below would be for 1.3 sources (note when changing
 | 
	
		
			
				|  |  | +  to 1.3 you must also set java_use_vector=true):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <plugin>
 | 
	
		
			
				|  |  |          <artifactId>maven-compiler-plugin</artifactId>
 | 
	
	
		
			
				|  | @@ -171,93 +168,241 @@ java_use_vector:
 | 
	
		
			
				|  |  |          </configuration>
 | 
	
		
			
				|  |  |        </plugin>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -java_package:
 | 
	
		
			
				|  |  | -  The allows setting/overriding the java_package option
 | 
	
		
			
				|  |  | -  and associates allows a package name for a file to
 | 
	
		
			
				|  |  | -  be specified on the command line. Overriding any
 | 
	
		
			
				|  |  | -  "option java_package xxxx" in the file. The default
 | 
	
		
			
				|  |  | -  if not present is to use the value from the package
 | 
	
		
			
				|  |  | -  statment or "option java_package xxxx" in the file.
 | 
	
		
			
				|  |  | +java_package=<file-name>|<package-name> (no default)
 | 
	
		
			
				|  |  | +  This allows overriding the 'java_package' option value
 | 
	
		
			
				|  |  | +  for the given file from the command line. Use multiple
 | 
	
		
			
				|  |  | +  java_package options to override the option for multiple
 | 
	
		
			
				|  |  | +  files. The final Java package for each file is the value
 | 
	
		
			
				|  |  | +  of this command line option if present, or the value of
 | 
	
		
			
				|  |  | +  the same option defined in the file if present, or the
 | 
	
		
			
				|  |  | +  proto package if present, or the default Java package.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +java_outer_classname=<file-name>|<outer-classname> (no default)
 | 
	
		
			
				|  |  | +  This allows overriding the 'java_outer_classname' option
 | 
	
		
			
				|  |  | +  for the given file from the command line. Use multiple
 | 
	
		
			
				|  |  | +  java_outer_classname options to override the option for
 | 
	
		
			
				|  |  | +  multiple files. The final Java outer class name for each
 | 
	
		
			
				|  |  | +  file is the value of this command line option if present,
 | 
	
		
			
				|  |  | +  or the value of the same option defined in the file if
 | 
	
		
			
				|  |  | +  present, or the file name converted to CamelCase. This
 | 
	
		
			
				|  |  | +  outer class will nest all classes and integer constants
 | 
	
		
			
				|  |  | +  generated from file-scope messages and enums.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +java_multiple_files={true,false} (no default)
 | 
	
		
			
				|  |  | +  This allows overriding the 'java_multiple_files' option
 | 
	
		
			
				|  |  | +  in all source files and their imported files from the
 | 
	
		
			
				|  |  | +  command line. The final value of this option for each
 | 
	
		
			
				|  |  | +  file is the value defined in this command line option, or
 | 
	
		
			
				|  |  | +  the value of the same option defined in the file if
 | 
	
		
			
				|  |  | +  present, or false. This specifies whether to generate
 | 
	
		
			
				|  |  | +  package-level classes for the file-scope messages in the
 | 
	
		
			
				|  |  | +  same Java package as the outer class (instead of nested
 | 
	
		
			
				|  |  | +  classes in the outer class). File-scope enum constants
 | 
	
		
			
				|  |  | +  are still generated as integer constants in the outer
 | 
	
		
			
				|  |  | +  class. This affects the fully qualified references in the
 | 
	
		
			
				|  |  | +  Java code. NOTE: because the command line option
 | 
	
		
			
				|  |  | +  overrides the value for all files and their imported
 | 
	
		
			
				|  |  | +  files, using this option inconsistently may result in
 | 
	
		
			
				|  |  | +  incorrect references to the imported messages and enum
 | 
	
		
			
				|  |  | +  constants.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +IMPORTANT: change of javamicro_out behavior:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +In previous versions, if the outer class name has not been
 | 
	
		
			
				|  |  | +given explicitly, javamicro_out would not infer the outer
 | 
	
		
			
				|  |  | +class name from the file name, and would skip the outer
 | 
	
		
			
				|  |  | +class generation. This makes the compilation succeed only
 | 
	
		
			
				|  |  | +if the source file contains a single message and no enums,
 | 
	
		
			
				|  |  | +and the generated class for that message is placed at the
 | 
	
		
			
				|  |  | +package level. To re-align with java_out, javamicro_out
 | 
	
		
			
				|  |  | +will now always generate the outer class, inferring its
 | 
	
		
			
				|  |  | +name from the file name if not given, as a container of the
 | 
	
		
			
				|  |  | +message classes and enum constants. To keep any existing
 | 
	
		
			
				|  |  | +single-message source file from causing the generation of
 | 
	
		
			
				|  |  | +an unwanted outer class, you can set the option
 | 
	
		
			
				|  |  | +java_multiple_files to true, either in the file or as a
 | 
	
		
			
				|  |  | +command line option.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -java_outer_classname:
 | 
	
		
			
				|  |  | -  This allows the setting/overriding of the outer
 | 
	
		
			
				|  |  | -  class name option and associates a class name
 | 
	
		
			
				|  |  | -  to a file. An outer class name is required and
 | 
	
		
			
				|  |  | -  must be specified if there are multiple messages
 | 
	
		
			
				|  |  | -  in a single proto file either in the proto source
 | 
	
		
			
				|  |  | -  file or on the command line. If not present the
 | 
	
		
			
				|  |  | -  no outer class name will be used.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Below are a series of examples for clarification of the
 | 
	
		
			
				|  |  | -various javamicro_out parameters using
 | 
	
		
			
				|  |  | -src/test/proto/simple-data.proto:
 | 
	
		
			
				|  |  | +various parameters and options. Assuming this file:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +src/proto/simple-data-protos.proto:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    package testprotobuf;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    message SimpleData {
 | 
	
		
			
				|  |  | +      optional fixed64 id = 1;
 | 
	
		
			
				|  |  | +      optional string description = 2;
 | 
	
		
			
				|  |  | +      optional bool ok = 3 [default = false];
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +and the compiled protoc in the current working directory,
 | 
	
		
			
				|  |  | +then a simple command line to compile this file would be:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -package testprotobuf;
 | 
	
		
			
				|  |  | +./protoc --javamicro_out=. src/proto/simple-data-protos.proto
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -message SimpleData {
 | 
	
		
			
				|  |  | -  optional fixed64 id = 1;
 | 
	
		
			
				|  |  | -  optional string description = 2;
 | 
	
		
			
				|  |  | -  optional bool ok = 3 [default = false];
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | +This will create testprotobuf/SimpleDataProtos.java, which
 | 
	
		
			
				|  |  | +has the following content (extremely simplified):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    package testprotobuf;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Assuming you've only compiled and not installed protoc and
 | 
	
		
			
				|  |  | -your current working directory java/, then a simple
 | 
	
		
			
				|  |  | -command line to compile simple-data would be:
 | 
	
		
			
				|  |  | +    public final class SimpleDataProtos {
 | 
	
		
			
				|  |  | +      public static final class SimpleData
 | 
	
		
			
				|  |  | +          extends MessageMicro {
 | 
	
		
			
				|  |  | +        ...
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -../src/protoc --javamicro_out=. src/test/proto/simple-data.proto
 | 
	
		
			
				|  |  | +The message SimpleData is compiled into the SimpleData
 | 
	
		
			
				|  |  | +class, nested in the file's outer class SimpleDataProtos,
 | 
	
		
			
				|  |  | +whose name is implicitly defined by the proto file name
 | 
	
		
			
				|  |  | +"simple-data-protos".
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -This will create testprotobuf/SimpleData.java
 | 
	
		
			
				|  |  | +The directory, aka Java package, testprotobuf is created
 | 
	
		
			
				|  |  | +because on line 1 of simple-data-protos.proto is
 | 
	
		
			
				|  |  | +"package testprotobuf;". If you wanted a different
 | 
	
		
			
				|  |  | +package name you could use the java_package option in the
 | 
	
		
			
				|  |  | +file:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -The directory testprotobuf is created because on line 1
 | 
	
		
			
				|  |  | -of simple-data.proto is "package testprotobuf;". If you
 | 
	
		
			
				|  |  | -wanted a different package name you could use the
 | 
	
		
			
				|  |  | -java_package option command line sub-parameter:
 | 
	
		
			
				|  |  | +    option java_package = "my_package";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -../src/protoc '--javamicro_out=java_package=src/test/proto/simple-data.proto|my_package:.' src/test/proto/simple-data.proto
 | 
	
		
			
				|  |  | +or in command line sub-parameter:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +./protoc '--javamicro_out=\
 | 
	
		
			
				|  |  | +java_package=src/proto/simple-data-protos.proto|my_package:\
 | 
	
		
			
				|  |  | +.' src/proto/simple-data-protos.proto
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Here you see the new java_package sub-parameter which
 | 
	
		
			
				|  |  |  itself needs two parameters the file name and the
 | 
	
		
			
				|  |  | -package name, these are separated by "|". Now you'll
 | 
	
		
			
				|  |  | -find my_package/SimpleData.java.
 | 
	
		
			
				|  |  | +package name, these are separated by "|". The value set
 | 
	
		
			
				|  |  | +in the command line overrides the value set in the file.
 | 
	
		
			
				|  |  | +Now you'll find SimpleDataProtos.java in the my_package/
 | 
	
		
			
				|  |  | +directory.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  If you wanted to also change the optimization for
 | 
	
		
			
				|  |  |  speed you'd add opt=speed with the comma seperator
 | 
	
		
			
				|  |  |  as follows:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -../src/protoc '--javamicro_out=opt=speed,java_package=src/test/proto/simple-data.proto|my_package:.' src/test/proto/simple-data.proto
 | 
	
		
			
				|  |  | +./protoc '--javamicro_out=\
 | 
	
		
			
				|  |  | +opt=speed,\
 | 
	
		
			
				|  |  | +java_package=src/proto/simple-data-protos.proto|my_package:
 | 
	
		
			
				|  |  | +.' src/proto/simple-data-protos.proto
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Finally if you also wanted an outer class name you'd
 | 
	
		
			
				|  |  | +If you also wanted a different outer class name you'd
 | 
	
		
			
				|  |  |  do the following:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -../src/protoc '--javamicro_out=opt=speed,java_package=src/test/proto/simple-data.proto|my_package,java_outer_classname=src/test/proto/simple-data.proto|OuterName:.' src/test/proto/simple-data.proto
 | 
	
		
			
				|  |  | +./protoc '--javamicro_out=\
 | 
	
		
			
				|  |  | +opt=speed,\
 | 
	
		
			
				|  |  | +java_package=src/proto/simple-data-protos.proto|my_package,\
 | 
	
		
			
				|  |  | +java_outer_classname=src/proto/simple-data-protos.proto|OuterName:\
 | 
	
		
			
				|  |  | +.' src/proto/simple-data-protos.proto
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Now you'll find my_package/OuterName.java and the
 | 
	
		
			
				|  |  | +message class SimpleData nested in it.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Now you'll find my_packate/OuterName.java.
 | 
	
		
			
				|  |  | +As mentioned java_package, java_outer_classname and
 | 
	
		
			
				|  |  | +java_multiple_files may also be specified in the file.
 | 
	
		
			
				|  |  | +In the example below we must define
 | 
	
		
			
				|  |  | +java_outer_classname because otherwise the outer class
 | 
	
		
			
				|  |  | +and one of the message classes will have the same name,
 | 
	
		
			
				|  |  | +which is forbidden to prevent name ambiguity:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -As mentioned java_package and java_outer_classname
 | 
	
		
			
				|  |  | -may also be specified in the file. In the example
 | 
	
		
			
				|  |  | -below we must define java_outer_classname because
 | 
	
		
			
				|  |  | -there are multiple messages in
 | 
	
		
			
				|  |  | -src/test/proto/two-messages.proto
 | 
	
		
			
				|  |  | +src/proto/sample-message.proto:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -package testmicroruntime;
 | 
	
		
			
				|  |  | +    package testmicroruntime;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -option java_package = "com.example";
 | 
	
		
			
				|  |  | -option java_outer_classname = "TestMessages";
 | 
	
		
			
				|  |  | +    option java_package = "com.example";
 | 
	
		
			
				|  |  | +    option java_outer_classname = "SampleMessageProtos";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -message TestMessage1 {
 | 
	
		
			
				|  |  | -  required int32 id = 1;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    enum MessageType {
 | 
	
		
			
				|  |  | +      SAMPLE = 1;
 | 
	
		
			
				|  |  | +      EXAMPLE = 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -message TestMessage2 {
 | 
	
		
			
				|  |  | -  required int32 id = 1;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    message SampleMessage {
 | 
	
		
			
				|  |  | +      required int32 id = 1;
 | 
	
		
			
				|  |  | +      required MessageType type = 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    message SampleMessageContainer {
 | 
	
		
			
				|  |  | +      required SampleMessage message = 1;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  This could be compiled using:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -../src/protoc --javamicro_out=. src/test/proto/two-message.proto
 | 
	
		
			
				|  |  | +./protoc --javamicro_out=. src/proto/sample-message.proto
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +and the output will be:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +com/example/SampleMessageProtos.java:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    package com.example;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public final class SampleMessageProtos {
 | 
	
		
			
				|  |  | +      public static final int SAMPLE = 1;
 | 
	
		
			
				|  |  | +      public static final int EXAMPLE = 2;
 | 
	
		
			
				|  |  | +      public static final class SampleMessage
 | 
	
		
			
				|  |  | +          extends MessageMicro {
 | 
	
		
			
				|  |  | +        ...
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      public static final class SampleMessageContainer
 | 
	
		
			
				|  |  | +          extends MessageMicro {
 | 
	
		
			
				|  |  | +        ...
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +As you can see the file-scope enum MessageType is
 | 
	
		
			
				|  |  | +disassembled into two integer constants in the outer class.
 | 
	
		
			
				|  |  | +In javamicro_out, all enums are disassembled and compiled
 | 
	
		
			
				|  |  | +into integer constants in the parent scope (the containing
 | 
	
		
			
				|  |  | +message's class or the file's (i.e. outer) class).
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -With the result will be com/example/TestMessages.java
 | 
	
		
			
				|  |  | +You may prefer the file-scope messages to be saved in
 | 
	
		
			
				|  |  | +separate files. You can do this by setting the option
 | 
	
		
			
				|  |  | +java_multiple_files to true, in either the file like this:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    option java_multiple_files = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +or the command line like this:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +./protoc --javamicro_out=\
 | 
	
		
			
				|  |  | +java_multiple_files=true:\
 | 
	
		
			
				|  |  | +. src/proto/sample-message.proto
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +The java_multiple_files option causes javamicro to use a
 | 
	
		
			
				|  |  | +separate file for each file-scope message, which resides
 | 
	
		
			
				|  |  | +directly in the Java package alongside the outer class:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +com/example/SampleMessageProtos.java:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    package com.example;
 | 
	
		
			
				|  |  | +    public final class SampleMessageProtos {
 | 
	
		
			
				|  |  | +      public static final int SAMPLE = 1;
 | 
	
		
			
				|  |  | +      public static final int EXAMPLE = 2;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +com/example/SampleMessage.java:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    package com.example;
 | 
	
		
			
				|  |  | +    public final class SampleMessage
 | 
	
		
			
				|  |  | +        extends MessageMicro {
 | 
	
		
			
				|  |  | +      ...
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +com/example/SampleMessageContainer.java:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    package com.example;
 | 
	
		
			
				|  |  | +    public final class SampleMessageContainer
 | 
	
		
			
				|  |  | +        extends MessageMicro {
 | 
	
		
			
				|  |  | +      ...
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +As you can see, the outer class now contains only the
 | 
	
		
			
				|  |  | +integer constants, generated from the file-scope enum
 | 
	
		
			
				|  |  | +"MessageType". Please note that message-scope enums are
 | 
	
		
			
				|  |  | +still generated as integer constants in the message class.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Nano version
 | 
	
	
		
			
				|  | @@ -303,9 +448,19 @@ empty default.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Nano Generator options
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -java_nano_generate_has:
 | 
	
		
			
				|  |  | +java_package           -> <file-name>|<package-name>
 | 
	
		
			
				|  |  | +java_outer_classname   -> <file-name>|<package-name>
 | 
	
		
			
				|  |  | +java_multiple_files    -> true or false
 | 
	
		
			
				|  |  | +java_nano_generate_has -> true or false
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +java_package:
 | 
	
		
			
				|  |  | +java_outer_classname:
 | 
	
		
			
				|  |  | +java_multiple_files:
 | 
	
		
			
				|  |  | +  Same as Micro version.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +java_nano_generate_has={true,false} (default: false)
 | 
	
		
			
				|  |  |    If true, generates a public boolean variable has<fieldname>
 | 
	
		
			
				|  |  | -  accompanying the optional or required field (not present for
 | 
	
		
			
				|  |  | +  accompanying each optional or required field (not present for
 | 
	
		
			
				|  |  |    repeated fields, groups or messages). It is set to false initially
 | 
	
		
			
				|  |  |    and upon clear(). If parseFrom(...) reads the field from the wire,
 | 
	
		
			
				|  |  |    it is set to true. This is a way for clients to inspect the "has"
 | 
	
	
		
			
				|  | @@ -324,7 +479,10 @@ To use nano protobufs:
 | 
	
		
			
				|  |  |    <protobuf-root>java/target/protobuf-java-2.3.0-nano.jar.
 | 
	
		
			
				|  |  |  - Invoke with --javanano_out, e.g.:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -../src/protoc '--javanano_out=java_package=src/test/proto/simple-data.proto|my_package,java_outer_classname=src/test/proto/simple-data.proto|OuterName:.' src/test/proto/simple-data.proto
 | 
	
		
			
				|  |  | +./protoc '--javanano_out=\
 | 
	
		
			
				|  |  | +java_package=src/proto/simple-data.proto|my_package,\
 | 
	
		
			
				|  |  | +java_outer_classname=src/proto/simple-data.proto|OuterName:\
 | 
	
		
			
				|  |  | +.' src/proto/simple-data.proto
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Contributing to nano:
 | 
	
		
			
				|  |  |  
 |