/// <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); }
/// <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); }