all: split flags.ProtoLegacyWeak out of flags.ProtoLegacy

This is a no-op change in preparation of removing support for weak fields.
It allows users to keep enabling ProtoLegacy in general,
but also disable weak field support independently.

For golang/protobuf#1666

Change-Id: Ic3cb90d937e21a817ddbbb36029274be8b5f2513
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/641635
Reviewed-by: Chressie Himpel <chressie@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/encoding/protojson/decode.go b/encoding/protojson/decode.go
index 8f9e592..cffdfda 100644
--- a/encoding/protojson/decode.go
+++ b/encoding/protojson/decode.go
@@ -192,7 +192,7 @@
 				fd = fieldDescs.ByTextName(name)
 			}
 		}
-		if flags.ProtoLegacy {
+		if flags.ProtoLegacyWeak {
 			if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() {
 				fd = nil // reset since the weak reference is not linked in
 			}
diff --git a/encoding/protojson/decode_test.go b/encoding/protojson/decode_test.go
index 053d269..d74593d 100644
--- a/encoding/protojson/decode_test.go
+++ b/encoding/protojson/decode_test.go
@@ -2684,13 +2684,13 @@
 			m.SetWeakMessage1(&weakpb.WeakImportMessage1{A: proto.Int32(1)})
 			return m
 		}(),
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		desc:         "weak fields; unknown field",
 		inputMessage: &testpb.TestWeak{},
 		inputText:    `{"weak_message1":{"a":1}, "weak_message2":{"a":1}}`,
 		wantErr:      `unknown field "weak_message2"`, // weak_message2 is unknown since the package containing it is not imported
-		skip:         !flags.ProtoLegacy,
+		skip:         !flags.ProtoLegacyWeak,
 	}, {
 		desc:         "just at recursion limit: nested messages",
 		inputMessage: &testpb.TestAllTypes{},
diff --git a/encoding/prototext/decode.go b/encoding/prototext/decode.go
index 24bc98a..d972a3d 100644
--- a/encoding/prototext/decode.go
+++ b/encoding/prototext/decode.go
@@ -185,7 +185,7 @@
 		} else if xtErr != nil && xtErr != protoregistry.NotFound {
 			return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr)
 		}
