Browse Source

[CodeIssues] FormatStringIssue: Handle extra arguments that do not have a matching formal parameter.

newNRvisualizers
Simon Lindgren 13 years ago
parent
commit
3ae6b9f450
  1. 13
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/FormatStringIssue.cs
  2. 17
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/FormatStringTests.cs

13
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/FormatStringIssue.cs

@ -58,6 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -58,6 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public override void VisitInvocationExpression(InvocationExpression invocationExpression)
{
Console.WriteLine(invocationExpression.GetText());
base.VisitInvocationExpression(invocationExpression);
var invocationResolveResult = context.Resolve(invocationExpression) as CSharpInvocationResolveResult;
if (invocationResolveResult == null)
@ -114,9 +115,15 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -114,9 +115,15 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
arguments = new List<Expression>();
var argumentToParameterMap = invocationResolveResult.GetArgumentToParameterMap();
var resolvedParameters = invocationResolveResult.Member.Parameters;
for (int i = 0; i < invocationExpression.Arguments.Count; i++) {
var parameter = resolvedParameters[argumentToParameterMap[i]];
var argument = invocationExpression.Arguments.Skip(i).First();
var allArguments = invocationExpression.Arguments.ToArray();
for (int i = 0; i < allArguments.Length; i++) {
var parameterIndex = argumentToParameterMap[i];
if (parameterIndex < 0 || parameterIndex >= resolvedParameters.Count) {
// No valid mapping for this parameter, skip it
continue;
}
var parameter = resolvedParameters[parameterIndex];
var argument = allArguments[i];
if (parameter.Type.Equals(stringType) && parameterNames.Contains(parameter.Name) && argument is PrimitiveExpression) {
format = (string)((PrimitiveExpression)argument).Value;
formatStart = argument.StartLocation;

17
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/FormatStringTests.cs

@ -133,6 +133,23 @@ class TestClass @@ -133,6 +133,23 @@ class TestClass
var issues = GetIssues (new FormatStringIssue (), input, out context);
Assert.AreEqual (0, issues.Count);
}
[Test]
public void HandlesCallsWithExtraArguments()
{
var input = @"
class TestClass
{
void Foo()
{
Foo(1);
}
}";
TestRefactoringContext context;
var issues = GetIssues (new FormatStringIssue (), input, out context);
Assert.AreEqual (0, issues.Count);
}
}
}

Loading…
Cancel
Save