private static void RegisterKnownWorkspaceResolvers( DScriptWorkspaceResolverFactory workspaceFactory, GlobalConstants constants, ModuleRegistry sharedModuleRegistry, IFrontEndStatistics statistics, MsBuildFrontEnd msBuildFrontEnd, NinjaFrontEnd ninjaFrontEnd, CMakeFrontEnd cmakeFrontend) { workspaceFactory.RegisterResolver( KnownResolverKind.SourceResolverKind, () => new WorkspaceSourceModuleResolver(constants, sharedModuleRegistry, statistics, logger: null)); workspaceFactory.RegisterResolver( KnownResolverKind.DScriptResolverKind, () => new WorkspaceSourceModuleResolver(constants, sharedModuleRegistry, statistics, logger: null)); workspaceFactory.RegisterResolver( KnownResolverKind.DefaultSourceResolverKind, () => new WorkspaceDefaultSourceModuleResolver(constants, sharedModuleRegistry, statistics, logger: null)); workspaceFactory.RegisterResolver( KnownResolverKind.NugetResolverKind, () => new WorkspaceNugetModuleResolver(constants, sharedModuleRegistry, statistics)); workspaceFactory.RegisterResolver( KnownResolverKind.DownloadResolverKind, () => new DownloadWorkspaceResolver(constants, sharedModuleRegistry)); workspaceFactory.RegisterResolver( KnownResolverKind.MsBuildResolverKind, () => new MsBuildWorkspaceResolver(constants, sharedModuleRegistry, statistics, msBuildFrontEnd)); workspaceFactory.RegisterResolver( KnownResolverKind.NinjaResolverKind, () => new NinjaWorkspaceResolver(constants, sharedModuleRegistry, statistics, ninjaFrontEnd)); workspaceFactory.RegisterResolver( KnownResolverKind.CMakeResolverKind, () => new CMakeWorkspaceResolver(constants, sharedModuleRegistry, statistics, cmakeFrontend, ninjaFrontEnd)); }
/// <inheritdoc/> public CMakeWorkspaceResolver( GlobalConstants constants, ModuleRegistry sharedModuleRegistry, IFrontEndStatistics statistics, CMakeFrontEnd frontEnd, NinjaFrontEnd ninjaFrontEnd) : base(constants, sharedModuleRegistry, statistics, logger: null) { Name = nameof(CMakeWorkspaceResolver); m_frontEnd = frontEnd; m_relativePathToCMakeRunner = RelativePath.Create(frontEnd.Context.StringTable, CMakeRunnerRelativePath); EmbeddedNinjaWorkspaceResolver = new NinjaWorkspaceResolver(constants, sharedModuleRegistry, statistics, ninjaFrontEnd); m_embeddedResolverSettings = new Lazy <NinjaResolverSettings>(CreateEmbeddedResolverSettings); }
private static IFrontEndController TryCreateFrontEndController( FrontEndFactory frontEndFactory, IDecorator <EvaluationResult> decorator, ICommandLineConfiguration configuration, SymbolTable symbolTable, LoggingContext loggingContext, PerformanceCollector collector, bool collectMemoryAsSoonAsPossible, IFrontEndStatistics statistics) { var workspaceResolverFactory = new DScriptWorkspaceResolverFactory(); Contract.Requires(frontEndFactory != null && !frontEndFactory.IsSealed); // Statistic should be global for all front-ends, not per an instance. var frontEndStatistics = statistics ?? new FrontEndStatistics(); var globalConstants = new GlobalConstants(symbolTable); var sharedModuleRegistry = new ModuleRegistry(); // Note, that the following code is absolutely critical for detecting that front-end related objects // are freed successfully after evaluation. // ModuleRegistry was picked intentionally because it holds vast amount of front-end data. FrontEndControllerMemoryObserver.CaptureFrontEndReference(sharedModuleRegistry); frontEndFactory.SetConfigurationProcessor( new ConfigurationProcessor(globalConstants, sharedModuleRegistry, logger: null)); var msBuildFrontEnd = new MsBuildFrontEnd( globalConstants, sharedModuleRegistry, frontEndStatistics); var ninjaFrontEnd = new NinjaFrontEnd( globalConstants, sharedModuleRegistry, frontEndStatistics); var cmakeFrontEnd = new CMakeFrontEnd( globalConstants, sharedModuleRegistry, frontEndStatistics); // TODO: Workspace resolvers and frontends are registered in separate factories. Consider // adding a main coordinator/registry RegisterKnownWorkspaceResolvers( workspaceResolverFactory, globalConstants, sharedModuleRegistry, frontEndStatistics, msBuildFrontEnd, ninjaFrontEnd, cmakeFrontEnd); frontEndFactory.AddFrontEnd(new DScriptFrontEnd( globalConstants, sharedModuleRegistry, frontEndStatistics, evaluationDecorator: decorator)); frontEndFactory.AddFrontEnd(new NugetFrontEnd( globalConstants, sharedModuleRegistry, frontEndStatistics, evaluationDecorator: decorator)); frontEndFactory.AddFrontEnd(new DownloadFrontEnd( globalConstants, sharedModuleRegistry)); frontEndFactory.AddFrontEnd(msBuildFrontEnd); frontEndFactory.AddFrontEnd(ninjaFrontEnd); frontEndFactory.AddFrontEnd(cmakeFrontEnd); if (!frontEndFactory.TrySeal(loggingContext)) { return(null); } return(new FrontEndHostController(frontEndFactory, workspaceResolverFactory, frontEndStatistics: frontEndStatistics, collector: collector, collectMemoryAsSoonAsPossible: collectMemoryAsSoonAsPossible)); }