Browse Source

[CodeActions] Fix bugs in ConvertToInitializerAction.

newNRvisualizers
Simon Lindgren 13 years ago
parent
commit
4dbac01d20
  1. 11
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs
  2. 2
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs
  3. 35
      ICSharpCode.NRefactory.Tests/CSharp/CodeActions/ConvertToInitializer/ConvertToInitializerTests.cs

11
ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs

@ -58,10 +58,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -58,10 +58,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (initializerRR == null)
return null;
IList<AstNode> statements = GetNodes(context.GetNode<Statement>());
if (statements.Count == 0)
return null;
var converter = new StatementsToInitializerConverter(context);
var newInitializer = converter.ConvertToInitializer(initializer, ref statements);
if (statements.Count == 0)
return null;
return MakeAction(context, initializer, newInitializer, statements);
}
@ -70,15 +70,16 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -70,15 +70,16 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var expression = expressionStatement.Expression as AssignmentExpression;
if (expression == null)
return null;
if (!(expression.Right is ObjectCreateExpression))
return null;
var expressionResolveResult = context.Resolve(expression.Left);
var variableResolveResult = expressionResolveResult as LocalResolveResult;
if (!(expressionResolveResult is LocalResolveResult) && !(expressionResolveResult is MemberResolveResult))
return null;
IList<AstNode> statements = GetNodes(context.GetNode<Statement>());
if (statements.Count == 0)
return null;
var converter = new StatementsToInitializerConverter(context);
var newExpression = converter.ConvertToInitializer(expression, ref statements);
if (statements.Count == 0)
return null;
return MakeAction(context, expression, newExpression, statements);
}

2
ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs

@ -325,7 +325,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -325,7 +325,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null)
continue;
var initializerPath = InitializerPath.FromResolveResult(resolveResult);
if (initializers.ContainsKey(initializerPath))
if (initializerPath != null && initializers.ContainsKey(initializerPath))
return true;
}
return false;

35
ICSharpCode.NRefactory.Tests/CSharp/CodeActions/ConvertToInitializer/ConvertToInitializerTests.cs

@ -485,7 +485,7 @@ class TestClass @@ -485,7 +485,7 @@ class TestClass
}"
);
}
[Test]
public void StopsAtUnresolvableAssignmentTarget()
{
@ -501,7 +501,17 @@ class TestClass @@ -501,7 +501,17 @@ class TestClass
Variable.Nested = new TestClass();
}
}"
);
);
}
[Test]
public void NoActionForSingleStepInitializers()
{
TestWrongContext<ConvertToInitializerAction>(baseText + @"
var variable = new Test$Class ();
var s = string.Empty;
}
}");
}
[Test]
@ -518,7 +528,7 @@ class TestClass @@ -518,7 +528,7 @@ class TestClass
}"
);
}
[Test]
public void IgnoresSingleCreation()
{
@ -529,8 +539,23 @@ class TestClass @@ -529,8 +539,23 @@ class TestClass
{
var variable = new $TestClass();
}
}"
);
}");
}
[Test]
public void DoesNotCrashOnDeclarationInitializedToVariable()
{
TestWrongContext<ConvertToInitializerAction>(@"
class TestClass
{
void F()
{
var s = """";
s$ = ""2"";
// And another statement to make the converter even try
s = """";
}
}");
}
}
}

Loading…
Cancel
Save