diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 44925dc1d68..13f8cc4e2a5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -157,7 +157,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return frameworkLocations; } - private void RestoreNugetPackages(List allNonBinaryFiles, List allProjects, List allSolutions, HashSet dllPaths) + private void RestoreNugetPackages(List allNonBinaryFiles, IEnumerable allProjects, IEnumerable allSolutions, HashSet dllPaths) { try { @@ -719,7 +719,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Returns a list of projects that are up to date with respect to restore. /// /// A list of paths to solution files. - private IEnumerable RestoreSolutions(List solutions, out IEnumerable assets) + private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) { var successCount = 0; var assetFiles = new List(); @@ -841,21 +841,13 @@ namespace Semmle.Extraction.CSharp.DependencyFetching if (!res.Success) { logger.LogInfo($"Failed to restore nuget package {package}"); - } - else - { - lock (sync) - { - successCount++; - } + return; } } - else + + lock (sync) { - lock (sync) - { - successCount++; - } + successCount++; } }); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs index 89970a221a1..db0f20bc8cb 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs @@ -107,7 +107,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Restore all files in a specified package. /// /// The package file. - private bool RestoreNugetPackage(string package) + private bool TryRestoreNugetPackage(string package) { logger.LogInfo($"Restoring file {package}..."); @@ -157,17 +157,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// public int InstallPackages() { - var success = 0; - foreach (var package in packageFiles) - { - var result = RestoreNugetPackage(package.FullName); - if (result) - { - success++; - } - } - - return success; + return packageFiles.Count(package => TryRestoreNugetPackage(package.FullName)); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index 829591818d5..115a8d418b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; +using Semmle.Extraction.CSharp.DependencyFetching; using Semmle.Util; using Semmle.Util.Logging; @@ -12,7 +13,6 @@ namespace Semmle.Extraction.CSharp.Standalone { public static class Extractor { - private static IEnumerable GetResolvedReferencesStandalone(IEnumerable referencePaths, BlockingCollection references) { return referencePaths.Select(path => () => @@ -138,10 +138,9 @@ namespace Semmle.Extraction.CSharp.Standalone using var logger = new ConsoleLogger(options.Verbosity, logThreadId: true); logger.Log(Severity.Info, "Extracting C# in buildless mode"); - using var a = new Analysis(logger, options); - var sourceFileCount = a.Extraction.Sources.Count; + using var dependencyManager = new DependencyManager(options.SrcDir, options.Dependencies, logger); - if (sourceFileCount == 0) + if (!dependencyManager.AllSourceFiles.Any()) { logger.Log(Severity.Error, "No source files found"); return ExitCode.Errors; @@ -152,7 +151,7 @@ namespace Semmle.Extraction.CSharp.Standalone logger.Log(Severity.Info, ""); logger.Log(Severity.Info, "Extracting..."); ExtractStandalone( - new ExtractionInput(a.Extraction.Sources, a.References, a.CompilationInfos), + new ExtractionInput(dependencyManager.AllSourceFiles, dependencyManager.ReferenceFiles, dependencyManager.CompilationInfos), new ExtractionProgress(logger), fileLogger, options); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs index 8437896c807..fc13b774f4f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs @@ -5,51 +5,6 @@ using Semmle.Extraction.CSharp.DependencyFetching; namespace Semmle.Extraction.CSharp.Standalone { - /// - /// One independent run of the extractor. - /// - internal class Extraction - { - public Extraction(string directory) - { - Directory = directory; - } - - public string Directory { get; } - public List Sources { get; } = new List(); - }; - - /// - /// Searches for source/references and creates separate extractions. - /// - internal sealed class Analysis : IDisposable - { - public Analysis(ILogger logger, Options options) - { - dependencyManager = new DependencyManager(options.SrcDir, options.Dependencies, logger); - References = dependencyManager.ReferenceFiles; - Extraction = new Extraction(options.SrcDir); - Extraction.Sources.AddRange(dependencyManager.AllSourceFiles); - CompilationInfos = dependencyManager.CompilationInfos; - } - - public IEnumerable References { get; } - - /// - /// The extraction configuration. - /// - public Extraction Extraction { get; } - - public IEnumerable<(string, string)> CompilationInfos { get; } - - private readonly DependencyManager dependencyManager; - - public void Dispose() - { - dependencyManager.Dispose(); - } - }; - public class Program { public static int Main(string[] args) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 51a63cef5f5..c3ed0217559 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -21,7 +21,7 @@ namespace Semmle.Extraction.CSharp protected CSharpCompilation? compilation; protected CommonOptions? options; private protected Entities.Compilation? compilationEntity; - private TrapWriter? compilationTrapFile; + private IDisposable? compilationTrapFile; private readonly object progressMutex = new object();