Skip to content

Commit 1e529bc

Browse files
authored
Update Roslyn and use new step tracking API in incremental tests. (#63978)
1 parent 1d60246 commit 1e529bc

22 files changed

+140
-153
lines changed

eng/Versions.props

+16-9
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,27 @@
2222
<LastReleasedStableAssemblyVersion>$(AssemblyVersion)</LastReleasedStableAssemblyVersion>
2323
<UsingToolMicrosoftNetCompilers>true</UsingToolMicrosoftNetCompilers>
2424
</PropertyGroup>
25+
<!--
26+
For source generator support we need to target multiple versions of Rolsyn in order to be able to run on older versions of Roslyn.
27+
We pin these versions as we need to match them exactly for any scenarios that run Roslyn on .NET Framework, like Visual Studio.
28+
-->
2529
<PropertyGroup>
26-
<!-- For source generator support we need to target multiple versions of Rolsyn in order to be able to run on older versions of Roslyn -->
27-
<MicrosoftCodeAnalysisCSharpWorkspacesVersion_3_11>3.11.0</MicrosoftCodeAnalysisCSharpWorkspacesVersion_3_11>
28-
<MicrosoftCodeAnalysisCSharpWorkspacesVersion>4.0.1</MicrosoftCodeAnalysisCSharpWorkspacesVersion>
29-
<MicrosoftCodeAnalysisVersion>4.0.1</MicrosoftCodeAnalysisVersion>
30+
<MicrosoftCodeAnalysisVersion_3_11>3.11.0</MicrosoftCodeAnalysisVersion_3_11>
31+
<MicrosoftCodeAnalysisVersion_4_0>4.0.1</MicrosoftCodeAnalysisVersion_4_0>
3032
</PropertyGroup>
3133
<PropertyGroup>
3234
<!-- Code analysis dependencies -->
33-
<MicrosoftCodeAnalysisAnalyzersVersion>3.3.2</MicrosoftCodeAnalysisAnalyzersVersion>
34-
<MicrosoftCodeAnalysisCSharpCodeStyleVersion>4.0.1</MicrosoftCodeAnalysisCSharpCodeStyleVersion>
35-
<MicrosoftCodeAnalysisCSharpVersion>4.0.1</MicrosoftCodeAnalysisCSharpVersion>
35+
<MicrosoftCodeAnalysisAnalyzersVersion>3.3.3</MicrosoftCodeAnalysisAnalyzersVersion>
36+
<MicrosoftCodeAnalysisCSharpCodeStyleVersion>4.2.0-2.22128.1</MicrosoftCodeAnalysisCSharpCodeStyleVersion>
37+
<MicrosoftCodeAnalysisCSharpWorkspacesVersion>4.2.0-2.22128.1</MicrosoftCodeAnalysisCSharpWorkspacesVersion>
38+
<MicrosoftCodeAnalysisCSharpVersion>4.2.0-2.22128.1</MicrosoftCodeAnalysisCSharpVersion>
3639
<MicrosoftCodeAnalysisNetAnalyzersVersion>7.0.0-preview1.22119.1</MicrosoftCodeAnalysisNetAnalyzersVersion>
37-
<!-- TODO: Remove pinned compiler version once arcade supplies runtime with a compiler capable of handling !! -->
38-
<MicrosoftNetCompilersToolsetVersion>4.2.0-2.22105.4</MicrosoftNetCompilersToolsetVersion>
40+
<MicrosoftCodeAnalysisVersion>4.2.0-2.22128.1</MicrosoftCodeAnalysisVersion>
41+
<!--
42+
TODO: Remove pinned compiler version once arcade supplies runtime with a compiler capable of handling !!
43+
and has https://github.com/dotnet/roslyn/pull/59776
44+
-->
45+
<MicrosoftNetCompilersToolsetVersion>4.2.0-2.22128.1</MicrosoftNetCompilersToolsetVersion>
3946
<!-- SDK dependencies -->
4047
<MicrosoftDotNetCompatibilityVersion>2.0.0-alpha.1.21525.11</MicrosoftDotNetCompatibilityVersion>
4148
<!-- Arcade dependencies -->

eng/formatting/format.sh

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ if [ -n "$NATIVE_FILES" ]; then
1414
# Add back the modified files to staging
1515
echo "$NATIVE_FILES" | xargs git add
1616
fi
17+
1718
if [ -n "$MANAGED_FILES" ]; then
1819
# Format all selected files
1920
echo "$MANAGED_FILES" | cat | xargs | sed -e 's/ /,/g' | dotnet format --no-restore --include -

src/libraries/Common/src/Interop/OSX/Interop.Libraries.cs

-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,5 @@ internal static partial class Libraries
1515
internal const string SystemConfigurationLibrary = "/System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration";
1616
internal const string AppleCryptoNative = "libSystem.Security.Cryptography.Native.Apple";
1717
internal const string MsQuic = "libmsquic.dylib";
18-
internal const string libc = "libc";
1918
}
2019
}

