From 26e03061b867f47303ba4056e3d3662ba7a6e51c Mon Sep 17 00:00:00 2001 From: Petr Pokorny Date: Tue, 14 Mar 2023 11:46:56 +0100 Subject: [PATCH 1/2] Fix missing reference --- src/Compiler/Service/IncrementalBuild.fs | 18 ++++++++++++------ .../src/FSharp.Editor/Common/RoslynHelpers.fs | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Compiler/Service/IncrementalBuild.fs b/src/Compiler/Service/IncrementalBuild.fs index 57562813eb..34da949769 100644 --- a/src/Compiler/Service/IncrementalBuild.fs +++ b/src/Compiler/Service/IncrementalBuild.fs @@ -1057,11 +1057,17 @@ module IncrementalBuilderStateHelpers = let rec createFinalizeBoundModelGraphNode (initialState: IncrementalBuilderInitialState) (boundModels: ImmutableArray>.Builder) = GraphNode(node { use _ = Activity.start "GetCheckResultsAndImplementationsForProject" [|Activity.Tags.project, initialState.outfile|] - // Compute last bound model then get all the evaluated models. + + // Compute last bound model then get all the evaluated models*. let! _ = boundModels[boundModels.Count - 1].GetOrComputeValue() - let boundModels = - boundModels.ToImmutable() - |> ImmutableArray.map (fun x -> x.TryPeekValue().Value) + let! boundModels = + boundModels + |> Seq.map (fun x -> + match x.TryPeekValue() with + | ValueSome v -> node.Return v + // *Evaluating the last bound model doesn't always guarantee that all the other bound models are evaluated. + | _ -> node.ReturnFrom(x.GetOrComputeValue())) + |> NodeCode.Sequential let! result = FinalizeTypeCheckTask @@ -1070,7 +1076,7 @@ module IncrementalBuilderStateHelpers = initialState.enablePartialTypeChecking initialState.assemblyName initialState.outfile - boundModels + (boundModels.ToImmutableArray()) let result = (result, DateTime.UtcNow) return result }) @@ -1606,7 +1612,7 @@ type IncrementalBuilder(initialState: IncrementalBuilderInitialState, state: Inc let fileName = r.resolvedPath yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) -> cache.GetFileTimeStamp fileName)) - for pr in projectReferences do + for pr in projectReferences do yield Choice2Of2 pr, (fun (cache: TimeStampCache) -> cache.GetProjectReferenceTimeStamp pr) ] // Start importing diff --git a/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs b/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs index f2cb16164a..2df8f930b9 100644 --- a/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs +++ b/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs @@ -139,7 +139,7 @@ module internal RoslynHelpers = | :? OperationCanceledException -> tcs.TrySetCanceled(cancellationToken) |> ignore | exn -> - System.Diagnostics.Trace.WriteLine("Visual F# Tools: exception swallowed and not passed to Roslyn: {0}", exn.Message) + System.Diagnostics.Trace.TraceError("Visual F# Tools: exception swallowed and not passed to Roslyn: {0}", exn) let res = Unchecked.defaultof<_> tcs.TrySetResult(res) |> ignore ), From e6151831b6f31375da1fdb3c5b1ca6cef0a9c434 Mon Sep 17 00:00:00 2001 From: 0101 <0101@innit.cz> Date: Tue, 14 Mar 2023 12:38:12 +0100 Subject: [PATCH 2/2] undo whitespace change --- src/Compiler/Service/IncrementalBuild.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/Service/IncrementalBuild.fs b/src/Compiler/Service/IncrementalBuild.fs index 4faa55c820..ec3fcca386 100644 --- a/src/Compiler/Service/IncrementalBuild.fs +++ b/src/Compiler/Service/IncrementalBuild.fs @@ -1615,7 +1615,7 @@ type IncrementalBuilder(initialState: IncrementalBuilderInitialState, state: Inc let fileName = r.resolvedPath yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) -> cache.GetFileTimeStamp fileName)) - for pr in projectReferences do + for pr in projectReferences do yield Choice2Of2 pr, (fun (cache: TimeStampCache) -> cache.GetProjectReferenceTimeStamp pr) ] // Start importing