internal/order: fix sorting of synthetic oneofs to be deterministic

Before this change, synthetic oneofs were ignored in the inOneof() helper
function, but not in the remainder of the LegacyFieldOrder function.

Change-Id: Ia60e5244ae1000e98bbba9dd26f1d1583337fab4
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/497935
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Lasse Folger <lassefolger@google.com>
Reviewed-by: Cassondra Foesch <cfoesch@gmail.com>
diff --git a/internal/order/order.go b/internal/order/order.go
index 33745ed..dea522e 100644
--- a/internal/order/order.go
+++ b/internal/order/order.go
@@ -33,7 +33,7 @@
 			return !inOneof(ox) && inOneof(oy)
 		}
 		// Fields in disjoint oneof sets are sorted by declaration index.
-		if ox != nil && oy != nil && ox != oy {
+		if inOneof(ox) && inOneof(oy) && ox != oy {
 			return ox.Index() < oy.Index()
 		}
 		// Fields sorted by field number.
diff --git a/internal/order/order_test.go b/internal/order/order_test.go
index 2560c23..94de421 100644
--- a/internal/order/order_test.go
+++ b/internal/order/order_test.go
@@ -65,9 +65,9 @@
 			// Non-extension fields that are not within a oneof
 			// sorted next by field number.
 			{number: 1},
-			{number: 5, oneofIndex: -9}, // synthetic oneof
+			{number: 5, oneofIndex: -10}, // synthetic oneof
 			{number: 10},
-			{number: 11, oneofIndex: -10}, // synthetic oneof
+			{number: 11, oneofIndex: -9}, // synthetic oneof
 			{number: 12},
 
 			// Non-synthetic oneofs sorted last by index.