-		if flags.ProtoLegacy {
+		if flags.ProtoLegacyWeak {
 			if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() {
 				fd = nil // reset since the weak reference is not linked in
 			}
diff --git a/encoding/prototext/decode_test.go b/encoding/prototext/decode_test.go
index a0be9ce..9ccfdc4 100644
--- a/encoding/prototext/decode_test.go
+++ b/encoding/prototext/decode_test.go
@@ -1625,13 +1625,13 @@
 			m.SetWeakMessage1(&weakpb.WeakImportMessage1{A: proto.Int32(1)})
 			return m
 		}(),
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		desc:         "weak fields; unknown field",
 		inputMessage: &testpb.TestWeak{},
 		inputText:    `weak_message1:{a:1} weak_message2:{a:1}`,
 		wantErr:      "unknown field: weak_message2", // weak_message2 is unknown since the package containing it is not imported
-		skip:         !flags.ProtoLegacy,
+		skip:         !flags.ProtoLegacyWeak,
 	}}
 
 	for _, msg := range makeMessages(protobuild.Message{},
diff --git a/internal/flags/flags.go b/internal/flags/flags.go
index 58372dd..5cb3ee7 100644
--- a/internal/flags/flags.go
+++ b/internal/flags/flags.go
@@ -22,3 +22,8 @@
 // extension fields at unmarshal time, but defers creating the message
 // structure until the extension is first accessed.
 const LazyUnmarshalExtensions = ProtoLegacy
+
+// ProtoLegacyWeak specifies whether to enable support for weak fields.
+// This flag was split out of ProtoLegacy in preparation for removing
+// support for weak fields (independent of the other protolegacy features).
+const ProtoLegacyWeak = ProtoLegacy
diff --git a/internal/impl/message_reflect_field.go b/internal/impl/message_reflect_field.go
index 9efecd4..3cd1fbc 100644
--- a/internal/impl/message_reflect_field.go
+++ b/internal/impl/message_reflect_field.go
@@ -333,7 +333,7 @@
 }
 
 func fieldInfoForWeakMessage(fd protoreflect.FieldDescriptor, weakOffset offset) fieldInfo {
-	if !flags.ProtoLegacy {
+	if !flags.ProtoLegacyWeak {
 		panic("no support for proto1 weak fields")
 	}
 
diff --git a/proto/checkinit_test.go b/proto/checkinit_test.go
index 56cccd9..848f78b 100644
--- a/proto/checkinit_test.go
+++ b/proto/checkinit_test.go
@@ -73,7 +73,7 @@
 	}, {
 		m:    &testpb.TestWeak{},
 		want: `<nil>`,
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		m: func() proto.Message {
 			m := &testpb.TestWeak{}
@@ -81,7 +81,7 @@
 			return m
 		}(),
 		want: `goproto.proto.test.weak.WeakImportMessage1.a`,
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		m: func() proto.Message {
 			m := &testpb.TestWeak{}
@@ -91,7 +91,7 @@
 			return m
 		}(),
 		want: `<nil>`,
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}}
 
 	for _, tt := range tests {
diff --git a/proto/decode.go b/proto/decode.go
index a3b5e14..e28d7ac 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -172,7 +172,7 @@
 		var err error
 		if fd == nil {
 			err = errUnknown
-		} else if flags.ProtoLegacy {
+		} else if flags.ProtoLegacyWeak {
 			if fd.IsWeak() && fd.Message().IsPlaceholder() {
 				err = errUnknown // weak referent is not linked in
 			}
diff --git a/proto/weak_test.go b/proto/weak_test.go
index 79340e3..c777a4a 100644
--- a/proto/weak_test.go
+++ b/proto/weak_test.go
@@ -17,7 +17,7 @@
 )
 
 func init() {
-	if flags.ProtoLegacy {
+	if flags.ProtoLegacyWeak {
 		testValidMessages = append(testValidMessages, testWeakValidMessages...)
 		testInvalidMessages = append(testInvalidMessages, testWeakInvalidMessages...)
 		testMerges = append(testMerges, testWeakMerges...)
@@ -29,7 +29,7 @@
 		desc: "weak message",
 		decodeTo: []proto.Message{
 			func() proto.Message {
-				if !flags.ProtoLegacy {
+				if !flags.ProtoLegacyWeak {
 					return nil
 				}
 				m := &testpb.TestWeak{}
@@ -98,7 +98,7 @@
 }
 
 func TestWeakNil(t *testing.T) {
-	if !flags.ProtoLegacy {
+	if !flags.ProtoLegacyWeak {
 		t.SkipNow()
 	}
 
@@ -109,7 +109,7 @@
 }
 
 func TestWeakMarshalNil(t *testing.T) {
-	if !flags.ProtoLegacy {
+	if !flags.ProtoLegacyWeak {
 		t.SkipNow()
 	}
 
diff --git a/reflect/protodesc/desc_validate.go b/reflect/protodesc/desc_validate.go
index 6de31c2..5eaf652 100644
--- a/reflect/protodesc/desc_validate.go
+++ b/reflect/protodesc/desc_validate.go
@@ -149,7 +149,7 @@
 					return errors.New("message field %q under proto3 optional semantics must be within a single element oneof", f.FullName())
 				}
 			}
-			if f.IsWeak() && !flags.ProtoLegacy {
+			if f.IsWeak() && !flags.ProtoLegacyWeak {
 				return errors.New("message field %q is a weak field, which is a legacy proto1 feature that is no longer supported", f.FullName())
 			}
 			if f.IsWeak() && (!f.HasPresence() || !isOptionalMessage(f) || f.ContainingOneof() != nil) {
diff --git a/testing/prototest/prototest_test.go b/testing/prototest/prototest_test.go
index 40df84c..6515c65 100644
--- a/testing/prototest/prototest_test.go
+++ b/testing/prototest/prototest_test.go
@@ -36,7 +36,7 @@
 		(*legacypb.Legacy)(nil),
 		protoimpl.X.MessageOf((*legacy1pb.Message)(nil)).Interface(),
 	}
-	if flags.ProtoLegacy {
+	if flags.ProtoLegacyWeak {
 		ms = append(ms, (*testpb.TestWeak)(nil))
 	}