src/libraries/Common/src/Interop/Unix/Interop.Libraries.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ internal static partial class Interop
55
{
66
internal static partial class Libraries
77
{
8-
internal const string Libc = "libc";
8+
internal const string libc = "libc";
99

1010
// Shims
1111
internal const string SystemNative = "libSystem.Native";

src/libraries/Common/src/Interop/Unix/libc/Interop.GetParentPid.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ internal static partial class Interop
77
{
88
internal static partial class @libc
99
{
10-
[GeneratedDllImport(Libraries.Libc, EntryPoint = "getppid")]
10+
[GeneratedDllImport(Libraries.libc, EntryPoint = "getppid")]
1111
internal static partial int GetParentPid();
1212
}
1313
}

src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Unix.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static partial class PlatformDetection
5151
public static bool IsNotFedoraOrRedHatFamily => !IsFedora && !IsRedHatFamily;
5252
public static bool IsNotDebian10 => !IsDebian10;
5353

54-
public static bool IsSuperUser => IsBrowser || IsWindows ? false : Libc.geteuid() == 0;
54+
public static bool IsSuperUser => IsBrowser || IsWindows ? false : libc.geteuid() == 0;
5555

5656
public static Version OpenSslVersion => !IsOSXLike && !IsWindows && !IsAndroid ?
5757
GetOpenSslVersion() :
@@ -77,7 +77,7 @@ public static string LibcRelease
7777

7878
try
7979
{
80-
return Marshal.PtrToStringAnsi(Libc.gnu_get_libc_release());
80+
return Marshal.PtrToStringAnsi(libc.gnu_get_libc_release());
8181
}
8282
catch (Exception e) when (e is DllNotFoundException || e is EntryPointNotFoundException)
8383
{
@@ -101,7 +101,7 @@ public static string LibcVersion
101101

102102
try
103103
{
104-
return Marshal.PtrToStringAnsi(Libc.gnu_get_libc_version());
104+
return Marshal.PtrToStringAnsi(libc.gnu_get_libc_version());
105105
}
106106
catch (Exception e) when (e is DllNotFoundException || e is EntryPointNotFoundException)
107107
{
@@ -324,7 +324,7 @@ private struct DistroInfo
324324
public Version VersionId { get; set; }
325325
}
326326

327-
private static partial class Libc
327+
private static partial class @libc
328328
{
329329
[GeneratedDllImport("libc", SetLastError = true)]
330330
public static unsafe partial uint geteuid();

src/libraries/Microsoft.Extensions.Logging.Abstractions/gen/Microsoft.Extensions.Logging.Generators.Roslyn3.11.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<AnalyzerRoslynVersion>3.11</AnalyzerRoslynVersion>
5-
<RoslynApiVersion>$(MicrosoftCodeAnalysisCSharpWorkspacesVersion_3_11)</RoslynApiVersion>
5+
<RoslynApiVersion>$(MicrosoftCodeAnalysisVersion_3_11)</RoslynApiVersion>
66
</PropertyGroup>
77

88
<Import Project="Microsoft.Extensions.Logging.Generators.targets" />

src/libraries/Microsoft.Extensions.Logging.Abstractions/gen/Microsoft.Extensions.Logging.Generators.Roslyn4.0.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<AnalyzerRoslynVersion>4.0</AnalyzerRoslynVersion>
5-
<RoslynApiVersion>$(MicrosoftCodeAnalysisCSharpWorkspacesVersion)</RoslynApiVersion>
5+
<RoslynApiVersion>$(MicrosoftCodeAnalysisVersion_4_0)</RoslynApiVersion>
66
<DefineConstants>$(DefineConstants);ROSLYN4_0_OR_GREATER</DefineConstants>
77
</PropertyGroup>
88

src/libraries/Microsoft.Extensions.Logging.Abstractions/tests/Microsoft.Extensions.Logging.Generators.Tests/Microsoft.Extensions.Logging.Generators.Roslyn3.11.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<RoslynApiVersion>$(MicrosoftCodeAnalysisCSharpWorkspacesVersion_3_11)</RoslynApiVersion>
4+
<RoslynApiVersion>$(MicrosoftCodeAnalysisVersion_3_11)</RoslynApiVersion>
55
<IsHighAotMemoryUsageTest>true</IsHighAotMemoryUsageTest>
66
</PropertyGroup>
77

src/libraries/Microsoft.Extensions.Logging.Abstractions/tests/Microsoft.Extensions.Logging.Generators.Tests/Microsoft.Extensions.Logging.Generators.Roslyn4.0.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<RoslynApiVersion>$(MicrosoftCodeAnalysisCSharpWorkspacesVersion)</RoslynApiVersion>
4+
<RoslynApiVersion>$(MicrosoftCodeAnalysisVersion_4_0)</RoslynApiVersion>
55
<DefineConstants>$(DefineConstants);ROSLYN4_0_OR_GREATER</DefineConstants>
66
<IsHighAotMemoryUsageTest>true</IsHighAotMemoryUsageTest>
77
<EmccLinkOptimizationFlag Condition="'$(ContinuousIntegrationBuild)' == 'true'">-O1</EmccLinkOptimizationFlag>

src/libraries/System.Runtime.InteropServices/gen/DllImportGenerator/DllImportGenerator.cs

+18-45
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,14 @@ public override int GetHashCode()
4444
}
4545
}
4646

47-
public class IncrementalityTracker
47+
public static class StepNames
4848
{
49-
public enum StepName
50-
{
51-
CalculateStubInformation,
52-
GenerateSingleStub,
53-
NormalizeWhitespace,
54-
ConcatenateStubs,
55-
OutputSourceFile
56-
}
57-
58-
public record ExecutedStepInfo(StepName Step, object Input);
59-
60-
private readonly List<ExecutedStepInfo> _executedSteps = new();
61-
public IEnumerable<ExecutedStepInfo> ExecutedSteps => _executedSteps;
62-
63-
internal void RecordExecutedStep(ExecutedStepInfo step) => _executedSteps.Add(step);
49+
public const string CalculateStubInformation = nameof(CalculateStubInformation);
50+
public const string GenerateSingleStub = nameof(GenerateSingleStub);
51+
public const string NormalizeWhitespace = nameof(NormalizeWhitespace);
52+
public const string ConcatenateStubs = nameof(ConcatenateStubs);
6453
}
6554

66-
/// <summary>
67-
/// This property provides a test-only hook to enable testing the incrementality of the source generator.
68-
/// This will be removed when https://github.com/dotnet/roslyn/issues/54832 is implemented and can be consumed.
69-
/// </summary>
70-
public IncrementalityTracker? IncrementalTracker { get; set; }
71-
7255
public void Initialize(IncrementalGeneratorInitializationContext context)
7356
{
7457
var attributedMethods = context.SyntaxProvider
@@ -128,7 +111,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
128111
});
129112

130113
IncrementalValueProvider<DllImportGeneratorOptions> stubOptions = context.AnalyzerConfigOptionsProvider
131-
.Select((options, ct) => new DllImportGeneratorOptions(options.GlobalOptions));
114+
.Select(static (options, ct) => new DllImportGeneratorOptions(options.GlobalOptions));
132115

133116
IncrementalValueProvider<StubEnvironment> stubEnvironment = compilationAndTargetFramework
134117
.Combine(stubOptions)
@@ -151,34 +134,24 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
151134
Environment = data.Right
152135
})
153136
.Select(
154-
(data, ct) =>
155-
{
156-
IncrementalTracker?.RecordExecutedStep(new IncrementalityTracker.ExecutedStepInfo(IncrementalityTracker.StepName.CalculateStubInformation, data));
157-
return (data.Syntax, StubContext: CalculateStubInformation(data.Symbol, data.Environment, ct));
158-
}
137+
static (data, ct) => (data.Syntax, StubContext: CalculateStubInformation(data.Symbol, data.Environment, ct))
159138
)
160139
.WithComparer(Comparers.CalculatedContextWithSyntax)
140+
.WithTrackingName(StepNames.CalculateStubInformation)
161141
.Combine(stubOptions)
162142
.Select(
163-
(data, ct) =>
164-
{
165-
IncrementalTracker?.RecordExecutedStep(new IncrementalityTracker.ExecutedStepInfo(IncrementalityTracker.StepName.GenerateSingleStub, data));
166-
return GenerateSource(data.Left.StubContext, data.Left.Syntax, data.Right);
167-
}
143+
static (data, ct) => GenerateSource(data.Left.StubContext, data.Left.Syntax, data.Right)
168144
)
169145
.WithComparer(Comparers.GeneratedSyntax)
146+
.WithTrackingName(StepNames.GenerateSingleStub)
170147
// Handle NormalizeWhitespace as a separate stage for incremental runs since it is an expensive operation.
171148
.Select(
172-
(data, ct) =>
173-
{
174-
IncrementalTracker?.RecordExecutedStep(new IncrementalityTracker.ExecutedStepInfo(IncrementalityTracker.StepName.NormalizeWhitespace, data));
175-
return (data.Item1.NormalizeWhitespace().ToFullString(), data.Item2);
176-
})
149+
static (data, ct) => (data.Item1.NormalizeWhitespace().ToFullString(), data.Item2))
150+
.WithTrackingName(StepNames.NormalizeWhitespace)
177151
.Collect()
178152
.WithComparer(Comparers.GeneratedSourceSet)
179-
.Select((generatedSources, ct) =>
153+
.Select(static (generatedSources, ct) =>
180154
{
181-
IncrementalTracker?.RecordExecutedStep(new IncrementalityTracker.ExecutedStepInfo(IncrementalityTracker.StepName.ConcatenateStubs, generatedSources));
182155
StringBuilder source = new();
183156
// Mark in source that the file is auto-generated.
184157
source.AppendLine("// <auto-generated/>");
@@ -190,12 +163,12 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
190163
}
191164
return (source: source.ToString(), diagnostics: diagnostics.ToImmutable());
192165
})
193-
.WithComparer(Comparers.GeneratedSource);
166+
.WithComparer(Comparers.GeneratedSource)
167+
.WithTrackingName(StepNames.ConcatenateStubs);
194168

