From 6719e517eba47e058152ed0731990594b5a060ca Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 23 Sep 2022 13:03:59 +0100 Subject: [PATCH 1/3] don't start process to determine system assemblies --- src/Compiler/Driver/CompilerConfig.fs | 11 +++++------ src/Compiler/Driver/FxResolver.fs | 15 ++++----------- src/Compiler/Driver/FxResolver.fsi | 6 ++++-- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/Compiler/Driver/CompilerConfig.fs b/src/Compiler/Driver/CompilerConfig.fs index 774cb954ca9..8e68e666be9 100644 --- a/src/Compiler/Driver/CompilerConfig.fs +++ b/src/Compiler/Driver/CompilerConfig.fs @@ -1396,14 +1396,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = /// 'framework' reference set that is potentially shared across multiple compilations. member tcConfig.IsSystemAssembly(fileName: string) = try + let dirName = Path.GetDirectoryName fileName + let baseName = FileSystemUtils.fileNameWithoutExtension fileName FileSystem.FileExistsShim fileName && ((tcConfig.GetTargetFrameworkDirectories() - |> List.exists (fun clrRoot -> clrRoot = Path.GetDirectoryName fileName)) - || (tcConfig - .FxResolver - .GetSystemAssemblies() - .Contains(FileSystemUtils.fileNameWithoutExtension fileName)) - || tcConfig.FxResolver.IsInReferenceAssemblyPackDirectory fileName) + |> List.contains dirName) + || FxResolver.GetSystemAssemblies().Contains baseName + || FxResolver.IsReferenceAssemblyPackDirectoryApprox dirName) with _ -> false diff --git a/src/Compiler/Driver/FxResolver.fs b/src/Compiler/Driver/FxResolver.fs index 2fa595ee15b..d88172eea3f 100644 --- a/src/Compiler/Driver/FxResolver.fs +++ b/src/Compiler/Driver/FxResolver.fs @@ -611,7 +611,7 @@ type internal FxResolver // A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared // resources between projects in the compiler services. Also all assemblies where well-known system types exist // referenced from TcGlobals must be listed here. - let systemAssemblies = + static let systemAssemblies = HashSet [ // NOTE: duplicates are ok in this list @@ -789,17 +789,10 @@ type internal FxResolver "WindowsBase" ] - member _.GetSystemAssemblies() = systemAssemblies + static member GetSystemAssemblies() = systemAssemblies - member _.IsInReferenceAssemblyPackDirectory fileName = - fxlock.AcquireLock(fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - - match tryGetNetCoreRefsPackDirectoryRoot () |> replayWarnings with - | _, Some root -> - let path = Path.GetDirectoryName(fileName) - path.StartsWith(root, StringComparison.OrdinalIgnoreCase) - | _ -> false) + static member IsReferenceAssemblyPackDirectoryApprox (dirName: string) = + dirName.Contains "Microsoft.NETCore.App.Ref" member _.TryGetSdkDir() = fxlock.AcquireLock(fun fxtok -> diff --git a/src/Compiler/Driver/FxResolver.fsi b/src/Compiler/Driver/FxResolver.fsi index 2bca0a75d8c..d740d2fc497 100644 --- a/src/Compiler/Driver/FxResolver.fsi +++ b/src/Compiler/Driver/FxResolver.fsi @@ -28,12 +28,14 @@ type internal FxResolver = member GetFrameworkRefsPackDirectory: unit -> string option - member GetSystemAssemblies: unit -> HashSet + static member GetSystemAssemblies: unit -> HashSet /// Gets the selected target framework moniker, e.g netcore3.0, net472, and the running rid of the current machine member GetTfmAndRid: unit -> string * string - member IsInReferenceAssemblyPackDirectory: fileName: string -> bool + /// Determines if an assembly is in the core set of assemblies with high likelihood of + /// being shared amongst a set of common scripting references + static member IsReferenceAssemblyPackDirectoryApprox: dirName: string -> bool member TryGetDesiredDotNetSdkVersionForDirectory: unit -> Result From dd9012238b6290615dfe23464eb9341445d5ea60 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 23 Sep 2022 14:28:27 +0100 Subject: [PATCH 2/3] code format --- src/Compiler/Driver/CompilerConfig.fs | 4 ++-- src/Compiler/Driver/FxResolver.fs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Compiler/Driver/CompilerConfig.fs b/src/Compiler/Driver/CompilerConfig.fs index 8e68e666be9..f2951299126 100644 --- a/src/Compiler/Driver/CompilerConfig.fs +++ b/src/Compiler/Driver/CompilerConfig.fs @@ -1398,9 +1398,9 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = try let dirName = Path.GetDirectoryName fileName let baseName = FileSystemUtils.fileNameWithoutExtension fileName + FileSystem.FileExistsShim fileName - && ((tcConfig.GetTargetFrameworkDirectories() - |> List.contains dirName) + && ((tcConfig.GetTargetFrameworkDirectories() |> List.contains dirName) || FxResolver.GetSystemAssemblies().Contains baseName || FxResolver.IsReferenceAssemblyPackDirectoryApprox dirName) with _ -> diff --git a/src/Compiler/Driver/FxResolver.fs b/src/Compiler/Driver/FxResolver.fs index d88172eea3f..ce2474a7085 100644 --- a/src/Compiler/Driver/FxResolver.fs +++ b/src/Compiler/Driver/FxResolver.fs @@ -791,7 +791,7 @@ type internal FxResolver static member GetSystemAssemblies() = systemAssemblies - static member IsReferenceAssemblyPackDirectoryApprox (dirName: string) = + static member IsReferenceAssemblyPackDirectoryApprox(dirName: string) = dirName.Contains "Microsoft.NETCore.App.Ref" member _.TryGetSdkDir() = From 7cfa0c4d5b3b3347726ffba18d7987fe4cb12957 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 23 Sep 2022 17:18:45 +0100 Subject: [PATCH 3/3] fix build break --- tests/service/SyntaxTreeTests/SynIdentTests.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/service/SyntaxTreeTests/SynIdentTests.fs b/tests/service/SyntaxTreeTests/SynIdentTests.fs index 887910e1448..aa16871a609 100644 --- a/tests/service/SyntaxTreeTests/SynIdentTests.fs +++ b/tests/service/SyntaxTreeTests/SynIdentTests.fs @@ -16,7 +16,7 @@ A. |> getParseResults match ast with - | ParsedInput.ImplFile (ParsedImplFileInput(modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = + | ParsedInput.ImplFile (ParsedImplFileInput(contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Expr(expr = SynExpr.LongIdent (longDotId = lid)) ]) ])) -> Assert.AreEqual(1, lid.IdentsWithTrivia.Length) | _ -> Assert.Fail $"Could not get valid AST, got {ast}"