diff --git a/src/Workspaces/Core/Portable/CodeFixes/FixAllOccurrences/DocumentBasedFixAllProvider.cs b/src/Workspaces/Core/Portable/CodeFixes/FixAllOccurrences/DocumentBasedFixAllProvider.cs
index 484c88bde2c1e..823220fb6a546 100644
--- a/src/Workspaces/Core/Portable/CodeFixes/FixAllOccurrences/DocumentBasedFixAllProvider.cs
+++ b/src/Workspaces/Core/Portable/CodeFixes/FixAllOccurrences/DocumentBasedFixAllProvider.cs
@@ -5,11 +5,9 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
-using System.Linq;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeActions;
using Microsoft.CodeAnalysis.CodeFixesAndRefactorings;
-using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Shared.Utilities;
using Microsoft.CodeAnalysis.Text;
@@ -28,20 +26,15 @@ namespace Microsoft.CodeAnalysis.CodeFixes;
/// project and then appropriately bucketed by document. These are then passed to for implementors to process.
///
-public abstract class DocumentBasedFixAllProvider : FixAllProvider
+public abstract class DocumentBasedFixAllProvider(ImmutableArray supportedFixAllScopes) : FixAllProvider
{
- private readonly ImmutableArray _supportedFixAllScopes;
+ private readonly ImmutableArray _supportedFixAllScopes = supportedFixAllScopes;
protected DocumentBasedFixAllProvider()
: this(DefaultSupportedFixAllScopes)
{
}
- protected DocumentBasedFixAllProvider(ImmutableArray supportedFixAllScopes)
- {
- _supportedFixAllScopes = supportedFixAllScopes;
- }
-
///
/// Produce a suitable title for the fix-all this type creates in . Override this if customizing that title is desired.
@@ -73,55 +66,33 @@ public sealed override IEnumerable GetSupportedFixAllScopes()
fixAllContext.GetDefaultFixAllTitle(), fixAllContext, FixAllContextsHelperAsync);
private Task FixAllContextsHelperAsync(FixAllContext originalFixAllContext, ImmutableArray fixAllContexts)
- => DocumentBasedFixAllProviderHelpers.FixAllContextsAsync(originalFixAllContext, fixAllContexts,
- originalFixAllContext.Progress,
- this.GetFixAllTitle(originalFixAllContext),
- DetermineDiagnosticsAndGetFixedDocumentsAsync);
-
- private async Task> DetermineDiagnosticsAndGetFixedDocumentsAsync(
- FixAllContext fixAllContext,
- IProgress progressTracker)
- {
- // First, determine the diagnostics to fix.
- var diagnostics = await DetermineDiagnosticsAsync(fixAllContext, progressTracker).ConfigureAwait(false);
-
- // Second, get the fixes for all the diagnostics, and apply them to determine the new root/text for each doc.
- return await GetFixedDocumentsAsync(fixAllContext, progressTracker, diagnostics).ConfigureAwait(false);
- }
-
- ///
- /// Determines all the diagnostics we should be fixing for the given .
- ///
- private static async Task>> DetermineDiagnosticsAsync(FixAllContext fixAllContext, IProgress progressTracker)
- {
- using var _ = progressTracker.ItemCompletedScope();
- return await FixAllContextHelper.GetDocumentDiagnosticsToFixAsync(fixAllContext).ConfigureAwait(false);
- }
-
- ///
- /// Attempts to fix all the provided returning, for each updated document, either
- /// the new syntax root for that document or its new text. Syntax roots are returned for documents that support
- /// them, and are used to perform a final cleanup pass for formatting/simplication/etc. Text is returned for
- /// documents that don't support syntax.
- ///
- private async Task> GetFixedDocumentsAsync(
- FixAllContext fixAllContext, IProgress progressTracker, ImmutableDictionary> diagnostics)
+ => DocumentBasedFixAllProviderHelpers.FixAllContextsAsync(
+ originalFixAllContext,
+ fixAllContexts,
+ originalFixAllContext.Progress,
+ this.GetFixAllTitle(originalFixAllContext),
+ DetermineDiagnosticsAndGetFixedDocumentsAsync);
+
+ private async Task DetermineDiagnosticsAndGetFixedDocumentsAsync(
+ FixAllContext fixAllContext, Action<(DocumentId documentId, (SyntaxNode? node, SourceText? text))> callback)
{
var cancellationToken = fixAllContext.CancellationToken;
- using var _1 = progressTracker.ItemCompletedScope();
-
- if (diagnostics.IsEmpty)
- return [];
-
- // Then, process all documents in parallel to get the change for each doc.
- return await ProducerConsumer<(DocumentId, (SyntaxNode? node, SourceText? text))>.RunParallelAsync(
- source: diagnostics.Where(kvp => !kvp.Value.IsDefaultOrEmpty),
- produceItems: static async (kvp, callback, args, cancellationToken) =>
+ // First, determine the diagnostics to fix.
+ var documentToDiagnostics = await FixAllContextHelper.GetDocumentDiagnosticsToFixAsync(fixAllContext).ConfigureAwait(false);
+
+ // Second, get the fixes for each document+diagnostics pair in parallel, and apply them to determine the new
+ // root/text for each doc.
+ await RoslynParallel.ForEachAsync(
+ source: documentToDiagnostics,
+ cancellationToken,
+ async (kvp, cancellationToken) =>
{
var (document, documentDiagnostics) = kvp;
+ if (documentDiagnostics.IsDefaultOrEmpty)
+ return;
- var newDocument = await args.@this.FixAllAsync(args.fixAllContext, document, documentDiagnostics).ConfigureAwait(false);
+ var newDocument = await this.FixAllAsync(fixAllContext, document, documentDiagnostics).ConfigureAwait(false);
if (newDocument == null || newDocument == document)
return;
@@ -131,16 +102,6 @@ private static async Task
- {
- var docIdToNewRootOrText = new Dictionary();
- await foreach (var (docId, nodeOrText) in results)
- docIdToNewRootOrText[docId] = nodeOrText;
-
- return docIdToNewRootOrText;
- },
- args: (@this: this, fixAllContext),
- cancellationToken).ConfigureAwait(false);
+ }).ConfigureAwait(false);
}
}
diff --git a/src/Workspaces/Core/Portable/CodeFixesAndRefactorings/DocumentBasedFixAllProviderHelpers.cs b/src/Workspaces/Core/Portable/CodeFixesAndRefactorings/DocumentBasedFixAllProviderHelpers.cs
index 884b79949cce7..1035dcc812517 100644
--- a/src/Workspaces/Core/Portable/CodeFixesAndRefactorings/DocumentBasedFixAllProviderHelpers.cs
+++ b/src/Workspaces/Core/Portable/CodeFixesAndRefactorings/DocumentBasedFixAllProviderHelpers.cs
@@ -3,9 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
-using System.Collections.Generic;
using System.Collections.Immutable;
-using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeActions;
@@ -13,7 +11,6 @@
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Remote;
using Microsoft.CodeAnalysis.Shared.Extensions;
-using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Shared.Utilities;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
@@ -30,124 +27,111 @@ internal static class DocumentBasedFixAllProviderHelpers
ImmutableArray fixAllContexts,
IProgress progressTracker,
string progressTrackerDescription,
- Func, Task>> getFixedDocumentsAsync)
+ Func, Task> getFixedDocumentsAsync)
where TFixAllContext : IFixAllContext
{
+ var cancellationToken = originalFixAllContext.CancellationToken;
+
progressTracker.Report(CodeAnalysisProgress.Description(progressTrackerDescription));
var solution = originalFixAllContext.Solution;
- // For code fixes, we have 3 pieces of work per project. Computing diagnostics, computing fixes, and applying fixes.
- // For refactorings, we have 2 pieces of work per project. Computing refactorings, and applying refactorings.
- var fixAllKind = originalFixAllContext.State.FixAllKind;
- var workItemCount = fixAllKind == FixAllKind.CodeFix ? 3 : 2;
- progressTracker.AddItems(fixAllContexts.Length * workItemCount);
+ // One work item for each context.
+ progressTracker.AddItems(fixAllContexts.Length);
+
+ var (dirtySolution, changedRootDocumentIds) = await GetInitialUncleanedSolutionAsync().ConfigureAwait(false);
+ return await CleanSolutionAsync(dirtySolution, changedRootDocumentIds).ConfigureAwait(false);
- using var _1 = PooledDictionary.GetInstance(out var allContextsDocIdToNewRootOrText);
+ async Task<(Solution dirtySolution, ImmutableArray changedRootDocumentIds)> GetInitialUncleanedSolutionAsync()
{
// First, iterate over all contexts, and collect all the changes for each of them. We'll be making a lot of
// calls to the remote server to compute diagnostics and changes. So keep a single connection alive to it
// so we never resync or recompute anything.
- using var _2 = await RemoteKeepAliveSession.CreateAsync(solution, originalFixAllContext.CancellationToken).ConfigureAwait(false);
-
- foreach (var fixAllContext in fixAllContexts)
- {
- Contract.ThrowIfFalse(
- fixAllContext.Scope is FixAllScope.Document or FixAllScope.Project or FixAllScope.ContainingMember or FixAllScope.ContainingType);
-
- // TODO: consider computing this in parallel.
- var singleContextDocIdToNewRootOrText = await getFixedDocumentsAsync(fixAllContext, progressTracker).ConfigureAwait(false);
-
- // Note: it is safe to blindly add the dictionary for a particular context to the full dictionary. Each
- // dictionary will only update documents within that context, and each context represents a distinct
- // project, so these should all be distinct without collisions. However, to be very safe, we use an
- // overwriting policy here to ensure nothing causes any problems here.
- foreach (var kvp in singleContextDocIdToNewRootOrText)
- allContextsDocIdToNewRootOrText[kvp.Key] = kvp.Value;
- }
- }
+ using var _ = await RemoteKeepAliveSession.CreateAsync(solution, cancellationToken).ConfigureAwait(false);
- // Next, go and insert those all into the solution so all the docs in this particular project point at
- // the new trees (or text). At this point though, the trees have not been cleaned up. We don't cleanup
- // the documents as they are created, or one at a time as we add them, as that would cause us to run
- // cleanup on N different solution forks (which would be very expensive). Instead, by adding all the
- // changed documents to one solution, and then cleaning *those* we only perform cleanup semantics on one
- // forked solution.
- var currentSolution = solution;
- foreach (var (docId, (newRoot, newText)) in allContextsDocIdToNewRootOrText)
- {
- currentSolution = newRoot != null
- ? currentSolution.WithDocumentSyntaxRoot(docId, newRoot)
- : currentSolution.WithDocumentText(docId, newText!);
+ return await ProducerConsumer<(DocumentId documentId, (SyntaxNode? node, SourceText? text))>.RunParallelAsync(
+ source: fixAllContexts,
+ produceItems: static async (fixAllContext, callback, args, cancellationToken) =>
+ {
+ // Update our progress for each fixAllContext we process.
+ using var _ = args.progressTracker.ItemCompletedScope();
+
+ Contract.ThrowIfFalse(
+ fixAllContext.Scope is FixAllScope.Document or FixAllScope.Project or FixAllScope.ContainingMember or FixAllScope.ContainingType);
+
+ await args.getFixedDocumentsAsync(fixAllContext, callback).ConfigureAwait(false);
+ },
+ consumeItems: static async (stream, args, cancellationToken) =>
+ {
+ var currentSolution = args.solution;
+ using var _ = ArrayBuilder.GetInstance(out var changedRootDocumentIds);
+
+ // Next, go and insert those all into the solution so all the docs in this particular project
+ // point at the new trees (or text). At this point though, the trees have not been cleaned up.
+ // We don't cleanup the documents as they are created, or one at a time as we add them, as that
+ // would cause us to run cleanup on N different solution forks (which would be very expensive).
+ // Instead, by adding all the changed documents to one solution, and then cleaning *those* we
+ // only perform cleanup semantics on one forked solution.
+ await foreach (var (docId, (newRoot, newText)) in stream)
+ {
+ // If we produced a new root (as opposed to new text), keep track of that doc-id so that we
+ // can clean this doc later.
+ if (newRoot != null)
+ changedRootDocumentIds.Add(docId);
+
+ currentSolution = newRoot != null
+ ? currentSolution.WithDocumentSyntaxRoot(docId, newRoot)
+ : currentSolution.WithDocumentText(docId, newText!);
+ }
+
+ return (currentSolution, changedRootDocumentIds.ToImmutableAndClear());
+ },
+ args: (getFixedDocumentsAsync, progressTracker, solution),
+ cancellationToken).ConfigureAwait(false);
}
+ async Task CleanSolutionAsync(Solution dirtySolution, ImmutableArray changedRootDocumentIds)
{
+ if (changedRootDocumentIds.IsEmpty)
+ return dirtySolution;
+
+ // Clear out the progress so far. We're starting a new progress pass for the final cleanup.
+ progressTracker.Report(CodeAnalysisProgress.Clear());
+ progressTracker.Report(CodeAnalysisProgress.AddIncompleteItems(changedRootDocumentIds.Length, WorkspacesResources.Running_code_cleanup_on_fixed_documents));
+
// We're about to making a ton of calls to this new solution, including expensive oop calls to get up to
// date compilations, skeletons and SG docs. Create and pin this solution so that all remote calls operate
// on the same fork and do not cause the forked solution to be created and dropped repeatedly.
- using var _2 = await RemoteKeepAliveSession.CreateAsync(currentSolution, originalFixAllContext.CancellationToken).ConfigureAwait(false);
-
- var finalSolution = await CleanupAndApplyChangesAsync(
- progressTracker,
- currentSolution,
- allContextsDocIdToNewRootOrText,
- originalFixAllContext.CancellationToken).ConfigureAwait(false);
-
- return finalSolution;
- }
- }
-
- ///
- /// Take all the fixed documents and format/simplify/clean them up (if the language supports that), and take the
- /// resultant text and apply it to the solution. If the language doesn't support cleanup, then just take the
- /// given text and apply that instead.
- ///
- private static async Task CleanupAndApplyChangesAsync(
- IProgress progressTracker,
- Solution currentSolution,
- Dictionary docIdToNewRootOrText,
- CancellationToken cancellationToken)
- {
- using var _1 = progressTracker.ItemCompletedScope();
-
- if (docIdToNewRootOrText.Count == 0)
- return currentSolution;
-
- // Next, go and cleanup any trees we inserted. Once we clean the document, we get the text of it and insert
- // that back into the final solution. This way we can release both the original fixed tree, and the cleaned
- // tree (both of which can be much more expensive than just text).
- //
- // Do this in parallel across all the documents that were fixed.
-
- return await ProducerConsumer<(DocumentId docId, SourceText sourceText)>.RunParallelAsync(
- source: docIdToNewRootOrText,
- produceItems: static async (tuple, callback, currentSolution, cancellationToken) =>
- {
- var (docId, (newRoot, _)) = tuple;
- if (newRoot != null)
+ using var _ = await RemoteKeepAliveSession.CreateAsync(dirtySolution, cancellationToken).ConfigureAwait(false);
+
+ // Next, go and cleanup any trees we inserted. Once we clean the document, we get the text of it and insert that
+ // back into the final solution. This way we can release both the original fixed tree, and the cleaned tree
+ // (both of which can be much more expensive than just text).
+ //
+ // Do this in parallel across all the documents that were fixed and resulted in a new tree (as opposed to new
+ // text).
+ return await ProducerConsumer<(DocumentId docId, SourceText sourceText)>.RunParallelAsync(
+ source: changedRootDocumentIds,
+ produceItems: static async (documentId, callback, args, cancellationToken) =>
{
- var cleaned = await GetCleanedDocumentAsync(
- currentSolution.GetRequiredDocument(docId), cancellationToken).ConfigureAwait(false);
- callback(cleaned);
- }
- },
- consumeItems: static async (results, currentSolution, _) =>
- {
- // Finally, apply the cleaned documents to the solution.
- var finalSolution = currentSolution;
- await foreach (var (docId, cleanedText) in results)
- finalSolution = finalSolution.WithDocumentText(docId, cleanedText);
-
- return finalSolution;
- },
- args: currentSolution,
- cancellationToken).ConfigureAwait(false);
-
- static async Task<(DocumentId docId, SourceText sourceText)> GetCleanedDocumentAsync(Document dirtyDocument, CancellationToken cancellationToken)
- {
- var cleanedDocument = await PostProcessCodeAction.Instance.PostProcessChangesAsync(dirtyDocument, cancellationToken).ConfigureAwait(false);
- var cleanedText = await cleanedDocument.GetValueTextAsync(cancellationToken).ConfigureAwait(false);
- return (dirtyDocument.Id, cleanedText);
+ using var _ = args.progressTracker.ItemCompletedScope();
+
+ var dirtyDocument = args.dirtySolution.GetRequiredDocument(documentId);
+ var cleanedDocument = await PostProcessCodeAction.Instance.PostProcessChangesAsync(dirtyDocument, cancellationToken).ConfigureAwait(false);
+ var cleanedText = await cleanedDocument.GetValueTextAsync(cancellationToken).ConfigureAwait(false);
+ callback((dirtyDocument.Id, cleanedText));
+ },
+ consumeItems: static async (results, args, cancellationToken) =>
+ {
+ // Finally, apply the cleaned documents to the solution.
+ var finalSolution = args.dirtySolution;
+ await foreach (var (docId, cleanedText) in results)
+ finalSolution = finalSolution.WithDocumentText(docId, cleanedText);
+
+ return finalSolution;
+ },
+ args: (dirtySolution, progressTracker),
+ cancellationToken).ConfigureAwait(false);
}
}
diff --git a/src/Workspaces/Core/Portable/CodeRefactorings/FixAllOccurences/DocumentBasedFixAllProvider.cs b/src/Workspaces/Core/Portable/CodeRefactorings/FixAllOccurences/DocumentBasedFixAllProvider.cs
index 9247f59f7a20b..7bb3a4c6c2526 100644
--- a/src/Workspaces/Core/Portable/CodeRefactorings/FixAllOccurences/DocumentBasedFixAllProvider.cs
+++ b/src/Workspaces/Core/Portable/CodeRefactorings/FixAllOccurences/DocumentBasedFixAllProvider.cs
@@ -73,10 +73,12 @@ public sealed override IEnumerable GetSupportedFixAllScopes()
fixAllContext.GetDefaultFixAllTitle(), fixAllContext, FixAllContextsHelperAsync);
private Task FixAllContextsHelperAsync(FixAllContext originalFixAllContext, ImmutableArray fixAllContexts)
- => DocumentBasedFixAllProviderHelpers.FixAllContextsAsync(originalFixAllContext, fixAllContexts,
- originalFixAllContext.Progress,
- this.GetFixAllTitle(originalFixAllContext),
- GetFixedDocumentsAsync);
+ => DocumentBasedFixAllProviderHelpers.FixAllContextsAsync(
+ originalFixAllContext,
+ fixAllContexts,
+ originalFixAllContext.Progress,
+ this.GetFixAllTitle(originalFixAllContext),
+ GetFixedDocumentsAsync);
///
/// Attempts to apply fix all operations returning, for each updated document, either
@@ -84,25 +86,24 @@ public sealed override IEnumerable GetSupportedFixAllScopes()
/// them, and are used to perform a final cleanup pass for formatting/simplication/etc. Text is returned for
/// documents that don't support syntax.
///
- private async Task> GetFixedDocumentsAsync(
- FixAllContext fixAllContext, IProgress progressTracker)
+ private async Task GetFixedDocumentsAsync(
+ FixAllContext fixAllContext, Action<(DocumentId documentId, (SyntaxNode? node, SourceText? text))> callback)
{
Contract.ThrowIfFalse(fixAllContext.Scope is FixAllScope.Document or FixAllScope.Project
or FixAllScope.ContainingMember or FixAllScope.ContainingType);
var cancellationToken = fixAllContext.CancellationToken;
- using var _1 = progressTracker.ItemCompletedScope();
-
// Process all documents in parallel to get the change for each doc.
var documentsAndSpansToFix = await fixAllContext.GetFixAllSpansAsync(cancellationToken).ConfigureAwait(false);
- return await ProducerConsumer<(DocumentId, (SyntaxNode? node, SourceText? text))>.RunParallelAsync(
+ await RoslynParallel.ForEachAsync(
source: documentsAndSpansToFix,
- produceItems: static async (tuple, callback, args, cancellationToken) =>
+ cancellationToken,
+ async (tuple, cancellationToken) =>
{
var (document, spans) = tuple;
- var newDocument = await args.@this.FixAllAsync(args.fixAllContext, document, spans).ConfigureAwait(false);
+ var newDocument = await this.FixAllAsync(fixAllContext, document, spans).ConfigureAwait(false);
if (newDocument == null || newDocument == document)
return;
@@ -112,17 +113,6 @@ public sealed override IEnumerable GetSupportedFixAllScopes()
var text = newDocument.SupportsSyntaxTree ? null : await newDocument.GetValueTextAsync(cancellationToken).ConfigureAwait(false);
callback((document.Id, (node, text)));
- },
- consumeItems: static async (results, args, cancellationToken) =>
- {
- var docIdToNewRootOrText = new Dictionary();
-
- await foreach (var (docId, nodeOrText) in results)
- docIdToNewRootOrText[docId] = nodeOrText;
-
- return docIdToNewRootOrText;
- },
- args: (@this: this, fixAllContext),
- cancellationToken).ConfigureAwait(false);
+ }).ConfigureAwait(false);
}
}
diff --git a/src/Workspaces/Core/Portable/WorkspacesResources.resx b/src/Workspaces/Core/Portable/WorkspacesResources.resx
index 39e13ef0bb761..7e20b01c147b4 100644
--- a/src/Workspaces/Core/Portable/WorkspacesResources.resx
+++ b/src/Workspaces/Core/Portable/WorkspacesResources.resx
@@ -492,4 +492,7 @@
Unexpected value '{0}' in DocumentKinds array.
+
+ Running code cleanup on fixed documents
+
\ No newline at end of file
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.cs.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.cs.xlf
index 93569dd7abbc2..60a243b017cfe 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.cs.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.cs.xlf
@@ -127,6 +127,11 @@
Přejmenovat {0} na {1}
+
+
+ Running code cleanup on fixed documents
+
+ Řešení neobsahuje zadaný odkaz.
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.de.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.de.xlf
index 4dbc4bbf1268c..f5a183f74084a 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.de.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.de.xlf
@@ -127,6 +127,11 @@
"{0}" in "{1}" umbenennen
+
+
+ Running code cleanup on fixed documents
+
+ Der angegebene Verweis ist nicht in der Projektmappe enthalten.
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.es.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.es.xlf
index d79f326dae933..66c1cf566b81a 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.es.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.es.xlf
@@ -127,6 +127,11 @@
Cambiar el nombre de '{0}' a '{1}'
+
+
+ Running code cleanup on fixed documents
+
+ La solución no contiene la referencia especificada
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.fr.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.fr.xlf
index 4437971ba7614..910f067fea546 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.fr.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.fr.xlf
@@ -127,6 +127,11 @@
Renommer '{0}' en '{1}'
+
+
+ Running code cleanup on fixed documents
+
+ La solution ne contient pas la référence spécifiée
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.it.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.it.xlf
index 77eab2b223826..131b63119784b 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.it.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.it.xlf
@@ -127,6 +127,11 @@
Rinomina '{0}' in '{1}'
+
+
+ Running code cleanup on fixed documents
+
+ La soluzione non contiene il riferimento specificato
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ja.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ja.xlf
index 7f16149e410ce..f6cc2a2be97c6 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ja.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ja.xlf
@@ -127,6 +127,11 @@
'{0}' を '{1}' に名前変更
+
+
+ Running code cleanup on fixed documents
+
+ 指定された参照がソリューションに含まれていません
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ko.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ko.xlf
index ab6a3d0da4853..574613a48d02b 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ko.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ko.xlf
@@ -127,6 +127,11 @@
'{1}'(으)로 '{0}' 이름 바꾸기
+
+
+ Running code cleanup on fixed documents
+
+ 지정된 참조가 솔루션에 포함되어 있지 않습니다.
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pl.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pl.xlf
index 5d6df9750c27b..89229d1e54580 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pl.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pl.xlf
@@ -127,6 +127,11 @@
Zmień nazwę elementu „{0}” na „{1}”
+
+
+ Running code cleanup on fixed documents
+
+ Rozwiązanie nie zawiera określonego odwołania
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pt-BR.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pt-BR.xlf
index d61231dbb8017..7b0d07ee6716c 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pt-BR.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.pt-BR.xlf
@@ -127,6 +127,11 @@
Renomear "{0}" para "{1}"
+
+
+ Running code cleanup on fixed documents
+
+ A solução não contém a referência especificada
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ru.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ru.xlf
index a59fe061c71d0..643fa036d905b 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ru.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.ru.xlf
@@ -127,6 +127,11 @@
Переименовать "{0}" в "{1}"
+
+
+ Running code cleanup on fixed documents
+
+ Решение не содержит указанную ссылку.
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.tr.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.tr.xlf
index a27884ea21b81..31523544c5c26 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.tr.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.tr.xlf
@@ -127,6 +127,11 @@
'{0}' öğesini '{1}' olarak yeniden adlandır
+
+
+ Running code cleanup on fixed documents
+
+ Çözüm belirtilen başvuruyu içermiyor
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hans.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hans.xlf
index 282030d47ddc5..1a8ed118e7826 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hans.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hans.xlf
@@ -127,6 +127,11 @@
将“{0}” 重命名为“{1}”
+
+
+ Running code cleanup on fixed documents
+
+ 解决方案不包含指定的引用
diff --git a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hant.xlf b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hant.xlf
index fa3e4431600d7..9fd5e7497d743 100644
--- a/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hant.xlf
+++ b/src/Workspaces/Core/Portable/xlf/WorkspacesResources.zh-Hant.xlf
@@ -127,6 +127,11 @@
將 '{0}' 重新命名為 '{1}'
+
+
+ Running code cleanup on fixed documents
+
+ 解決方案未包含指定的參考