195169
context.RegisterSourceOutput(methodSourceAndDiagnostics,
196-
(context, data) =>
170+
static (context, data) =>
197171
{
198-
IncrementalTracker?.RecordExecutedStep(new IncrementalityTracker.ExecutedStepInfo(IncrementalityTracker.StepName.OutputSourceFile, data));
199172
foreach (Diagnostic diagnostic in data.Item2)
200173
{
201174
context.ReportDiagnostic(diagnostic);
@@ -510,7 +483,7 @@ private static IncrementalStubGenerationContext CalculateStubInformation(IMethod
510483
return new IncrementalStubGenerationContext(environment, dllImportStub, additionalAttributes.ToImmutableArray(), stubDllImportData, generatorDiagnostics.Diagnostics.ToImmutableArray());
511484
}
512485

513-
private (MemberDeclarationSyntax, ImmutableArray<Diagnostic>) GenerateSource(
486+
private static (MemberDeclarationSyntax, ImmutableArray<Diagnostic>) GenerateSource(
514487
IncrementalStubGenerationContext dllImportStub,
515488
MethodDeclarationSyntax originalSyntax,
516489
DllImportGeneratorOptions options)
@@ -567,7 +540,7 @@ private static IncrementalStubGenerationContext CalculateStubInformation(IMethod
567540
return (PrintGeneratedSource(originalSyntax, dllImportStub.StubContext, code), dllImportStub.Diagnostics.AddRange(diagnostics.Diagnostics));
568541
}
569542

570-
private MemberDeclarationSyntax PrintForwarderStub(MethodDeclarationSyntax userDeclaredMethod, IncrementalStubGenerationContext stub, GeneratorDiagnostics diagnostics)
543+
private static MemberDeclarationSyntax PrintForwarderStub(MethodDeclarationSyntax userDeclaredMethod, IncrementalStubGenerationContext stub, GeneratorDiagnostics diagnostics)
571544
{
572545
GeneratedDllImportData targetDllImportData = GetTargetDllImportDataFromStubData(
573546
stub.DllImportData,

0 commit comments

Comments
 (0)