private ProjectState( ProjectState older, ProjectDifference difference, HostProject hostProject, Project workspaceProject, ImmutableDictionary <string, DocumentState> documents, ImmutableDictionary <string, ImmutableArray <string> > importsToRelatedDocuments) { if (older == null) { throw new ArgumentNullException(nameof(older)); } if (hostProject == null) { throw new ArgumentNullException(nameof(hostProject)); } if (documents == null) { throw new ArgumentNullException(nameof(documents)); } if (importsToRelatedDocuments == null) { throw new ArgumentNullException(nameof(importsToRelatedDocuments)); } Services = older.Services; Version = older.Version.GetNewerVersion(); HostProject = hostProject; WorkspaceProject = workspaceProject; Documents = documents; ImportsToRelatedDocuments = importsToRelatedDocuments; _lock = new object(); if ((difference & ClearDocumentCollectionVersionMask) == 0) { // Document collection hasn't changed DocumentCollectionVersion = older.DocumentCollectionVersion; } else { DocumentCollectionVersion = Version; } if ((difference & ClearComputedStateMask) == 0 && older._computedState != null) { // Optimistically cache the RazorProjectEngine. _computedState = new ComputedStateTracker(this, older._computedState); } if ((difference & ClearCachedTagHelpersMask) == 0 && _computedState != null) { // It's OK to keep the computed Tag Helpers. _computedState.TaskUnsafe = older._computedState?.TaskUnsafe; } }
private ProjectState( ProjectState older, ProjectDifference difference, HostProject hostProject, Project workspaceProject, IReadOnlyDictionary <string, DocumentState> documents) { if (older == null) { throw new ArgumentNullException(nameof(older)); } if (hostProject == null) { throw new ArgumentNullException(nameof(hostProject)); } if (documents == null) { throw new ArgumentNullException(nameof(documents)); } Services = older.Services; Version = older.Version.GetNewerVersion(); HostProject = hostProject; WorkspaceProject = workspaceProject; Documents = documents; _lock = new object(); _projectEngine = older._projectEngine?.ForkFor(this, difference); _tagHelpers = older._tagHelpers?.ForkFor(this, difference); }
public DocumentState(DocumentState previous, ProjectDifference difference) { if (previous == null) { throw new ArgumentNullException(nameof(previous)); } Services = previous.Services; HostDocument = previous.HostDocument; Version = previous.Version.GetNewerVersion(); _generatedOutput = previous._generatedOutput?.ForkFor(this, difference); }
public DocumentGeneratedOutputTracker ForkFor(DocumentState state, ProjectDifference difference) { if (state == null) { throw new ArgumentNullException(nameof(state)); } if ((difference & Mask) != 0) { return(null); } return(new DocumentGeneratedOutputTracker(this)); }
public ProjectEngineTracker ForkFor(ProjectState state, ProjectDifference difference) { if (state == null) { throw new ArgumentNullException(nameof(state)); } if ((difference & Mask) != 0) { return(null); } return(this); }
private ProjectState( ProjectState older, ProjectDifference difference, HostProject hostProject, ProjectWorkspaceState projectWorkspaceState, ImmutableDictionary <string, DocumentState> documents, ImmutableDictionary <string, ImmutableArray <string> > importsToRelatedDocuments) { if (older == null) { throw new ArgumentNullException(nameof(older)); } if (hostProject == null) { throw new ArgumentNullException(nameof(hostProject)); } if (documents == null) { throw new ArgumentNullException(nameof(documents)); } if (importsToRelatedDocuments == null) { throw new ArgumentNullException(nameof(importsToRelatedDocuments)); } Services = older.Services; Version = older.Version.GetNewerVersion(); HostProject = hostProject; ProjectWorkspaceState = projectWorkspaceState; Documents = documents; ImportsToRelatedDocuments = importsToRelatedDocuments; _lock = new object(); if ((difference & ClearDocumentCollectionVersionMask) == 0) { // Document collection hasn't changed DocumentCollectionVersion = older.DocumentCollectionVersion; } else { DocumentCollectionVersion = Version; } if ((difference & ClearConfigurationVersionMask) == 0 && older._projectEngine != null) { // Optimistically cache the RazorProjectEngine. _projectEngine = older.ProjectEngine; ConfigurationVersion = older.ConfigurationVersion; } else { ConfigurationVersion = Version; } if ((difference & ClearProjectWorkspaceStateVersionMask) == 0 || ProjectWorkspaceState == older.ProjectWorkspaceState || ProjectWorkspaceState?.Equals(older.ProjectWorkspaceState) == true) { ProjectWorkspaceStateVersion = older.ProjectWorkspaceStateVersion; } else { ProjectWorkspaceStateVersion = Version; } }