diff --git a/src/Analyzers/CSharp/Tests/MakeFieldReadonly/MakeFieldReadonlyTests.cs b/src/Analyzers/CSharp/Tests/MakeFieldReadonly/MakeFieldReadonlyTests.cs
index 58a279a732dec..811f51493f746 100644
--- a/src/Analyzers/CSharp/Tests/MakeFieldReadonly/MakeFieldReadonlyTests.cs
+++ b/src/Analyzers/CSharp/Tests/MakeFieldReadonly/MakeFieldReadonlyTests.cs
@@ -1746,5 +1746,38 @@ class Program
private static object [|t_obj|];
}");
}
+
+ [WorkItem(50925, "https://github.com/dotnet/roslyn/issues/50925")]
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsMakeFieldReadonly)]
+ public async Task Test_MemberUsedInGeneratedCode()
+ {
+ await TestMissingInRegularAndScriptAsync(
+@"
+
+
+public sealed partial class Test
+{
+ private int [|_value|];
+
+ public static void M()
+ => _ = new Test { Value = 1 };
+}
+
+
+using System.CodeDom.Compiler;
+
+[GeneratedCode(null, null)]
+public sealed partial class Test
+{
+ public int Value
+ {
+ get => _value;
+ set => _value = value;
+ }
+}
+
+
+");
+ }
}
}
diff --git a/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs b/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs
index 5793dc9e32a43..8d0a0b3688a4f 100644
--- a/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs
+++ b/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs
@@ -65,10 +65,16 @@ protected static DiagnosticDescriptor CreateDescriptorWithId(
customTags: DiagnosticCustomTags.Create(isUnnecessary, isConfigurable, enforceOnBuild));
#pragma warning restore RS0030 // Do not used banned APIs
+ ///
+ /// Flag indicating whether or not analyzer should receive analysis callbacks for generated code.
+ /// By default, code style analyzers should not run on generated code, so the value is false.
+ ///
+ protected virtual bool ReceiveAnalysisCallbacksForGeneratedCode => false;
+
public sealed override void Initialize(AnalysisContext context)
{
- // Code style analyzers should not run on generated code.
- context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ var flags = ReceiveAnalysisCallbacksForGeneratedCode ? GeneratedCodeAnalysisFlags.Analyze : GeneratedCodeAnalysisFlags.None;
+ context.ConfigureGeneratedCodeAnalysis(flags);
context.EnableConcurrentExecution();
InitializeWorker(context);
diff --git a/src/Analyzers/Core/Analyzers/MakeFieldReadonly/MakeFieldReadonlyDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/MakeFieldReadonly/MakeFieldReadonlyDiagnosticAnalyzer.cs
index 273404db77b94..af266f53e39ad 100644
--- a/src/Analyzers/Core/Analyzers/MakeFieldReadonly/MakeFieldReadonlyDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/MakeFieldReadonly/MakeFieldReadonlyDiagnosticAnalyzer.cs
@@ -31,6 +31,9 @@ public MakeFieldReadonlyDiagnosticAnalyzer()
public override DiagnosticAnalyzerCategory GetAnalyzerCategory() => DiagnosticAnalyzerCategory.SemanticDocumentAnalysis;
+ // We need to analyze generated code to get callbacks for read/writes to non-generated members in generated code.
+ protected override bool ReceiveAnalysisCallbacksForGeneratedCode => true;
+
protected override void InitializeWorker(AnalysisContext context)
{
context.RegisterCompilationStartAction(compilationStartContext =>