Skip to content

Commit 0f8572c

Browse files
live1206Copilot
andcommitted
Remove Roslyn from provider reference map
Use provider metadata and source-input lookups for generated reference-map roots so the analyzer no longer needs Roslyn project or semantic-model scans. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 5f8792c commit 0f8572c

4 files changed

Lines changed: 284 additions & 577 deletions

File tree

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/PostProcessing/GeneratedCodeWorkspace.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ public async Task AddInMemoryFile(TypeProvider type)
8686

8787
internal void AnalyzeProviderReferenceMap(IReadOnlyList<TypeProvider> providers)
8888
{
89-
ProviderReferenceMapAnalyzer.Analyze(providers, _project);
89+
ProviderReferenceMapAnalyzer.Analyze(providers);
9090
}
9191

9292
internal void ApplyPreWriteAccessibility(IReadOnlyList<TypeProvider> providers)
9393
{
94-
ProviderReferenceMapAnalyzer.ApplyPreWriteAccessibility(providers, _project);
94+
ProviderReferenceMapAnalyzer.ApplyPreWriteAccessibility(providers);
9595
}
9696

9797
private async Task UpdateProject(Document document)

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/PostProcessing/PostProcessor.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,7 @@ public async Task<Project> InternalizeAsync(Project project)
133133
return project;
134134
}
135135

136-
var referenceMapResult = ProviderReferenceMapAnalyzer.LatestResult is { } latestResult && latestResult.ProjectId == project.Id
137-
? latestResult
138-
: null;
136+
var referenceMapResult = ProviderReferenceMapAnalyzer.LatestResult;
139137

140138
// first get all the declared symbols
141139
var definitions = await GetTypeSymbolsAsync(compilation, project, publicOnly: referenceMapResult == null);
@@ -144,7 +142,6 @@ public async Task<Project> InternalizeAsync(Project project)
144142
if (referenceMapResult != null)
145143
{
146144
// ProviderReferenceMapAnalyzer replaces Roslyn reference-map construction for generated code.
147-
// It still uses Roslyn-discovered roots for custom/shared code before this point.
148145
symbolsToInternalize = GetSymbolsByName(definitions.DeclaredSymbols, referenceMapResult.InternalizeCandidates).ToArray();
149146
symbolsToPublicize = GetSymbolsByName(definitions.DeclaredSymbols, referenceMapResult.PublicizeCandidates).ToArray();
150147
}
@@ -310,7 +307,7 @@ public async Task<Project> RemoveAsync(Project project)
310307
var definitions = await GetTypeSymbolsAsync(compilation, project, false);
311308
IEnumerable<INamedTypeSymbol> symbolsToRemove;
312309
HashSet<INamedTypeSymbol> referencedSet;
313-
if (ProviderReferenceMapAnalyzer.LatestResult is { } referenceMapResult && referenceMapResult.ProjectId == project.Id)
310+
if (ProviderReferenceMapAnalyzer.LatestResult is { } referenceMapResult)
314311
{
315312
// The remove pass uses the same precomputed hybrid map to avoid scanning all generated
316313
// documents with Roslyn while preserving custom-code references as roots.

0 commit comments

Comments
 (0)