Auto-generate files after cl/542949247
diff --git a/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs b/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs
index 8f9da57..ae96061 100644
--- a/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs
+++ b/csharp/src/Google.Protobuf/Compiler/Plugin.pb.cs
@@ -27,26 +27,28 @@
             "CiVnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnByb3RvEhhnb29n",
             "bGUucHJvdG9idWYuY29tcGlsZXIaIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlw",
             "dG9yLnByb3RvIkYKB1ZlcnNpb24SDQoFbWFqb3IYASABKAUSDQoFbWlub3IY",
-            "AiABKAUSDQoFcGF0Y2gYAyABKAUSDgoGc3VmZml4GAQgASgJIroBChRDb2Rl",
+            "AiABKAUSDQoFcGF0Y2gYAyABKAUSDgoGc3VmZml4GAQgASgJIoECChRDb2Rl",
             "R2VuZXJhdG9yUmVxdWVzdBIYChBmaWxlX3RvX2dlbmVyYXRlGAEgAygJEhEK",
             "CXBhcmFtZXRlchgCIAEoCRI4Cgpwcm90b19maWxlGA8gAygLMiQuZ29vZ2xl",
-            "LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8SOwoQY29tcGlsZXJfdmVy",
-            "c2lvbhgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5jb21waWxlci5WZXJzaW9u",
-            "IsECChVDb2RlR2VuZXJhdG9yUmVzcG9uc2USDQoFZXJyb3IYASABKAkSGgoS",
-            "c3VwcG9ydGVkX2ZlYXR1cmVzGAIgASgEEkIKBGZpbGUYDyADKAsyNC5nb29n",
-            "bGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdlbmVyYXRvclJlc3BvbnNlLkZp",
-            "bGUafwoERmlsZRIMCgRuYW1lGAEgASgJEhcKD2luc2VydGlvbl9wb2ludBgC",
-            "IAEoCRIPCgdjb250ZW50GA8gASgJEj8KE2dlbmVyYXRlZF9jb2RlX2luZm8Y",
-            "ECABKAsyIi5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8iOAoH",
-            "RmVhdHVyZRIQCgxGRUFUVVJFX05PTkUQABIbChdGRUFUVVJFX1BST1RPM19P",
-            "UFRJT05BTBABQnIKHGNvbS5nb29nbGUucHJvdG9idWYuY29tcGlsZXJCDFBs",
-            "dWdpblByb3Rvc1opZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYvdHlwZXMv",
-            "cGx1Z2lucGKqAhhHb29nbGUuUHJvdG9idWYuQ29tcGlsZXI="));
+            "LnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG8SRQoXc291cmNlX2ZpbGVf",
+            "ZGVzY3JpcHRvcnMYESADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2Ny",
+            "aXB0b3JQcm90bxI7ChBjb21waWxlcl92ZXJzaW9uGAMgASgLMiEuZ29vZ2xl",
+            "LnByb3RvYnVmLmNvbXBpbGVyLlZlcnNpb24iwQIKFUNvZGVHZW5lcmF0b3JS",
+            "ZXNwb25zZRINCgVlcnJvchgBIAEoCRIaChJzdXBwb3J0ZWRfZmVhdHVyZXMY",
+            "AiABKAQSQgoEZmlsZRgPIAMoCzI0Lmdvb2dsZS5wcm90b2J1Zi5jb21waWxl",
+            "ci5Db2RlR2VuZXJhdG9yUmVzcG9uc2UuRmlsZRp/CgRGaWxlEgwKBG5hbWUY",
+            "ASABKAkSFwoPaW5zZXJ0aW9uX3BvaW50GAIgASgJEg8KB2NvbnRlbnQYDyAB",
+            "KAkSPwoTZ2VuZXJhdGVkX2NvZGVfaW5mbxgQIAEoCzIiLmdvb2dsZS5wcm90",
+            "b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mbyI4CgdGZWF0dXJlEhAKDEZFQVRVUkVf",
+            "Tk9ORRAAEhsKF0ZFQVRVUkVfUFJPVE8zX09QVElPTkFMEAFCcgocY29tLmdv",
+            "b2dsZS5wcm90b2J1Zi5jb21waWxlckIMUGx1Z2luUHJvdG9zWilnb29nbGUu",
+            "Z29sYW5nLm9yZy9wcm90b2J1Zi90eXBlcy9wbHVnaW5wYqoCGEdvb2dsZS5Q",
+            "cm90b2J1Zi5Db21waWxlcg=="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { global::Google.Protobuf.Reflection.DescriptorReflection.Descriptor, },
           new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
             new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.Version), global::Google.Protobuf.Compiler.Version.Parser, new[]{ "Major", "Minor", "Patch", "Suffix" }, null, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorRequest), global::Google.Protobuf.Compiler.CodeGeneratorRequest.Parser, new[]{ "FileToGenerate", "Parameter", "ProtoFile", "CompilerVersion" }, null, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorRequest), global::Google.Protobuf.Compiler.CodeGeneratorRequest.Parser, new[]{ "FileToGenerate", "Parameter", "ProtoFile", "SourceFileDescriptors", "CompilerVersion" }, null, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse), global::Google.Protobuf.Compiler.CodeGeneratorResponse.Parser, new[]{ "Error", "SupportedFeatures", "File" }, null, new[]{ typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.Feature) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File), global::Google.Protobuf.Compiler.CodeGeneratorResponse.Types.File.Parser, new[]{ "Name", "InsertionPoint", "Content", "GeneratedCodeInfo" }, null, null, null, null)})
           }));
     }
@@ -462,6 +464,7 @@
       fileToGenerate_ = other.fileToGenerate_.Clone();
       parameter_ = other.parameter_;
       protoFile_ = other.protoFile_.Clone();
