File: ScriptSourceResolver.cs
Web Access
Project: src\src\Scripting\Core\Microsoft.CodeAnalysis.Scripting.csproj (Microsoft.CodeAnalysis.Scripting)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
 
namespace Microsoft.CodeAnalysis.Scripting
{
    using static ParameterValidationHelpers;
 
    public sealed class ScriptSourceResolver : SourceFileResolver, IEquatable<ScriptSourceResolver>
    {
        public static new ScriptSourceResolver Default { get; } = new ScriptSourceResolver(ImmutableArray<string>.Empty, null);
 
        private ScriptSourceResolver(ImmutableArray<string> sourcePaths, string baseDirectory)
            : base(sourcePaths, baseDirectory)
        {
        }
 
        public ScriptSourceResolver WithSearchPaths(params string[] searchPaths)
            => WithSearchPaths(searchPaths.AsImmutableOrEmpty());
 
        public ScriptSourceResolver WithSearchPaths(IEnumerable<string> searchPaths)
            => WithSearchPaths(searchPaths.AsImmutableOrEmpty());
 
        public ScriptSourceResolver WithSearchPaths(ImmutableArray<string> searchPaths)
        {
            if (SearchPaths == searchPaths)
            {
                return this;
            }
 
            return new ScriptSourceResolver(ToImmutableArrayChecked(searchPaths, nameof(searchPaths)), BaseDirectory);
        }
 
        public ScriptSourceResolver WithBaseDirectory(string baseDirectory)
        {
            if (BaseDirectory == baseDirectory)
            {
                return this;
            }
 
            // absolute path check is done in the base class
 
            return new ScriptSourceResolver(SearchPaths, baseDirectory);
        }
 
        public bool Equals(ScriptSourceResolver other) => base.Equals(other);
        public override int GetHashCode() => base.GetHashCode();
        public override bool Equals(object obj) => base.Equals(obj);
    }
}