The documentation that you copied says:

If true, separate .java files will be generated for each of the Java 
classes/enums/etc. generated for the *top-level messages*, services, and 
enumerations, and the wrapper Java class generated for this .proto file 
won't contain any nested classes/enums/etc`

Since nested messages aren't top-level, the generated code for nested 
messages will be located in it's top-level message file.

On Saturday, April 9, 2022 at 4:49:51 AM UTC-7 tuk wrote:

> Cross-posting from stackoverflow 
> <https://stackoverflow.com/questions/71801138/proto3-why-setting-java-multiple-files-true-not-creating-separate-java-classe>
>
> I have a proto definition with nested classes
> syntax = "proto3"; 
> option java_package = "com.spot.proto.v1.config"; 
> package v1config; 
>  
> message ClusterConfig { 
>   enum LogLevel { 
>       UNKNOWN_TYPE = 0; DEBUG = 1; INFO = 2; WARN = 3; ERROR = 4; FATAL = 
> 5; 
>  } 
>   message Network { 
>      string ip = 1; 
>      int32 port = 2; 
>   } 
>   message Constants { 
>        message SlackNotifier { 
>              message Channel { 
>                 string name = 1; 
>              } 
>            string auth_token = 1; 
>             map<string, Channel> channels = 2; 
>             bool is_enabled = 3; 
>    } 
>    message Kafka { 
>          string broker_list = 1; 
>    } 
>    Kafka kafka = 2; 
>  } 
>   message Support { 
>      Network network = 1; 
>  } 
>  Support support = 1; 
>  ... 
>  }
>
> When I generate the java classes with option java_multiple_files = false; it 
> creates a single java class, ClusterConfigOuterClass.java with all the 
> Java classes/enums/etc generated for the top-level messages, services, and 
> enumerations nested inside it. This is expected.
>
> But if I use option java_multiple_files = true; then I am seeing it is 
> generating two additional classes 
> ClusterConfig.java, ClusterConfigOrBuilder.java along with 
> ClusterConfigOuterClass.java. ClusteConfig.java now contains the nested 
> classes.
>
> The documentation states like below:-
>
> java_multiple_files (file option): If false, only a single .java file 
> will be generated for this .proto file, and all the Java classes/enums/etc. 
> generated for the top-level messages, services, and enumerations will be 
> nested inside of an outer class (see java_outer_classname). If true, 
> separate .java files will be generated for each of the Java 
> classes/enums/etc. generated for the top-level messages, services, and 
> enumerations, and the wrapper Java class generated for this .proto file 
> won't contain any nested classes/enums/etc. This is a Boolean option that 
> defaults to false. If not generating Java code, this option has no effect.
>
> So should not each nested message like Kafka, Network, etc go into a 
> separate java file?
>
>    - Java 11
>    - Protoc - 3.10
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/f718532f-50fa-4409-876e-11df27a19c51n%40googlegroups.com.

Reply via email to