+      sourceFileDescriptors_ = other.sourceFileDescriptors_.Clone();
       compilerVersion_ = other.compilerVersion_ != null ? other.compilerVersion_.Clone() : null;
       _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
     }
@@ -527,6 +530,11 @@
     /// they import.  The files will appear in topological order, so each file
     /// appears before any file that imports it.
     ///
+    /// Note: the files listed in files_to_generate will include runtime-retention
+    /// options only, but all other files will include source-retention options.
+    /// The source_file_descriptors field below is available in case you need
+    /// source-retention options for files_to_generate.
+    ///
     /// protoc guarantees that all proto_files will be written after
     /// the fields above, even though this is not technically guaranteed by the
     /// protobuf wire format.  This theoretically could allow a plugin to stream
@@ -544,6 +552,22 @@
       get { return protoFile_; }
     }
 
+    /// <summary>Field number for the "source_file_descriptors" field.</summary>
+    public const int SourceFileDescriptorsFieldNumber = 17;
+    private static readonly pb::FieldCodec<global::Google.Protobuf.Reflection.FileDescriptorProto> _repeated_sourceFileDescriptors_codec
+        = pb::FieldCodec.ForMessage(138, global::Google.Protobuf.Reflection.FileDescriptorProto.Parser);
+    private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.FileDescriptorProto> sourceFileDescriptors_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.FileDescriptorProto>();
+    /// <summary>
+    /// File descriptors with all options, including source-retention options.
+    /// These descriptors are only provided for the files listed in
+    /// files_to_generate.
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public pbc::RepeatedField<global::Google.Protobuf.Reflection.FileDescriptorProto> SourceFileDescriptors {
+      get { return sourceFileDescriptors_; }
+    }
+
     /// <summary>Field number for the "compiler_version" field.</summary>
     public const int CompilerVersionFieldNumber = 3;
     private global::Google.Protobuf.Compiler.Version compilerVersion_;
@@ -577,6 +601,7 @@
       if(!fileToGenerate_.Equals(other.fileToGenerate_)) return false;
       if (Parameter != other.Parameter) return false;
       if(!protoFile_.Equals(other.protoFile_)) return false;
+      if(!sourceFileDescriptors_.Equals(other.sourceFileDescriptors_)) return false;
       if (!object.Equals(CompilerVersion, other.CompilerVersion)) return false;
       return Equals(_unknownFields, other._unknownFields);
     }
@@ -588,6 +613,7 @@
       hash ^= fileToGenerate_.GetHashCode();
       if (HasParameter) hash ^= Parameter.GetHashCode();
       hash ^= protoFile_.GetHashCode();
+      hash ^= sourceFileDescriptors_.GetHashCode();
       if (compilerVersion_ != null) hash ^= CompilerVersion.GetHashCode();
       if (_unknownFields != null) {
         hash ^= _unknownFields.GetHashCode();
@@ -617,6 +643,7 @@
         output.WriteMessage(CompilerVersion);
       }
       protoFile_.WriteTo(output, _repeated_protoFile_codec);
+      sourceFileDescriptors_.WriteTo(output, _repeated_sourceFileDescriptors_codec);
       if (_unknownFields != null) {
         _unknownFields.WriteTo(output);
       }
@@ -637,6 +664,7 @@
         output.WriteMessage(CompilerVersion);
       }
       protoFile_.WriteTo(ref output, _repeated_protoFile_codec);
+      sourceFileDescriptors_.WriteTo(ref output, _repeated_sourceFileDescriptors_codec);
       if (_unknownFields != null) {
         _unknownFields.WriteTo(ref output);
       }
@@ -652,6 +680,7 @@
         size += 1 + pb::CodedOutputStream.ComputeStringSize(Parameter);
       }
       size += protoFile_.CalculateSize(_repeated_protoFile_codec);
+      size += sourceFileDescriptors_.CalculateSize(_repeated_sourceFileDescriptors_codec);
       if (compilerVersion_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(CompilerVersion);
       }
@@ -672,6 +701,7 @@
         Parameter = other.Parameter;
       }
       protoFile_.Add(other.protoFile_);
+      sourceFileDescriptors_.Add(other.sourceFileDescriptors_);
       if (other.compilerVersion_ != null) {
         if (compilerVersion_ == null) {
           CompilerVersion = new global::Google.Protobuf.Compiler.Version();
@@ -712,6 +742,10 @@
             protoFile_.AddEntriesFrom(input, _repeated_protoFile_codec);
             break;
           }
+          case 138: {
+            sourceFileDescriptors_.AddEntriesFrom(input, _repeated_sourceFileDescriptors_codec);
+            break;
+          }
         }
       }
     #endif
@@ -746,6 +780,10 @@
             protoFile_.AddEntriesFrom(ref input, _repeated_protoFile_codec);
             break;
           }
+          case 138: {
+            sourceFileDescriptors_.AddEntriesFrom(ref input, _repeated_sourceFileDescriptors_codec);
+            break;
+          }
         }
       }
     }
diff --git a/src/file_lists.cmake b/src/file_lists.cmake
index ed8e430..69b10a3 100644
--- a/src/file_lists.cmake
+++ b/src/file_lists.cmake
@@ -693,6 +693,11 @@
   ${protobuf_SOURCE_DIR}/src/google/protobuf/unittest_lite.proto
 )
 
+# @//src/google/protobuf/compiler:fake_plugin_srcs
+set(fake_plugin_files
+  ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/fake_plugin.cc
+)
+
 # @//src/google/protobuf/compiler:test_srcs
 set(compiler_test_files
   ${protobuf_SOURCE_DIR}/src/google/protobuf/compiler/command_line_interface_unittest.cc