private SolutionState( BranchId branchId, int workspaceVersion, SolutionServices solutionServices, SolutionInfo solutionInfo, IEnumerable<ProjectId> projectIds, ImmutableDictionary<ProjectId, ProjectState> idToProjectStateMap, ImmutableDictionary<ProjectId, CompilationTracker> projectIdToTrackerMap, ImmutableDictionary<string, ImmutableArray<DocumentId>> linkedFilesMap, ProjectDependencyGraph dependencyGraph, Lazy<VersionStamp> lazyLatestProjectVersion) { _branchId = branchId; _workspaceVersion = workspaceVersion; _solutionServices = solutionServices; _solutionInfo = solutionInfo; _projectIds = projectIds.ToImmutableReadOnlyListOrEmpty(); _projectIdToProjectStateMap = idToProjectStateMap; _projectIdToTrackerMap = projectIdToTrackerMap; _linkedFilesMap = linkedFilesMap; _dependencyGraph = dependencyGraph; _lazyLatestProjectVersion = lazyLatestProjectVersion; // when solution state is changed, we re-calcuate its checksum _lazyChecksums = new AsyncLazy<SolutionStateChecksums>(ComputeChecksumsAsync, cacheResult: true); CheckInvariants(); }
private SolutionState( BranchId branchId, int workspaceVersion, SolutionServices solutionServices, SolutionId id, string filePath, IEnumerable<ProjectId> projectIds, ImmutableDictionary<ProjectId, ProjectState> idToProjectStateMap, ImmutableDictionary<ProjectId, CompilationTracker> projectIdToTrackerMap, ImmutableDictionary<string, ImmutableArray<DocumentId>> linkedFilesMap, ProjectDependencyGraph dependencyGraph, VersionStamp version, Lazy<VersionStamp> lazyLatestProjectVersion) { _branchId = branchId; _workspaceVersion = workspaceVersion; _id = id; _filePath = filePath; _solutionServices = solutionServices; _projectIds = projectIds.ToImmutableReadOnlyListOrEmpty(); _projectIdToProjectStateMap = idToProjectStateMap; _projectIdToTrackerMap = projectIdToTrackerMap; _linkedFilesMap = linkedFilesMap; _dependencyGraph = dependencyGraph; _version = version; _lazyLatestProjectVersion = lazyLatestProjectVersion; CheckInvariants(); }
private Solution( BranchId branchId, int workspaceVersion, SolutionServices solutionServices, SolutionId id, string filePath, ImmutableList<ProjectId> projectIds, ImmutableDictionary<ProjectId, ProjectState> idToProjectStateMap, ImmutableDictionary<ProjectId, CompilationTracker> projectIdToTrackerMap, ProjectDependencyGraph dependencyGraph, VersionStamp version, Lazy<VersionStamp> lazyLatestProjectVersion) { this.branchId = branchId; this.workspaceVersion = workspaceVersion; this.id = id; this.filePath = filePath; this.solutionServices = solutionServices; this.projectIds = projectIds; this.projectIdToProjectStateMap = idToProjectStateMap; this.projectIdToTrackerMap = projectIdToTrackerMap; this.dependencyGraph = dependencyGraph; this.projectIdToProjectMap = ImmutableHashMap<ProjectId, Project>.Empty; this.version = version; this.lazyLatestProjectVersion = lazyLatestProjectVersion; CheckInvariants(); }
internal Workspace(IWorkspaceServiceProvider workspaceServicesProvider) { this.primaryBranchId = BranchId.GetNextId(); this.workspaceServicesProvider = workspaceServicesProvider; // queue used for sending events var workspaceTaskSchedulerFactory = workspaceServicesProvider.GetService <IWorkspaceTaskSchedulerFactory>(); this.taskQueue = workspaceTaskSchedulerFactory.CreateTaskQueue(); // initialize with empty solution this.latestSolution = CreateSolution(SolutionId.CreateNewId()); }
/// <summary> /// Constructs a new workspace instance. /// </summary> /// <param name="host">The <see cref="HostServices"/> this workspace uses</param> /// <param name="workspaceKind">A string that can be used to identify the kind of workspace. Usually this matches the name of the class.</param> protected Workspace(HostServices host, string workspaceKind) { this.primaryBranchId = BranchId.GetNextId(); this.workspaceKind = workspaceKind; this.services = host.CreateWorkspaceServices(this); // queue used for sending events var workspaceTaskSchedulerFactory = this.services.GetService <IWorkspaceTaskSchedulerFactory>(); this.taskQueue = workspaceTaskSchedulerFactory.CreateTaskQueue(); // initialize with empty solution this.latestSolution = CreateSolution(SolutionId.CreateNewId()); }
private static bool TryGetReferenceFromBranch( BranchId branchId, ProjectReference projectReference, Compilation finalOrDeclarationCompilation, VersionStamp version, out MetadataReference reference) { // get map for the branch var mapFromBranch = s_cache.GetValue(branchId, s_createReferenceSetMap); // if we have one, return it if (mapFromBranch.TryGetValue(projectReference.ProjectId, out var referenceSet) && (version == VersionStamp.Default || referenceSet.Version == version)) { // record it to snapshot based cache. var newReferenceSet = s_snapshotCache.GetValue(finalOrDeclarationCompilation, _ => referenceSet); reference = newReferenceSet.GetMetadataReference(finalOrDeclarationCompilation, projectReference.Aliases, projectReference.EmbedInteropTypes); return(true); } reference = null; return(false); }
private SolutionState CreatePrimarySolution( BranchId branchId, int workspaceVersion, SolutionServices services) { if (branchId == _branchId && workspaceVersion == _workspaceVersion && services == _solutionServices) { return this; } return new SolutionState( branchId, workspaceVersion, services, _id, _filePath, _projectIds, _projectIdToProjectStateMap, _projectIdToTrackerMap, _linkedFilesMap, _dependencyGraph, _version, _lazyLatestProjectVersion); }
private static bool TryGetReferenceFromBranch( BranchId branchId, ProjectReference projectReference, Compilation finalOrDeclarationCompilation, VersionStamp version, out MetadataReference reference) { // get map for the branch var mapFromBranch = s_cache.GetValue(branchId, s_createReferenceSetMap); // if we have one, return it if (mapFromBranch.TryGetValue(projectReference.ProjectId, out var referenceSet) && (version == VersionStamp.Default || referenceSet.Version == version)) { // record it to snapshot based cache. var newReferenceSet = s_snapshotCache.GetValue(finalOrDeclarationCompilation, _ => referenceSet); reference = newReferenceSet.GetMetadataReference(finalOrDeclarationCompilation, projectReference.Aliases, projectReference.EmbedInteropTypes); return true; } reference = null; return false; }
private Solution CreatePrimarySolution( BranchId branchId, int workspaceVersion, SolutionServices services) { if (branchId == this.branchId && workspaceVersion == this.workspaceVersion && services == this.solutionServices) { return this; } return new Solution( branchId, workspaceVersion, services, this.id, this.filePath, this.projectIds, this.projectIdToProjectStateMap, this.projectIdToTrackerMap, this.linkedFilesMap, this.dependencyGraph, this.version, this.lazyLatestProjectVersion); }