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

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

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

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

@ -485,7 +485,7 @@ class TestClass
}" }"
); );
} }
[Test] [Test]
public void StopsAtUnresolvableAssignmentTarget() public void StopsAtUnresolvableAssignmentTarget()
{ {
@ -501,7 +501,17 @@ class TestClass
Variable.Nested = new TestClass(); Variable.Nested = new TestClass();
} }
}" }"
); );
}
[Test]
public void NoActionForSingleStepInitializers()
{
TestWrongContext<ConvertToInitializerAction>(baseText + @"
var variable = new Test$Class ();
var s = string.Empty;
}
}");
} }
[Test] [Test]
@ -518,7 +528,7 @@ class TestClass
}" }"
); );
} }
[Test] [Test]
public void IgnoresSingleCreation() public void IgnoresSingleCreation()
{ {
@ -529,8 +539,23 @@ class TestClass
{ {
var variable = new $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