コード例 #1
0
        protected virtual ChangeInfluenceScope GetChangesScopeImpl(Document oldDocument, SyntaxNode newRoot, Document newDocument,
                                                                   IEnumerable <TextChange> textChanges,
                                                                   CancellationToken cancellationToken = default)
        {
            ChangeInfluenceScope accumulatedChangeScope = ChangeInfluenceScope.None;

            foreach (TextChange change in textChanges)
            {
                ChangeInfluenceScope changeScope = GetTextChangeInfluenceScope(change, newRoot);
                accumulatedChangeScope = accumulatedChangeScope | changeScope;

                cancellationToken.ThrowIfCancellationRequested();
            }

            return(accumulatedChangeScope);
        }
コード例 #2
0
        public async Task <CodeMapRefreshMode> ShouldRefreshCodeMapAsync(Document oldDocument, SyntaxNode newRoot, Document newDocument,
                                                                         CancellationToken cancellationToken = default)
        {
            ChangeInfluenceScope changeScope = await GetChangesScopeAsync(oldDocument, newRoot, newDocument, cancellationToken);

            if (changeScope.ContainsLocation(ChangeInfluenceScope.Namespace))
            {
                return(newRoot.ContainsDiagnostics
                                        ? CodeMapRefreshMode.Clear
                                        : CodeMapRefreshMode.Recalculate);
            }
            else if (changeScope.ContainsLocation(ChangeInfluenceScope.Class))
            {
                return(CodeMapRefreshMode.Recalculate);
            }

            return(CodeMapRefreshMode.NoRefresh);
        }
コード例 #3
0
        protected override ChangeInfluenceScope GetChangesScopeImpl(Document oldDocument, SyntaxNode newRoot, Document newDocument,
                                                                    IEnumerable <TextChange> textChanges, CancellationToken cancellationToken = default)
        {
            ChangeInfluenceScope accumulatedChangeScope = ChangeInfluenceScope.None;

            foreach (TextChange change in textChanges)
            {
                ChangeInfluenceScope changeScope = GetTextChangeInfluenceScope(change, newRoot);

                //Early exit if we found a change which require the refresh of code map
                if (changeScope.ContainsLocation(ChangeInfluenceScope.Class) || changeScope.ContainsLocation(ChangeInfluenceScope.Namespace))
                {
                    return(changeScope);
                }

                accumulatedChangeScope = accumulatedChangeScope | changeScope;
                cancellationToken.ThrowIfCancellationRequested();
            }

            return(accumulatedChangeScope);
        }
コード例 #4
0
 public static bool ContainsLocation(this ChangeInfluenceScope scope, ChangeInfluenceScope scopeToCheck) => (scope & scopeToCheck) == scopeToCheck;