IronRuby.Runtime.Loader.ResolveFile C# (CSharp) Method

ResolveFile() private method

Appends extensions if applicable.
private ResolveFile ( string path, string extension, bool appendExtensions, string knownExtensions ) : ResolvedFile
path string
extension string
appendExtensions bool
knownExtensions string
return ResolvedFile
        private ResolvedFile ResolveFile(string/*!*/ path, string/*!*/ extension, bool appendExtensions, string[]/*!*/ knownExtensions) {
            Debug.Assert(RubyUtils.GetExtension(path) == extension);

            string expandedPath = RubyUtils.ExpandPath(_context.Platform, path);

            // MRI doesn't load file w/o .rb extension:
            if (IsKnownExtension(extension, knownExtensions)) {
                return GetSourceUnit(path, expandedPath, extension, false);
            } 
            
            if (_LibraryExtensions.IndexOf(extension, DlrConfiguration.FileExtensionComparer) != -1) {
                if (Platform.FileExists(expandedPath)) {
                    return new ResolvedFile(expandedPath, null);
                }
            } else if (!appendExtensions) {
                return GetSourceUnit(path, expandedPath, extension, false);
            }

            if (appendExtensions) {
                List<string> matchingExtensions = GetExtensionsOfExistingFiles(expandedPath, knownExtensions);

                if (matchingExtensions.Count == 1) {
                    return GetSourceUnit(path + matchingExtensions[0], expandedPath + matchingExtensions[0], matchingExtensions[0], true);
                } else if (matchingExtensions.Count > 1) {
                    Exception e = new AmbiguousFileNameException(expandedPath + matchingExtensions[0], expandedPath + matchingExtensions[1]);
                    throw RubyExceptions.CreateLoadError(e);
                }

                foreach (string libExtension in _LibraryExtensions) {
                    if (Platform.FileExists(expandedPath + libExtension)) {
                        return new ResolvedFile(expandedPath + libExtension, libExtension);
                    }
                }
            }

            return null;
        }