// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Linq; namespace Microsoft.AspNetCore.Razor.Language { internal class DefaultRazorProjectEngineBuilder : RazorProjectEngineBuilder { public DefaultRazorProjectEngineBuilder(bool designTime, RazorProjectFileSystem fileSystem) { if (fileSystem == null) { throw new ArgumentNullException(nameof(fileSystem)); } DesignTime = designTime; FileSystem = fileSystem; Features = new List(); Phases = new List(); } public override RazorProjectFileSystem FileSystem { get; } public override ICollection Features { get; } public override IList Phases { get; } public override bool DesignTime { get; } public override RazorProjectEngine Build() { RazorEngine engine = null; if (DesignTime) { engine = RazorEngine.CreateDesignTimeEmpty(ConfigureRazorEngine); } else { engine = RazorEngine.CreateEmpty(ConfigureRazorEngine); } var projectEngineFeatures = Features.OfType().ToArray(); var projectEngine = new DefaultRazorProjectEngine(engine, FileSystem, projectEngineFeatures); return projectEngine; } private void ConfigureRazorEngine(IRazorEngineBuilder engineBuilder) { var engineFeatures = Features.OfType(); foreach (var engineFeature in engineFeatures) { engineBuilder.Features.Add(engineFeature); } for (var i = 0; i < Phases.Count; i++) { engineBuilder.Phases.Add(Phases[i]); } } } }