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); }
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); }
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); }
public static bool ContainsLocation(this ChangeInfluenceScope scope, ChangeInfluenceScope scopeToCheck) => (scope & scopeToCheck) == scopeToCheck;