Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Composition;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.VisualStudio.LanguageServices.ProjectSystem;
Expand All @@ -18,6 +19,13 @@ namespace Microsoft.CodeAnalysis.ExternalAccess.FSharp;
internal interface IFSharpWorkspaceProjectContextFactory
{
IFSharpWorkspaceProjectContext CreateProjectContext(string filePath, string uniqueName);

/// <summary>
/// Creates the project context without blocking. <see cref="CreateProjectContext(string, string)"/> waits for
/// this through the main thread, so a caller that runs while the main thread is blocked — inside the Peek
/// broker's <c>JoinableTaskFactory.Run</c>, say — deadlocks on it.
/// </summary>
Task<IFSharpWorkspaceProjectContext> CreateProjectContextAsync(string filePath, string uniqueName, CancellationToken cancellationToken);
Comment on lines +23 to +28
}

internal interface IFSharpWorkspaceProjectContext : IDisposable
Expand Down Expand Up @@ -54,6 +62,9 @@ public FSharpWorkspaceProjectContextFactory(IWorkspaceProjectContextFactory fact
IFSharpWorkspaceProjectContext IFSharpWorkspaceProjectContextFactory.CreateProjectContext(string filePath, string uniqueName)
=> CreateProjectContext(filePath, uniqueName);

async Task<IFSharpWorkspaceProjectContext> IFSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string filePath, string uniqueName, CancellationToken cancellationToken)
=> await CreateProjectContextAsync(filePath, uniqueName, cancellationToken).ConfigureAwait(false);

public FSharpWorkspaceProjectContext CreateProjectContext(string filePath, string uniqueName)
=> CreateProjectContext(
projectUniqueName: uniqueName,
Expand All @@ -62,14 +73,27 @@ public FSharpWorkspaceProjectContext CreateProjectContext(string filePath, strin
hierarchy: null,
binOutputPath: null);

public Task<FSharpWorkspaceProjectContext> CreateProjectContextAsync(string filePath, string uniqueName, CancellationToken cancellationToken)
=> CreateProjectContextAsync(
projectUniqueName: uniqueName,
projectFilePath: filePath,
projectGuid: Guid.NewGuid(),
hierarchy: null,
binOutputPath: null,
cancellationToken);

public FSharpWorkspaceProjectContext CreateProjectContext(string projectUniqueName, string projectFilePath, Guid projectGuid, object? hierarchy, string? binOutputPath)
=> new(_threadingContext.JoinableTaskFactory.Run(() => _factory.CreateProjectContextAsync(
=> _threadingContext.JoinableTaskFactory.Run(() => CreateProjectContextAsync(
projectUniqueName, projectFilePath, projectGuid, hierarchy, binOutputPath, CancellationToken.None));

public async Task<FSharpWorkspaceProjectContext> CreateProjectContextAsync(string projectUniqueName, string projectFilePath, Guid projectGuid, object? hierarchy, string? binOutputPath, CancellationToken cancellationToken)
=> new(await _factory.CreateProjectContextAsync(
id: projectGuid,
uniqueName: projectUniqueName,
languageName: LanguageNames.FSharp,
data: new FSharpEvaluationData(projectFilePath, binOutputPath),
hostObject: hierarchy,
CancellationToken.None)));
cancellationToken).ConfigureAwait(false));

private sealed class FSharpEvaluationData : EvaluationData
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext.SetPr
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContext(string! filePath, string! uniqueName) -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContext(string! projectUniqueName, string! projectFilePath, System.Guid projectGuid, object? hierarchy, string? binOutputPath) -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string! filePath, string! uniqueName, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!>!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string! projectUniqueName, string! projectFilePath, System.Guid projectGuid, object? hierarchy, string? binOutputPath, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!>!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.FSharpWorkspaceProjectContextFactory(Microsoft.VisualStudio.LanguageServices.ProjectSystem.IWorkspaceProjectContextFactory! factory, Microsoft.CodeAnalysis.Editor.Shared.Utilities.IThreadingContext! threadingContext) -> void
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext.AddMetadataReference(string! referencePath) -> void
Expand All @@ -158,6 +160,7 @@ Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext.SetM
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext.SetProjectReferences(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext!>! projRefs) -> void
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContextFactory
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContextFactory.CreateProjectContext(string! filePath, string! uniqueName) -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string! filePath, string! uniqueName, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext!>!
Microsoft.CodeAnalysis.ExternalAccess.Unified.Apex.ApexAsynchronousOperationListenerProviderAccessor
Microsoft.CodeAnalysis.ExternalAccess.Unified.Apex.ApexAsynchronousOperationListenerProviderAccessor.ApexAsynchronousOperationListenerProviderAccessor(Microsoft.CodeAnalysis.Shared.TestHooks.AsynchronousOperationListenerProvider! implementation, Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace? workspace) -> void
Microsoft.CodeAnalysis.ExternalAccess.Unified.Apex.ApexAsynchronousOperationListenerProviderAccessor.WaitAllAsync(string![]? featureNames = null, System.Action? eventProcessingAction = null, System.TimeSpan? timeout = null) -> System.Threading.Tasks.Task!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,8 @@ Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext.SetPr
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContext(string! filePath, string! uniqueName) -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContext(string! projectUniqueName, string! projectFilePath, System.Guid projectGuid, object? hierarchy, string? binOutputPath) -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string! filePath, string! uniqueName, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!>!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string! projectUniqueName, string! projectFilePath, System.Guid projectGuid, object? hierarchy, string? binOutputPath, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContext!>!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpWorkspaceProjectContextFactory.FSharpWorkspaceProjectContextFactory(Microsoft.VisualStudio.LanguageServices.ProjectSystem.IWorkspaceProjectContextFactory! factory, Microsoft.CodeAnalysis.Editor.Shared.Utilities.IThreadingContext! threadingContext) -> void
Microsoft.CodeAnalysis.ExternalAccess.FSharp.GoToDefinition.IFSharpFindDefinitionService
Microsoft.CodeAnalysis.ExternalAccess.FSharp.GoToDefinition.IFSharpFindDefinitionService.FindDefinitionsAsync(Microsoft.CodeAnalysis.Document! document, int position, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation.FSharpNavigableItem!>>!
Expand All @@ -289,6 +291,7 @@ Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext.SetM
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext.SetProjectReferences(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext!>! projRefs) -> void
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContextFactory
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContextFactory.CreateProjectContext(string! filePath, string! uniqueName) -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContextFactory.CreateProjectContextAsync(string! filePath, string! uniqueName, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.ExternalAccess.FSharp.IFSharpWorkspaceProjectContext!>!
Microsoft.CodeAnalysis.ExternalAccess.FSharp.InlineHints.FSharpInlineHint
Microsoft.CodeAnalysis.ExternalAccess.FSharp.InlineHints.FSharpInlineHint.FSharpInlineHint() -> void
Microsoft.CodeAnalysis.ExternalAccess.FSharp.InlineHints.FSharpInlineHint.FSharpInlineHint(Microsoft.CodeAnalysis.Text.TextSpan span, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.TaggedText> displayParts, System.Func<Microsoft.CodeAnalysis.Document!, System.Threading.CancellationToken, System.Threading.Tasks.Task<System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.TaggedText>>!>? getDescriptionAsync = null) -> void
Expand Down
Loading