提交 6a0f32d5 编写于 作者: M Martin Strecker

Code formatting and small refactorings.

上级 306c2b8a
...@@ -139,7 +139,8 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context) ...@@ -139,7 +139,8 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
var arguments = (SeparatedSyntaxList<TArgumentSyntax>)syntaxFacts.GetArgumentsOfObjectCreationExpression(objectCreation); var arguments = (SeparatedSyntaxList<TArgumentSyntax>)syntaxFacts.GetArgumentsOfObjectCreationExpression(objectCreation);
var methodCandidates = type.InstanceConstructors; var methodCandidates = type.InstanceConstructors;
var insertionData = GetArgumentInsertPositionForMethodCandidates(argumentOpt, semanticModel, syntaxFacts, arguments, methodCandidates); var insertionData = GetArgumentInsertPositionForMethodCandidates(
argumentOpt, semanticModel, syntaxFacts, arguments, methodCandidates);
RegisterFixForMethodOverloads(context, arguments, insertionData); RegisterFixForMethodOverloads(context, arguments, insertionData);
} }
...@@ -206,12 +207,15 @@ private int NonParamsParameterCount(IMethodSymbol method) ...@@ -206,12 +207,15 @@ private int NonParamsParameterCount(IMethodSymbol method)
var title = GetCodeFixTitle(FeaturesResources.Add_parameter_to_0, methodToUpdate, parameters); var title = GetCodeFixTitle(FeaturesResources.Add_parameter_to_0, methodToUpdate, parameters);
var hasCascadingDeclarations = HasCascadingDeclarations(methodToUpdate); var hasCascadingDeclarations = HasCascadingDeclarations(methodToUpdate);
var codeFixForDeclarationOnly = new MyCodeAction(title,
c => FixAsync(context.Document, methodToUpdate, argumentToInsert, arguments, fixAllReferences: false, c));
if (hasCascadingDeclarations) if (hasCascadingDeclarations)
{ {
var titleForCascadingFix = GetCodeFixTitle(FeaturesResources.Add_parameter_to_0_including_overrides_implementations, methodToUpdate, parameters); var titleForCascadingFix = GetCodeFixTitle(
FeaturesResources.Add_parameter_to_0_including_overrides_implementations, methodToUpdate, parameters);
context.RegisterCodeFix(new CodeAction.CodeActionWithNestedActions(title, ImmutableArray.Create<CodeAction>( context.RegisterCodeFix(new CodeAction.CodeActionWithNestedActions(title, ImmutableArray.Create<CodeAction>(
new MyCodeAction(title, codeFixForDeclarationOnly,
c => FixAsync(context.Document, methodToUpdate, argumentToInsert, arguments, fixAllReferences: false, c)),
new MyCodeAction(titleForCascadingFix, new MyCodeAction(titleForCascadingFix,
c => FixAsync(context.Document, methodToUpdate, argumentToInsert, arguments, fixAllReferences: true, c))), c => FixAsync(context.Document, methodToUpdate, argumentToInsert, arguments, fixAllReferences: true, c))),
isInlinable: true), isInlinable: true),
...@@ -220,8 +224,7 @@ private int NonParamsParameterCount(IMethodSymbol method) ...@@ -220,8 +224,7 @@ private int NonParamsParameterCount(IMethodSymbol method)
else else
{ {
context.RegisterCodeFix( context.RegisterCodeFix(
new MyCodeAction(title, codeFixForDeclarationOnly,
c => FixAsync(context.Document, methodToUpdate, argumentToInsert, arguments, fixAllReferences: false, c)),
context.Diagnostics); context.Diagnostics);
} }
} }
...@@ -293,17 +296,24 @@ private static string GetCodeFixTitle(string resourceString, IMethodSymbol metho ...@@ -293,17 +296,24 @@ private static string GetCodeFixTitle(string resourceString, IMethodSymbol metho
{ {
var solution = invocationDocument.Project.Solution; var solution = invocationDocument.Project.Solution;
var argumentType = await GetArgumentTypeAsync(invocationDocument, argument, cancellationToken).ConfigureAwait(false); var argumentType = await GetArgumentTypeAsync(invocationDocument, argument, cancellationToken).ConfigureAwait(false);
// the argumentNameSuggestion is the base for the parameter name. For each method declaration the name is made unique to avoid name collisions.
var (argumentNameSuggestion, isNamedArgument) = await GetNameSuggestionForArgumentAsync(invocationDocument, argument, cancellationToken).ConfigureAwait(false); // The argumentNameSuggestion is the base for the parameter name.
// For each method declaration the name is made unique to avoid name collisions.
var (argumentNameSuggestion, isNamedArgument) = await GetNameSuggestionForArgumentAsync(
invocationDocument, argument, cancellationToken).ConfigureAwait(false);
var referencedSymbols = fixAllReferences var referencedSymbols = fixAllReferences
? await FindMethodDeclarationReferences(invocationDocument, method, cancellationToken).ConfigureAwait(false) ? await FindMethodDeclarationReferences(invocationDocument, method, cancellationToken).ConfigureAwait(false)
: method.GetAllMethodSymbolsOfPartialParts(); : method.GetAllMethodSymbolsOfPartialParts();
// TODO: Insert hint in the fix with a warning if anySymbolsReferenceNotInSource is true
var anySymbolReferencesNotInSource = referencedSymbols.Any(symbol => !symbol.IsFromSource()); var anySymbolReferencesNotInSource = referencedSymbols.Any(symbol => !symbol.IsFromSource());
var locationsInSource = referencedSymbols.Where(symbol => symbol.IsFromSource()); var locationsInSource = referencedSymbols.Where(symbol => symbol.IsFromSource());
// Indexing Locations[0] is valid because IMethodSymbols have one location at most and IsFromSource() tests if there is at least one location.
// Indexing Locations[0] is valid because IMethodSymbols have one location at most
// and IsFromSource() tests if there is at least one location.
var locationsByDocument = locationsInSource.ToLookup(declarationLocation var locationsByDocument = locationsInSource.ToLookup(declarationLocation
=> solution.GetDocument(declarationLocation.Locations[0].SourceTree)); => solution.GetDocument(declarationLocation.Locations[0].SourceTree));
foreach (var documentLookup in locationsByDocument) foreach (var documentLookup in locationsByDocument)
{ {
var document = documentLookup.Key; var document = documentLookup.Key;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册