Add Java (mutable) language feature handling to 2024 transform.
This handles all of the global java option changes, as well as the mutable/proto1 features. These can't be reasonably separated because they're all so interdependent.
PiperOrigin-RevId: 808602378
diff --git a/editions/codegen_tests/edition2023_java_dual_multiple_files.proto b/editions/codegen_tests/edition2023_java_dual_multiple_files.proto
new file mode 100644
index 0000000..9c78f9c
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_dual_multiple_files.proto
@@ -0,0 +1,36 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_multiple_files = true;
+option java_outer_classname = "Edition2023DualClassname";
+
+message Edition2023JavaDualMultipleFilesMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023JavaDualMultipleFilesEnum {
+ JAVA_DUAL_MULTIPLE_FILES_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023JavaDualMultipleFilesService {
+ // Edition2023JavaDualMultipleFilesService.Method
+ rpc Method(Edition2023JavaDualMultipleFilesMessage.NestedMessage)
+ returns (Edition2023JavaDualMultipleFilesMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_multiple_files.proto b/editions/codegen_tests/edition2023_java_multiple_files.proto
new file mode 100644
index 0000000..02c87b9
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_multiple_files.proto
@@ -0,0 +1,35 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_multiple_files = true;
+
+message Edition2023JavaMultipleFilesMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023JavaMultipleFilesEnum {
+ JAVA_MULTIPLE_FILES_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023JavaMultipleFilesService {
+ // Edition2023JavaMultipleFilesService.Method
+ rpc Method(Edition2023JavaMultipleFilesMessage.NestedMessage)
+ returns (Edition2023JavaMultipleFilesMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_mutable_multiple_files.proto b/editions/codegen_tests/edition2023_java_mutable_multiple_files.proto
new file mode 100644
index 0000000..9998d37
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_mutable_multiple_files.proto
@@ -0,0 +1,35 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_multiple_files = true;
+
+message Edition2023JavaMutableMultipleFilesMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023JavaMutableMultipleFilesEnum {
+ JAVA_MUTABLE_MULTIPLE_FILES_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023JavaMutableMultipleFilesService {
+ // Edition2023JavaMutableMultipleFilesService.Method
+ rpc Method(Edition2023JavaMutableMultipleFilesMessage.NestedMessage)
+ returns (Edition2023JavaMutableMultipleFilesMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_no_multiple_files.proto b/editions/codegen_tests/edition2023_java_no_multiple_files.proto
new file mode 100644
index 0000000..bfac4f0
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_no_multiple_files.proto
@@ -0,0 +1,35 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_outer_classname = "Edition2023NoMultipleFilesName";
+
+message Edition2023JavaNoMultipleFilesMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023JavaNoMultipleFilesEnum {
+ JAVA_NO_MULTIPLE_FILES_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023JavaNoMultipleFilesService {
+ // Edition2023JavaNoMultipleFilesService.Method
+ rpc Method(Edition2023JavaNoMultipleFilesMessage.NestedMessage)
+ returns (Edition2023JavaNoMultipleFilesMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_outer_classname.proto b/editions/codegen_tests/edition2023_java_outer_classname.proto
new file mode 100644
index 0000000..c7b7701
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_outer_classname.proto
@@ -0,0 +1,35 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_outer_classname = "Edition2023JavaName";
+
+message Edition2023OuterClassnameMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023OuterClassnameEnum {
+ JAVA_OUTER_CLASSNAME_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023OuterClassnameService {
+ // Edition2023OuterClassnameService.Method
+ rpc Method(Edition2023OuterClassnameMessage.NestedMessage)
+ returns (Edition2023OuterClassnameMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_outer_classname_future.proto b/editions/codegen_tests/edition2023_java_outer_classname_future.proto
new file mode 100644
index 0000000..ca44e13
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_outer_classname_future.proto
@@ -0,0 +1,38 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_multiple_files = true;
+
+// This is the default outer classname in edition 2024.
+option java_outer_classname = "Edition2023JavaOuterClassnameFutureProto";
+
+message Edition2023OuterClassnameFutureMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023OuterClassnameFutureEnum {
+ JAVA_OUTERCLASSNAME_FUTURE_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023OuterclassnameFutureService {
+ // Edition2023OuterClassnameFutureService.Method
+ rpc Method(Edition2023OuterClassnameFutureMessage.NestedMessage)
+ returns (Edition2023OuterClassnameFutureMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_proto1_multiple_files.proto b/editions/codegen_tests/edition2023_java_proto1_multiple_files.proto
new file mode 100644
index 0000000..9a1d792
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_proto1_multiple_files.proto
@@ -0,0 +1,36 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_multiple_files = true;
+option java_api_version = 1;
+
+message Edition2023JavaProto1MultipleFilesMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023JavaProto1MultipleFilesEnum {
+ JAVA_PROTO1_MULTIPLE_FILES_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023JavaProto1MultipleFilesService {
+ // Edition2023JavaProto1MultipleFilesService.Method
+ rpc Method(Edition2023JavaProto1MultipleFilesMessage.NestedMessage)
+ returns (Edition2023JavaProto1MultipleFilesMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_proto1_no_multiple_files.proto b/editions/codegen_tests/edition2023_java_proto1_no_multiple_files.proto
new file mode 100644
index 0000000..41ebfb5
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_proto1_no_multiple_files.proto
@@ -0,0 +1,36 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_package = "com.google.protobuf.editions.test.edition2023";
+option java_outer_classname = "Edition2023NoMultipleFilesName";
+option java_api_version = 1;
+
+message Edition2023JavaProto1NoMultipleFilesMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023JavaProto1NoMultipleFilesEnum {
+ JAVA_PROTO1_NO_MULTIPLE_FILES_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023JavaProto1NoMultipleFilesService {
+ // Edition2023JavaProto1NoMultipleFilesService.Method
+ rpc Method(Edition2023JavaProto1NoMultipleFilesMessage.NestedMessage)
+ returns (Edition2023JavaProto1NoMultipleFilesMessage) {}
+}
diff --git a/editions/codegen_tests/edition2023_java_proto1_outer_classname_future.proto b/editions/codegen_tests/edition2023_java_proto1_outer_classname_future.proto
new file mode 100644
index 0000000..f20675e
--- /dev/null
+++ b/editions/codegen_tests/edition2023_java_proto1_outer_classname_future.proto
@@ -0,0 +1,38 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2023 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+edition = "2023";
+
+package protobuf_editions_test.edition2023;
+
+option java_api_version = 1;
+option java_package = "com.google.protobuf.editions.test.edition2023";
+
+// This is what the default proto2 classname is.
+option java_outer_classname_proto1 = "Edition2023JavaProto1OuterclassnameFutureProto";
+
+message Edition2023Proto1OuterClassnameFutureMessage {
+ int32 foo = 1;
+
+ message NestedMessage {
+ int32 bar = 1;
+ }
+
+ enum NestedEnum {
+ NESTED_ENUM_UNKNOWN = 0;
+ }
+}
+
+enum Edition2023Proto1OuterClassnameFutureEnum {
+ JAVA_PROTO1_OUTERCLASSNAME_FUTURE_ENUM_UNKNOWN = 0;
+}
+
+service Edition2023Proto1OuterclassnameFutureService {
+ // Edition2023Proto1OuterClassnameFutureService.Method
+ rpc Method(Edition2023Proto1OuterClassnameFutureMessage.NestedMessage)
+ returns (Edition2023Proto1OuterClassnameFutureMessage) {}
+}