Skip to content

Commit f6b5e28

Browse files
Fix copilot layering (#77713)
2 parents 935c5fd + 577f0ea commit f6b5e28

File tree

10 files changed

+26
-31
lines changed

10 files changed

+26
-31
lines changed

src/EditorFeatures/Test2/CodeFixes/CodeFixServiceTests.vb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ Imports Microsoft.CodeAnalysis.UnitTests
2525
Imports Roslyn.Utilities
2626

2727
Namespace Microsoft.CodeAnalysis.Editor.Implementation.CodeFixes.UnitTests
28-
2928
<[UseExportProvider]>
3029
<Trait(Traits.Feature, Traits.Features.Diagnostics)>
3130
Public Class CodeFixServiceTests
@@ -380,8 +379,8 @@ Namespace Microsoft.CodeAnalysis.Editor.Implementation.CodeFixes.UnitTests
380379
Return Task.FromResult(False)
381380
End Function
382381

383-
Public Function ImplementNotImplementedExceptionsAsync(document As Document, methodOrProperties As ImmutableDictionary(Of CodeAnalysis.CSharp.Syntax.MemberDeclarationSyntax, ImmutableArray(Of ReferencedSymbol)), cancellationToken As CancellationToken) As Task(Of ImmutableDictionary(Of CodeAnalysis.CSharp.Syntax.MemberDeclarationSyntax, ImplementationDetails)) Implements ICopilotCodeAnalysisService.ImplementNotImplementedExceptionsAsync
384-
Return Task.FromResult(ImmutableDictionary(Of CodeAnalysis.CSharp.Syntax.MemberDeclarationSyntax, ImplementationDetails).Empty)
382+
Public Function ImplementNotImplementedExceptionsAsync(document As Document, methodOrProperties As ImmutableDictionary(Of SyntaxNode, ImmutableArray(Of ReferencedSymbol)), cancellationToken As CancellationToken) As Task(Of ImmutableDictionary(Of SyntaxNode, ImplementationDetails)) Implements ICopilotCodeAnalysisService.ImplementNotImplementedExceptionsAsync
383+
Return Task.FromResult(ImmutableDictionary(Of SyntaxNode, ImplementationDetails).Empty)
385384
End Function
386385
End Class
387386
End Class

src/Features/CSharp/Portable/Copilot/CSharpImplementNotImplementedExceptionFixProvider.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ protected override async Task FixAllAsync(
7979
Document document, ImmutableArray<Diagnostic> diagnostics,
8080
SyntaxEditor editor, CancellationToken cancellationToken)
8181
{
82-
var memberReferencesBuilder = ImmutableDictionary.CreateBuilder<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>>();
82+
var memberReferencesBuilder = ImmutableDictionary.CreateBuilder<SyntaxNode, ImmutableArray<ReferencedSymbol>>();
8383
var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
8484

8585
foreach (var diagnostic in diagnostics)
@@ -102,8 +102,10 @@ protected override async Task FixAllAsync(
102102
var copilotService = document.GetRequiredLanguageService<ICopilotCodeAnalysisService>();
103103
var memberImplementationDetails = await copilotService.ImplementNotImplementedExceptionsAsync(document, memberReferencesBuilder.ToImmutable(), cancellationToken).ConfigureAwait(false);
104104

105-
foreach (var methodOrProperty in memberReferencesBuilder.Keys)
105+
foreach (var node in memberReferencesBuilder.Keys)
106106
{
107+
var methodOrProperty = (MemberDeclarationSyntax)node;
108+
107109
Contract.ThrowIfFalse(memberImplementationDetails.TryGetValue(methodOrProperty, out var implementationDetails));
108110

109111
var replacement = implementationDetails.ReplacementNode;

src/Features/CSharpTest/Copilot/CSharpImplementNotImplementedExceptionFixProviderTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public interface IMathService
173173
}
174174
.WithMockCopilotService(copilotService =>
175175
{
176-
copilotService.SetupFixAll = (Document document, ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> memberReferences, CancellationToken cancellationToken) =>
176+
copilotService.SetupFixAll = (Document document, ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> memberReferences, CancellationToken cancellationToken) =>
177177
{
178178
// Create a map of method/property implementations
179179
var implementationMap = new Dictionary<string, string>
@@ -192,7 +192,7 @@ public interface IMathService
192192
};
193193

194194
// Process each member reference and create implementation details
195-
var resultsBuilder = ImmutableDictionary.CreateBuilder<MemberDeclarationSyntax, ImplementationDetails>();
195+
var resultsBuilder = ImmutableDictionary.CreateBuilder<SyntaxNode, ImplementationDetails>();
196196
foreach (var memberReference in memberReferences)
197197
{
198198
var memberNode = memberReference.Key;
@@ -634,7 +634,7 @@ public TestCopilotCodeAnalysisService()
634634
{
635635
}
636636

637-
public Func<Document, ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>>, CancellationToken, ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>>? SetupFixAll { get; internal set; }
637+
public Func<Document, ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>>, CancellationToken, ImmutableDictionary<SyntaxNode, ImplementationDetails>>? SetupFixAll { get; internal set; }
638638

639639
public ImplementationDetails? PrepareUsingSingleFakeResult { get; internal set; }
640640

@@ -662,9 +662,9 @@ public Task StartRefinementSessionAsync(Document oldDocument, Document newDocume
662662
Task<(Dictionary<string, string>? responseDictionary, bool isQuotaExceeded)> ICopilotCodeAnalysisService.GetDocumentationCommentAsync(DocumentationCommentProposal proposal, CancellationToken cancellationToken)
663663
=> throw new NotImplementedException();
664664

665-
public Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>> ImplementNotImplementedExceptionsAsync(
665+
public Task<ImmutableDictionary<SyntaxNode, ImplementationDetails>> ImplementNotImplementedExceptionsAsync(
666666
Document document,
667-
ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties,
667+
ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties,
668668
CancellationToken cancellationToken)
669669
{
670670
if (SetupFixAll != null)
@@ -677,14 +677,14 @@ public Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>>
677677
return Task.FromResult(CreateSingleNodeResult(methodOrProperties, PrepareUsingSingleFakeResult));
678678
}
679679

680-
return Task.FromResult(ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>.Empty);
680+
return Task.FromResult(ImmutableDictionary<SyntaxNode, ImplementationDetails>.Empty);
681681
}
682682

683-
private static ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails> CreateSingleNodeResult(
684-
ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties,
683+
private static ImmutableDictionary<SyntaxNode, ImplementationDetails> CreateSingleNodeResult(
684+
ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties,
685685
ImplementationDetails implementationDetails)
686686
{
687-
var resultsBuilder = ImmutableDictionary.CreateBuilder<MemberDeclarationSyntax, ImplementationDetails>();
687+
var resultsBuilder = ImmutableDictionary.CreateBuilder<SyntaxNode, ImplementationDetails>();
688688
foreach (var methodOrProperty in methodOrProperties)
689689
{
690690
resultsBuilder.Add(methodOrProperty.Key, implementationDetails);

src/Features/Core/Portable/Copilot/ICopilotCodeAnalysisService.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.Collections.Immutable;
77
using System.Threading;
88
using System.Threading.Tasks;
9-
using Microsoft.CodeAnalysis.CSharp.Syntax;
109
using Microsoft.CodeAnalysis.DocumentationComments;
1110
using Microsoft.CodeAnalysis.FindSymbols;
1211
using Microsoft.CodeAnalysis.Host;
@@ -98,8 +97,8 @@ internal interface ICopilotCodeAnalysisService : ILanguageService
9897
/// Implements methods or properties containing <see cref="System.NotImplementedException"/> throws in the given <paramref name="document"/>.
9998
/// </summary>
10099
/// <returns>A dictionary mapping the original syntax nodes to their implementation details.</returns>
101-
Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>> ImplementNotImplementedExceptionsAsync(
100+
Task<ImmutableDictionary<SyntaxNode, ImplementationDetails>> ImplementNotImplementedExceptionsAsync(
102101
Document document,
103-
ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties,
102+
ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties,
104103
CancellationToken cancellationToken);
105104
}

src/Features/Core/Portable/Microsoft.CodeAnalysis.Features.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
</PropertyGroup>
1717
<ItemGroup Label="Project References">
1818
<ProjectReference Include="..\..\..\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj" />
19-
<ProjectReference Include="..\..\..\Compilers\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.csproj" />
2019
<ProjectReference Include="..\..\..\Scripting\Core\Microsoft.CodeAnalysis.Scripting.csproj" Aliases="Scripting,global" />
2120
<ProjectReference Include="..\..\..\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj" />
2221
</ItemGroup>

src/Features/ExternalAccess/Copilot/GenerateImplementation/IExternalCSharpCopilotGenerateImplementationService.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
using System.Collections.Immutable;
66
using System.Threading;
77
using System.Threading.Tasks;
8-
using Microsoft.CodeAnalysis.CSharp.Syntax;
98
using Microsoft.CodeAnalysis.ExternalAccess.Copilot.GenerateImplementation;
109
using Microsoft.CodeAnalysis.FindSymbols;
1110

1211
namespace Microsoft.CodeAnalysis.ExternalAccess.Copilot;
1312

1413
internal interface IExternalCSharpCopilotGenerateImplementationService
1514
{
16-
Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetailsWrapper>> ImplementNotImplementedExceptionsAsync(
15+
Task<ImmutableDictionary<SyntaxNode, ImplementationDetailsWrapper>> ImplementNotImplementedExceptionsAsync(
1716
Document document,
18-
ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties,
17+
ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties,
1918
CancellationToken cancellationToken);
2019
}

src/Features/ExternalAccess/Copilot/Internal/Analyzer/AbstractCopilotCodeAnalysisService.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using System.Threading;
1010
using System.Threading.Tasks;
1111
using Microsoft.CodeAnalysis.Copilot;
12-
using Microsoft.CodeAnalysis.CSharp.Syntax;
1312
using Microsoft.CodeAnalysis.Diagnostics;
1413
using Microsoft.CodeAnalysis.DocumentationComments;
1514
using Microsoft.CodeAnalysis.FindSymbols;
@@ -46,7 +45,7 @@ internal abstract class AbstractCopilotCodeAnalysisService(IDiagnosticsRefresher
4645
protected abstract Task<(string responseString, bool isQuotaExceeded)> GetOnTheFlyDocsResponseCoreAsync(string prompt, CancellationToken cancellationToken);
4746
protected abstract Task<bool> IsFileExcludedCoreAsync(string filePath, CancellationToken cancellationToken);
4847
protected abstract Task<(Dictionary<string, string>? responseDictionary, bool isQuotaExceeded)> GetDocumentationCommentCoreAsync(DocumentationCommentProposal proposal, CancellationToken cancellationToken);
49-
protected abstract Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>> ImplementNotImplementedExceptionsCoreAsync(Document document, ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties, CancellationToken cancellationToken);
48+
protected abstract Task<ImmutableDictionary<SyntaxNode, ImplementationDetails>> ImplementNotImplementedExceptionsCoreAsync(Document document, ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties, CancellationToken cancellationToken);
5049
protected abstract bool IsImplementNotImplementedExceptionsAvailableCore();
5150

5251
public Task<bool> IsAvailableAsync(CancellationToken cancellationToken)
@@ -214,9 +213,9 @@ public async Task<bool> IsImplementNotImplementedExceptionsAvailableAsync(Cancel
214213
&& IsImplementNotImplementedExceptionsAvailableCore();
215214
}
216215

217-
public async Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>> ImplementNotImplementedExceptionsAsync(
216+
public async Task<ImmutableDictionary<SyntaxNode, ImplementationDetails>> ImplementNotImplementedExceptionsAsync(
218217
Document document,
219-
ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties,
218+
ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties,
220219
CancellationToken cancellationToken)
221220
{
222221
return await ImplementNotImplementedExceptionsCoreAsync(document, methodOrProperties, cancellationToken).ConfigureAwait(false);

src/Features/ExternalAccess/Copilot/Internal/Analyzer/CSharp/CSharpCopilotCodeAnalysisService.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using System.Threading;
1010
using System.Threading.Tasks;
1111
using Microsoft.CodeAnalysis.Copilot;
12-
using Microsoft.CodeAnalysis.CSharp.Syntax;
1312
using Microsoft.CodeAnalysis.Diagnostics;
1413
using Microsoft.CodeAnalysis.DocumentationComments;
1514
using Microsoft.CodeAnalysis.ErrorReporting;
@@ -157,15 +156,15 @@ protected override bool IsImplementNotImplementedExceptionsAvailableCore()
157156
return GenerateImplementationService is not null;
158157
}
159158

160-
protected override async Task<ImmutableDictionary<MemberDeclarationSyntax, ImplementationDetails>> ImplementNotImplementedExceptionsCoreAsync(
159+
protected override async Task<ImmutableDictionary<SyntaxNode, ImplementationDetails>> ImplementNotImplementedExceptionsCoreAsync(
161160
Document document,
162-
ImmutableDictionary<MemberDeclarationSyntax, ImmutableArray<ReferencedSymbol>> methodOrProperties,
161+
ImmutableDictionary<SyntaxNode, ImmutableArray<ReferencedSymbol>> methodOrProperties,
163162
CancellationToken cancellationToken)
164163
{
165164
Contract.ThrowIfNull(GenerateImplementationService);
166165
var nodeToWrappers = await GenerateImplementationService.ImplementNotImplementedExceptionsAsync(document, methodOrProperties, cancellationToken).ConfigureAwait(false);
167166

168-
var resultBuilder = ImmutableDictionary.CreateBuilder<MemberDeclarationSyntax, ImplementationDetails>();
167+
var resultBuilder = ImmutableDictionary.CreateBuilder<SyntaxNode, ImplementationDetails>();
169168
foreach (var nodeToWrapper in nodeToWrappers)
170169
{
171170
resultBuilder.Add(

src/Features/ExternalAccess/Copilot/InternalAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotCodeAnalysis
4747
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotCodeAnalysisService.StartRefinementSessionAsync(Microsoft.CodeAnalysis.Document! oldDocument, Microsoft.CodeAnalysis.Document! newDocument, Microsoft.CodeAnalysis.Diagnostic? primaryDiagnostic, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
4848
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotGenerateDocumentationService
4949
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotGenerateDocumentationService.GetDocumentationCommentAsync(Microsoft.CodeAnalysis.ExternalAccess.Copilot.CopilotDocumentationCommentProposalWrapper! proposal, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<(System.Collections.Generic.Dictionary<string!, string!>? responseDictionary, bool isQuotaExceeded)>!
50+
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotGenerateImplementationService.ImplementNotImplementedExceptionsAsync(Microsoft.CodeAnalysis.Document! document, System.Collections.Immutable.ImmutableDictionary<Microsoft.CodeAnalysis.SyntaxNode!, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.FindSymbols.ReferencedSymbol!>>! methodOrProperties, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<System.Collections.Immutable.ImmutableDictionary<Microsoft.CodeAnalysis.SyntaxNode!, Microsoft.CodeAnalysis.ExternalAccess.Copilot.GenerateImplementation.ImplementationDetailsWrapper!>!>!
5051
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpOnTheFlyDocsService
5152
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpOnTheFlyDocsService.GetOnTheFlyDocsPromptAsync(Microsoft.CodeAnalysis.ExternalAccess.Copilot.CopilotOnTheFlyDocsInfoWrapper! onTheFlyDocsInfo, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<string!>!
5253
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpOnTheFlyDocsService.GetOnTheFlyDocsResponseAsync(string! prompt, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<(string! responseString, bool isQuotaExceeded)>!
5354
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotGenerateImplementationService
54-
Microsoft.CodeAnalysis.ExternalAccess.Copilot.IExternalCSharpCopilotGenerateImplementationService.ImplementNotImplementedExceptionsAsync(Microsoft.CodeAnalysis.Document! document, System.Collections.Immutable.ImmutableDictionary<Microsoft.CodeAnalysis.CSharp.Syntax.MemberDeclarationSyntax!, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.FindSymbols.ReferencedSymbol!>>! methodOrProperties, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<System.Collections.Immutable.ImmutableDictionary<Microsoft.CodeAnalysis.CSharp.Syntax.MemberDeclarationSyntax!, Microsoft.CodeAnalysis.ExternalAccess.Copilot.GenerateImplementation.ImplementationDetailsWrapper!>!>!
5555
Microsoft.CodeAnalysis.ExternalAccess.Copilot.RelatedDocuments.ICopilotRelatedDocumentsService
5656
Microsoft.CodeAnalysis.ExternalAccess.Copilot.RelatedDocuments.ICopilotRelatedDocumentsService.GetRelatedDocumentIdsAsync(Microsoft.CodeAnalysis.Document! document, int position, System.Func<System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.DocumentId!>, System.Threading.CancellationToken, System.Threading.Tasks.ValueTask>! callbackAsync, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.ValueTask
5757
Microsoft.CodeAnalysis.ExternalAccess.Copilot.SemanticSearch.ISemanticSearchCopilotServiceImpl

src/Features/ExternalAccess/Copilot/Microsoft.CodeAnalysis.ExternalAccess.Copilot.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
</ItemGroup>
2727

2828
<ItemGroup>
29-
<ProjectReference Include="..\..\..\Compilers\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.csproj" />
3029
<ProjectReference Include="..\..\Core\Portable\Microsoft.CodeAnalysis.Features.csproj" />
3130
</ItemGroup>
3231

0 commit comments

Comments
 (0)