File: EditAndContinue\Contracts\ContractWrappers.cs
Web Access
Project: src\src\EditorFeatures\Core\Microsoft.CodeAnalysis.EditorFeatures.csproj (Microsoft.CodeAnalysis.EditorFeatures)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Collections.Immutable;
using Microsoft.VisualStudio.Debugger.Contracts.EditAndContinue;
using Microsoft.VisualStudio.Debugger.Contracts.HotReload;
using InternalContracts = Microsoft.CodeAnalysis.Contracts.EditAndContinue;
 
namespace Microsoft.CodeAnalysis.EditAndContinue;
 
internal static class ContractWrappers
{
    public static InternalContracts.ManagedActiveStatementDebugInfo ToContract(this ManagedActiveStatementDebugInfo info)
        => new(ToContract(info.ActiveInstruction), info.DocumentName, ToContract(info.SourceSpan), (InternalContracts.ActiveStatementFlags)info.Flags);
 
    public static InternalContracts.ManagedInstructionId ToContract(this ManagedInstructionId id)
        => new(ToContract(id.Method), id.ILOffset);
 
    public static InternalContracts.ManagedMethodId ToContract(this ManagedMethodId id)
        => new(id.Module, id.Token, id.Version);
 
    public static InternalContracts.SourceSpan ToContract(this SourceSpan id)
        => new(id.StartLine, id.StartColumn, id.EndLine, id.EndColumn);
 
    public static InternalContracts.ManagedHotReloadAvailability ToContract(this ManagedHotReloadAvailability value)
        => new((InternalContracts.ManagedHotReloadAvailabilityStatus)value.Status, value.LocalizedMessage);
 
    public static ManagedHotReloadUpdate FromContract(this InternalContracts.ManagedHotReloadUpdate update)
        => new(
            module: update.Module,
            moduleName: update.ModuleName,
            ilDelta: update.ILDelta,
            metadataDelta: update.MetadataDelta,
            pdbDelta: update.PdbDelta,
            updatedTypes: update.UpdatedTypes,
            requiredCapabilities: update.RequiredCapabilities,
            updatedMethods: update.UpdatedMethods,
            sequencePoints: update.SequencePoints.SelectAsArray(FromContract),
            activeStatements: update.ActiveStatements.SelectAsArray(FromContract),
            exceptionRegions: update.ExceptionRegions.SelectAsArray(FromContract));
 
    public static ManagedHotReloadUpdates FromContract(this InternalContracts.ManagedHotReloadUpdates updates)
        => new(updates.Updates.FromContract(), updates.Diagnostics.FromContract());
 
    public static ImmutableArray<ManagedHotReloadUpdate> FromContract(this ImmutableArray<InternalContracts.ManagedHotReloadUpdate> diagnostics)
        => diagnostics.SelectAsArray(FromContract);
 
    public static SequencePointUpdates FromContract(this InternalContracts.SequencePointUpdates updates)
        => new(updates.FileName, updates.LineUpdates.SelectAsArray(FromContract));
 
    public static SourceLineUpdate FromContract(this InternalContracts.SourceLineUpdate update)
        => new(update.OldLine, update.NewLine);
 
    public static ManagedActiveStatementUpdate FromContract(this InternalContracts.ManagedActiveStatementUpdate update)
        => new(FromContract(update.Method), update.ILOffset, FromContract(update.NewSpan));
 
    public static ManagedModuleMethodId FromContract(this InternalContracts.ManagedModuleMethodId update)
        => new(update.Token, update.Version);
 
    public static SourceSpan FromContract(this InternalContracts.SourceSpan id)
        => new(id.StartLine, id.StartColumn, id.EndLine, id.EndColumn);
 
    public static ManagedExceptionRegionUpdate FromContract(this InternalContracts.ManagedExceptionRegionUpdate update)
        => new(FromContract(update.Method), update.Delta, FromContract(update.NewSpan));
 
    public static ImmutableArray<ManagedHotReloadDiagnostic> FromContract(this ImmutableArray<InternalContracts.ManagedHotReloadDiagnostic> diagnostics)
        => diagnostics.SelectAsArray(FromContract);
 
    public static ManagedHotReloadDiagnostic FromContract(this InternalContracts.ManagedHotReloadDiagnostic diagnostic)
        => new(diagnostic.Id, diagnostic.Message, (ManagedHotReloadDiagnosticSeverity)diagnostic.Severity, diagnostic.FilePath, FromContract(diagnostic.Span));
}