Browse Source

Added named argument context.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
5377104c8a
  1. 24
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 42
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

24
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -472,6 +472,30 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -472,6 +472,30 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
}
if (n != null && n.Parent is InvocationExpression) {
var invokeResult = ResolveExpression (identifierStart.Item1, ((InvocationExpression)n.Parent).Target, identifierStart.Item3);
var mgr = invokeResult != null ? invokeResult.Item1 as MethodGroupResolveResult : null;
if (mgr != null) {
foreach (var method in mgr.Methods) {
foreach (var p in method.Parameters) {
contextList.AddVariable (p);
}
}
}
}
if (n != null && n.Parent is ObjectCreateExpression) {
var invokeResult = ResolveExpression (identifierStart.Item1, n.Parent, identifierStart.Item3);
var mgr = invokeResult != null ? invokeResult.Item1 as ResolveResult : null;
if (mgr != null) {
foreach (var constructor in mgr.Type.GetConstructors ()) {
foreach (var p in constructor.Parameters) {
contextList.AddVariable (p);
}
}
}
}
if (n is Identifier && n.Parent is ForeachStatement) {
if (controlSpace)

42
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -4054,5 +4054,47 @@ namespace Test @@ -4054,5 +4054,47 @@ namespace Test
}");
Assert.IsTrue (provider == null || provider.Count == 0, "provider should be empty.");
}
[Test()]
public void TestNamedParameters ()
{
CombinedProviderTest (
@"class MyClass {
string Bar { get; set; }
void MethodOne(string foo="""", string bar="""")
{
}
void MethodTwo() {
$MethodOne(b$
}
}", provider => {
Assert.IsNotNull (provider.Find ("bar"), "'bar' not found.");
Assert.IsNotNull (provider.Find ("foo"), "'foo' not found.");
});
}
[Test()]
public void TestNamedParametersConstructorCase ()
{
CombinedProviderTest (
@"class MyClass {
MyClass(string foo="""", string bar="""")
{
}
void MethodTwo() {
$new MyClass(b$
}
}", provider => {
Assert.IsNotNull (provider.Find ("bar"), "'bar' not found.");
Assert.IsNotNull (provider.Find ("foo"), "'foo' not found.");
});
}
}
}

Loading…
Cancel
Save