using System;
using System.Collections.Generic;
using System.Diagnostics;
using Semmle.BuildAnalyser;
using Semmle.Util.Logging;
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)
{
var progressMonitor = new ProgressMonitor(logger);
buildAnalysis = new BuildAnalysis(options, progressMonitor);
References = buildAnalysis.ReferenceFiles;
Extraction = new Extraction(options.SrcDir);
Extraction.Sources.AddRange(options.SolutionFile is null ? buildAnalysis.AllSourceFiles : buildAnalysis.ProjectSourceFiles);
}
public IEnumerable References { get; }
///
/// The extraction configuration.
///
public Extraction Extraction { get; }
private readonly BuildAnalysis buildAnalysis;
public void Dispose()
{
buildAnalysis.Dispose();
}
};
public class Program
{
public static int Main(string[] args)
{
CSharp.Extractor.SetInvariantCulture();
var options = Options.Create(args);
// options.CIL = true; // To do: Enable this
if (options.Help)
{
Options.ShowHelp(System.Console.Out);
return 0;
}
if (options.Errors)
return 1;
return (int)Extractor.Run(options);
}
}
}