예제 #1
0
        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;
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        public ProjectEngineTracker ForkFor(ProjectState state, ProjectDifference difference)
        {
            if (state == null)
            {
                throw new ArgumentNullException(nameof(state));
            }

            if ((difference & Mask) != 0)
            {
                return(null);
            }

            return(this);
        }
예제 #6
0
        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;
            }
        }