提交 449f5586 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #14788 from CyrusNajmabadi/genMethodParamName

Strip off underscores when generating constructors from fields.

Fixes #14219
......@@ -202,5 +202,24 @@ public async Task Tuple()
parseOptions: TestOptions.Regular,
withScriptOption: true);
}
[WorkItem(14219, "https://github.com/dotnet/roslyn/issues/14219")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateConstructorFromMembers)]
public async Task TestUnderscoreInName1()
{
await TestAsync(
@"class Program { [|int _field ;|] } ",
@"class Program { int _field ; public Program ( int field ) { _field = field ; } } ");
}
[WorkItem(14219, "https://github.com/dotnet/roslyn/issues/14219")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateConstructorFromMembers)]
public async Task TestUnderscoreInName_PreferThis()
{
await TestAsync(
@"class Program { [|int _field ;|] } ",
@"class Program { int _field ; public Program ( int field ) { this._field = field ; } } ",
options: Option(CodeStyleOptions.QualifyFieldAccess, CodeStyleOptions.TrueWithSuggestionEnforcement));
}
}
}
\ No newline at end of file
......@@ -97,12 +97,14 @@ private static bool IsField(ISymbol symbol)
refKind: RefKind.None,
isParams: false,
type: type,
name: symbol.Name.ToCamelCase()));
name: symbol.Name.ToCamelCase().TrimStart(s_underscore)));
}
return parameters;
}
private static readonly char[] s_underscore = { '_' };
protected IMethodSymbol GetDelegatedConstructor(
INamedTypeSymbol containingType,
List<IParameterSymbol> parameters)
......
......@@ -281,7 +281,7 @@ private static bool CanBindToken(SyntaxToken token)
arguments.Select(a => a.NameColon != null)).ToList();
var parameterNames = reservedNames.Concat(
arguments.Select(a => semanticModel.GenerateNameForArgument(a))).ToList();
arguments.Select(semanticModel.GenerateNameForArgument)).ToList();
return GenerateNames(reservedNames, isFixed, parameterNames);
}
......
......@@ -197,9 +197,10 @@ private static bool TryGetValue(IDictionary<string, ISymbol> dictionary, string
if (TryGetValue(parameterToExistingFieldMap, parameterName, out fieldName) ||
TryGetValue(parameterToNewFieldMap, parameterName, out fieldName))
{
var fieldAccess = factory.MemberAccessExpression(factory.ThisExpression(), factory.IdentifierName(fieldName))
.WithAdditionalAnnotations(Simplifier.Annotation);
var assignExpression = factory.AssignmentStatement(
factory.MemberAccessExpression(factory.ThisExpression(), factory.IdentifierName(fieldName)),
factory.IdentifierName(parameterName));
fieldAccess, factory.IdentifierName(parameterName));
var statement = factory.ExpressionStatement(assignExpression);
yield return statement;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册