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