Beispiel #1
0
        /// <nodoc/>
        public virtual async Task <bool> InitResolverAsync(IResolverSettings resolverSettings, object workspaceResolver)
        {
            Contract.Requires(resolverSettings != null);

            Contract.Assert(m_resolverState == State.Created);
            var sourceResolverSettings = resolverSettings as IDScriptResolverSettings;

            Contract.Assert(sourceResolverSettings != null, "Wrong type for resolver");

            Name            = resolverSettings.Name;
            m_resolverState = State.ResolverInitializing;

            m_workspaceSourceModuleResolver = workspaceResolver as WorkspaceSourceModuleResolver;
            Contract.Assert(m_workspaceSourceModuleResolver != null, "Workspace module resolver is expected to be of source type");

            var moduleResolutionResult = await m_workspaceSourceModuleResolver.ResolveModuleAsyncIfNeeded();

            if (!moduleResolutionResult.Succeeded)
            {
                // Error should have been reported.
                return(false);
            }

            m_packageDirectories = moduleResolutionResult.PackageDirectories;
            m_packages           = moduleResolutionResult.Packages;

            m_owningModules = moduleResolutionResult.Packages.ToDictionary(p => p.Value.ModuleId, p => p.Value);

            m_resolverState = State.ResolverInitialized;

            return(true);
        }
Beispiel #2
0
        /// <inheritdoc/>
        public bool TryCreateWorkspaceResolver(IResolverSettings resolverSettings, out IWorkspaceModuleResolver workspaceResolver)
        {
            workspaceResolver = m_workspaceResolverCache.GetOrAdd(
                resolverSettings,
                (settings) =>
            {
                IWorkspaceModuleResolver resolver;
                if (string.Equals(resolverSettings.Kind, KnownResolverKind.DefaultSourceResolverKind, System.StringComparison.Ordinal))
                {
                    resolver = new WorkspaceDefaultSourceModuleResolver(Context.StringTable, FrontEndStatistics, logger: m_customLogger);
                }
                else
                {
                    resolver = new WorkspaceSourceModuleResolver(Context.StringTable, FrontEndStatistics, logger: m_customLogger);
                }

                if (resolver.TryInitialize(FrontEndHost, Context, Configuration, settings))
                {
                    return(resolver);
                }

                return(null);
            });

            return(workspaceResolver != null);
        }