Skip to content

Commit c7d6f9f

Browse files
authored
Fix assembly layering for .NET SDK (#57386)
* Fix assembly layering for .NET SDK * Feedback * Fix
1 parent fe503c4 commit c7d6f9f

File tree

74 files changed

+1404
-84
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+1404
-84
lines changed

src/EditorFeatures/CSharpTest/EditAndContinue/ActiveStatementTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
using System;
88
using Microsoft.CodeAnalysis.CSharp.Syntax;
99
using Microsoft.CodeAnalysis.EditAndContinue;
10+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
1011
using Microsoft.CodeAnalysis.EditAndContinue.UnitTests;
11-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
1212
using Microsoft.CodeAnalysis.Test.Utilities;
1313
using Roslyn.Test.Utilities;
1414
using Xunit;

src/EditorFeatures/CSharpTest/EditAndContinue/ActiveStatementTrackingServiceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
using System.Threading;
1010
using System.Threading.Tasks;
1111
using Microsoft.CodeAnalysis.EditAndContinue;
12+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
1213
using Microsoft.CodeAnalysis.EditAndContinue.UnitTests;
1314
using Microsoft.CodeAnalysis.Editor.Implementation.EditAndContinue;
1415
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
1516
using Microsoft.CodeAnalysis.Test.Utilities;
1617
using Microsoft.CodeAnalysis.Text;
17-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
1818
using Roslyn.Test.Utilities;
1919
using Roslyn.Utilities;
2020
using Xunit;

src/EditorFeatures/CSharpTest/EditAndContinue/CSharpEditAndContinueAnalyzerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
1515
using Microsoft.CodeAnalysis.Differencing;
1616
using Microsoft.CodeAnalysis.EditAndContinue;
17+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
1718
using Microsoft.CodeAnalysis.EditAndContinue.UnitTests;
1819
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
1920
using Microsoft.CodeAnalysis.Test.Utilities;
2021
using Microsoft.CodeAnalysis.Text;
21-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
2222
using Roslyn.Test.Utilities;
2323
using Roslyn.Utilities;
2424
using Xunit;

src/EditorFeatures/CSharpTest/EditAndContinue/Helpers/EditAndContinueValidation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
using System.Collections.Immutable;
77
using Microsoft.CodeAnalysis.Differencing;
88
using Microsoft.CodeAnalysis.EditAndContinue;
9+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
910
using Microsoft.CodeAnalysis.EditAndContinue.UnitTests;
10-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
1111
using Roslyn.Test.Utilities;
1212
using Xunit;
1313

src/EditorFeatures/CSharpTest/EditAndContinue/Helpers/EditingTestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
using Microsoft.CodeAnalysis.CSharp.UnitTests;
1111
using Microsoft.CodeAnalysis.Differencing;
1212
using Microsoft.CodeAnalysis.EditAndContinue;
13+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
1314
using Microsoft.CodeAnalysis.EditAndContinue.UnitTests;
1415
using Microsoft.CodeAnalysis.Emit;
1516
using Microsoft.CodeAnalysis.PooledObjects;
1617
using Microsoft.CodeAnalysis.Text;
17-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
1818
using Roslyn.Utilities;
1919
using Xunit;
2020

src/EditorFeatures/CSharpTest/EditAndContinue/LineEditTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
using System.Linq;
1010
using Microsoft.CodeAnalysis.CSharp.UnitTests;
1111
using Microsoft.CodeAnalysis.EditAndContinue;
12+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
1213
using Microsoft.CodeAnalysis.EditAndContinue.UnitTests;
1314
using Microsoft.CodeAnalysis.Emit;
1415
using Microsoft.CodeAnalysis.Test.Utilities;
15-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
1616
using Roslyn.Test.Utilities;
1717
using Xunit;
1818

src/EditorFeatures/Core/Implementation/EditAndContinue/ActiveStatementTrackingSpan.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// See the LICENSE file in the project root for more information.
44

55
using Microsoft.CodeAnalysis.EditAndContinue;
6+
using Microsoft.CodeAnalysis.EditAndContinue.Contracts;
67
using Microsoft.CodeAnalysis.Text.Shared.Extensions;
7-
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
88
using Microsoft.VisualStudio.Text;
99

1010
namespace Microsoft.CodeAnalysis.Editor.Implementation.EditAndContinue
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using System.Collections.Immutable;
6+
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
7+
using Microsoft.VisualStudio.Debugger.Contracts.HotReload;
8+
9+
using Contracts = Microsoft.CodeAnalysis.EditAndContinue.Contracts;
10+
11+
namespace Microsoft.CodeAnalysis.Editor.Implementation.EditAndContinue
12+
{
13+
internal static class ContractWrappers
14+
{
15+
public static Contracts.ManagedActiveStatementDebugInfo ToContract(this ManagedActiveStatementDebugInfo info)
16+
=> new(ToContract(info.ActiveInstruction), info.DocumentName, ToContract(info.SourceSpan), (Contracts.ActiveStatementFlags)info.Flags);
17+
18+
public static Contracts.ManagedInstructionId ToContract(this ManagedInstructionId id)
19+
=> new(ToContract(id.Method), id.ILOffset);
20+
21+
public static Contracts.ManagedMethodId ToContract(this ManagedMethodId id)
22+
=> new(id.Module, id.Token, id.Version);
23+
24+
public static Contracts.SourceSpan ToContract(this SourceSpan id)
25+
=> new(id.StartLine, id.StartColumn, id.EndLine, id.EndColumn);
26+
27+
public static Contracts.ManagedHotReloadAvailability ToContract(this ManagedHotReloadAvailability value)
28+
=> new((Contracts.ManagedHotReloadAvailabilityStatus)value.Status, value.LocalizedMessage);
29+
30+
public static ManagedModuleUpdates FromContract(this Contracts.ManagedModuleUpdates updates)
31+
=> new((ManagedModuleUpdateStatus)updates.Status, updates.Updates.SelectAsArray(FromContract));
32+
33+
public static ManagedModuleUpdate FromContract(this Contracts.ManagedModuleUpdate update)
34+
=> new(
35+
update.Module,
36+
update.ILDelta,
37+
update.MetadataDelta,
38+
update.PdbDelta,
39+
update.SequencePoints.SelectAsArray(FromContract),
40+
update.UpdatedMethods,
41+
update.UpdatedTypes,
42+
update.ActiveStatements.SelectAsArray(FromContract),
43+
update.ExceptionRegions.SelectAsArray(FromContract));
44+
45+
public static SequencePointUpdates FromContract(this Contracts.SequencePointUpdates updates)
46+
=> new(updates.FileName, updates.LineUpdates.SelectAsArray(FromContract));
47+
48+
public static SourceLineUpdate FromContract(this Contracts.SourceLineUpdate update)
49+
=> new(update.OldLine, update.NewLine);
50+
51+
public static ManagedActiveStatementUpdate FromContract(this Contracts.ManagedActiveStatementUpdate update)
52+
=> new(FromContract(update.Method), update.ILOffset, FromContract(update.NewSpan));
53+
54+
public static ManagedModuleMethodId FromContract(this Contracts.ManagedModuleMethodId update)
55+
=> new(update.Token, update.Version);
56+
57+
public static SourceSpan FromContract(this Contracts.SourceSpan id)
58+
=> new(id.StartLine, id.StartColumn, id.EndLine, id.EndColumn);
59+
60+
public static ManagedExceptionRegionUpdate FromContract(this Contracts.ManagedExceptionRegionUpdate update)
61+
=> new(FromContract(update.Method), update.Delta, FromContract(update.NewSpan));
62+
63+
public static ImmutableArray<ManagedHotReloadDiagnostic> FromContract(this ImmutableArray<Contracts.ManagedHotReloadDiagnostic> diagnostics)
64+
=> diagnostics.SelectAsArray(FromContract);
65+
66+
public static ManagedHotReloadDiagnostic FromContract(this Contracts.ManagedHotReloadDiagnostic diagnostic)
67+
=> new(diagnostic.Id, diagnostic.Message, (ManagedHotReloadDiagnosticSeverity)diagnostic.Severity, diagnostic.FilePath, FromContract(diagnostic.Span));
68+
}
69+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using System;
6+
using System.Collections.Immutable;
7+
using System.Threading;
8+
using System.Threading.Tasks;
9+
using Microsoft.VisualStudio.Debugger.Contracts.HotReload;
10+
11+
using Contracts = Microsoft.CodeAnalysis.EditAndContinue.Contracts;
12+
13+
namespace Microsoft.CodeAnalysis.Editor.Implementation.EditAndContinue
14+
{
15+
internal sealed class ManagedHotReloadServiceImpl : Contracts.IManagedHotReloadService
16+
{
17+
private readonly IManagedHotReloadService _service;
18+
19+
public ManagedHotReloadServiceImpl(IManagedHotReloadService service)
20+
=> _service = service;
21+
22+
public async ValueTask<ImmutableArray<Contracts.ManagedActiveStatementDebugInfo>> GetActiveStatementsAsync(CancellationToken cancellation)
23+
=> (await _service.GetActiveStatementsAsync(cancellation).ConfigureAwait(false)).SelectAsArray(a => a.ToContract());
24+
25+
public async ValueTask<Contracts.ManagedHotReloadAvailability> GetAvailabilityAsync(Guid module, CancellationToken cancellation)
26+
=> (await _service.GetAvailabilityAsync(module, cancellation).ConfigureAwait(false)).ToContract();
27+
28+
public ValueTask<ImmutableArray<string>> GetCapabilitiesAsync(CancellationToken cancellation)
29+
=> _service.GetCapabilitiesAsync(cancellation);
30+
31+
public ValueTask PrepareModuleForUpdateAsync(Guid module, CancellationToken cancellation)
32+
=> _service.PrepareModuleForUpdateAsync(module, cancellation);
33+
}
34+
}

src/EditorFeatures/Core/Implementation/EditAndContinue/EditAndContinueLanguageService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public async ValueTask StartSessionAsync(CancellationToken cancellationToken)
100100

101101
_debuggingSession = await proxy.StartDebuggingSessionAsync(
102102
solution,
103-
_debuggerService.Value,
103+
new ManagedHotReloadServiceImpl(_debuggerService.Value),
104104
captureMatchingDocuments: openedDocumentIds,
105105
captureAllMatchingDocuments: false,
106106
reportDiagnostics: true,
@@ -278,7 +278,7 @@ public async ValueTask<ManagedModuleUpdates> GetEditAndContinueUpdatesAsync(Canc
278278
var activeStatementSpanProvider = GetActiveStatementSpanProvider(solution);
279279
var (updates, _, _, _) = await GetDebuggingSession().EmitSolutionUpdateAsync(solution, activeStatementSpanProvider, _diagnosticService, _diagnosticUpdateSource, cancellationToken).ConfigureAwait(false);
280280
_pendingUpdatedSolution = solution;
281-
return updates;
281+
return updates.FromContract();
282282
}
283283

284284
public async ValueTask<ManagedHotReloadUpdates> GetHotReloadUpdatesAsync(CancellationToken cancellationToken)
@@ -297,7 +297,7 @@ public async ValueTask<ManagedHotReloadUpdates> GetHotReloadUpdatesAsync(Cancell
297297

298298
var diagnostics = await EmitSolutionUpdateResults.GetHotReloadDiagnosticsAsync(solution, diagnosticData, rudeEdits, syntaxError, cancellationToken).ConfigureAwait(false);
299299

300-
return new ManagedHotReloadUpdates(updates, diagnostics);
300+
return new ManagedHotReloadUpdates(updates, diagnostics.FromContract());
301301
}
302302

303303
public async ValueTask<SourceSpan?> GetCurrentActiveStatementPositionAsync(ManagedInstructionId instruction, CancellationToken cancellationToken)
@@ -310,8 +310,8 @@ public async ValueTask<ManagedHotReloadUpdates> GetHotReloadUpdatesAsync(Cancell
310310
var activeStatementSpanProvider = new ActiveStatementSpanProvider((documentId, filePath, cancellationToken) =>
311311
activeStatementTrackingService.GetSpansAsync(solution, documentId, filePath, cancellationToken));
312312

313-
var span = await GetDebuggingSession().GetCurrentActiveStatementPositionAsync(solution, activeStatementSpanProvider, instruction, cancellationToken).ConfigureAwait(false);
314-
return span?.ToSourceSpan();
313+
var span = await GetDebuggingSession().GetCurrentActiveStatementPositionAsync(solution, activeStatementSpanProvider, instruction.ToContract(), cancellationToken).ConfigureAwait(false);
314+
return span?.ToSourceSpan().FromContract();
315315
}
316316
catch (Exception e) when (FatalError.ReportAndCatchUnlessCanceled(e, cancellationToken))
317317
{
@@ -324,7 +324,7 @@ public async ValueTask<ManagedHotReloadUpdates> GetHotReloadUpdatesAsync(Cancell
324324
try
325325
{
326326
var solution = GetCurrentCompileTimeSolution();
327-
return await GetDebuggingSession().IsActiveStatementInExceptionRegionAsync(solution, instruction, cancellationToken).ConfigureAwait(false);
327+
return await GetDebuggingSession().IsActiveStatementInExceptionRegionAsync(solution, instruction.ToContract(), cancellationToken).ConfigureAwait(false);
328328
}
329329
catch (Exception e) when (FatalError.ReportAndCatchUnlessCanceled(e, cancellationToken))
330330
{

0 commit comments

Comments
 (0)