Browse Source

[CodeActions] Fix bugs in ConvertToInitializer.

newNRvisualizers
Simon Lindgren 13 years ago
parent
commit
522d6c6cbd
  1. 17
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs
  2. 44
      ICSharpCode.NRefactory.Tests/CSharp/CodeActions/ConvertToInitializer/ConvertToInitializerTests.cs

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

@ -159,7 +159,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -159,7 +159,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var initializerPath = InitializerPath.FromResolveResult(argumentLocalResolveResult);
if (initializerPath == null || !initializers.ContainsKey(initializerPath))
return false;
tuple.Elements.Add(initializers[initializerPath]);
// Add a clone, since we do not yet know if this is where the initializer will be used
var initializerClone = initializers[initializerPath].Clone();
tuple.Elements.Add(initializerClone);
} else {
tuple.Elements.Add(argument.Clone());
}
@ -167,6 +169,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -167,6 +169,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
ReplacementNodeHelper.AddReplacementAnnotation(tuple, expressionStatement);
var targetPath = InitializerPath.FromResolveResult(targetResult);
if (targetPath == null || !initializers.ContainsKey(targetPath))
return false;
InsertImplicitInitializersForPath(targetPath);
var targetInitializer = initializers [targetPath];
AddToInitializer(targetInitializer, tuple);
@ -196,13 +200,15 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -196,13 +200,15 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var rightResolveResult = context.Resolve(initializer) as LocalResolveResult;
if (rightResolveResult != null) {
var rightPath = InitializerPath.FromResolveResult(rightResolveResult);
if (rightPath != null && initializers.ContainsKey(rightPath)) {
var rightInitializer = initializers [rightPath];
if (rightInitializer != null) {
rightInitializer.AddAnnotation(new ReplacementNodeAnnotation() { ReplacedNode = node });
ReplacementNodeHelper.AddReplacementAnnotation(rightInitializer, node);
initializers.Remove(rightPath);
initializers [variablePath] = rightInitializer;
if (rightPath == mainInitializerPath) {
mainInitializerPath = variablePath;
}
}
} else {
initializers [variablePath] = ReplacementNodeHelper.CloneWithReplacementAnnotation(initializer, node);
}
@ -223,7 +229,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -223,7 +229,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
var rightResolveResult = context.Resolve(right) as LocalResolveResult;
var leftResolveResult = context.Resolve(left);
var leftPath = InitializerPath.FromResolveResult(leftResolveResult);
Expression initializer;
if (rightResolveResult != null) {
var rightPath = InitializerPath.FromResolveResult(rightResolveResult);
@ -235,6 +240,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -235,6 +240,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
} else {
initializer = right.Clone();
}
var leftPath = InitializerPath.FromResolveResult(leftResolveResult);
if (leftPath == null) {
return false;
}
// Move replacement annotations over, in case this is the second assignment
// to the same variable.
AddOldAnnotationsToInitializer(leftPath, initializer);

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

@ -152,6 +152,25 @@ class TestClass @@ -152,6 +152,25 @@ class TestClass
}");
}
[Test]
public void UnknownTargetForAdd()
{
Test<ConvertToInitializerAction>(baseText + @"
var collection = new System.Collections.Generic.List<string> ();
var item $= new TestClass ();
item.Property = ""Value1"";
collection.Add(item);
}
}", baseText + @"
var collection = new System.Collections.Generic.List<string> ();
var item = new TestClass() {
Property = ""Value1""
};
collection.Add(item);
}
}");
}
[Test]
public void ObjectContainingCollections()
{
@ -479,8 +498,7 @@ class TestClass @@ -479,8 +498,7 @@ class TestClass
Nested = new TestClass()
};
}
}"
);
}");
}
[Test]
@ -496,8 +514,26 @@ class TestClass @@ -496,8 +514,26 @@ class TestClass
Property = ""Value""
};
}
}"
);
}");
}
[Test]
public void FinalVariableAssignmentOfOtherInitializer()
{
Test<ConvertToInitializerAction>(baseText + @"
var tc $= new TestClass ();
tc.Property = ""Value"";
var _variable = new TestClass ();
var variable = _variable;
}
}", baseText + @"
var tc = new TestClass () {
Property = ""Value""
};
var _variable = new Test$Class ();
var variable = _variable;
}
}");
}
[Test]

Loading…
Cancel
Save