Browse Source

Improved completion of enums.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
5218417fa8
  1. 18
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 20
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -741,6 +741,24 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -741,6 +741,24 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
AddKeywords (wrapper, primitiveTypesKeywords);
wrapper.Result.AddRange (factory.CreateCodeTemplateCompletionData ());
if (node.Role == AstNode.Roles.Argument) {
var resolved = ResolveExpression (CSharpParsedFile, node.Parent, Unit);
var invokeResult = resolved != null ? resolved.Item1 as CSharpInvocationResolveResult : null;
if (invokeResult != null) {
int argNum = 0;
foreach (var arg in node.Parent.Children.Where (c => c.Role == AstNode.Roles.Argument)) {
if (arg == node)
break;
argNum++;
}
var param = argNum < invokeResult.Member.Parameters.Count ? invokeResult.Member.Parameters [argNum] : null;
if (param != null && param.Type.Kind == TypeKind.Enum) {
AddEnumMembers (wrapper, param.Type, state);
}
}
}
}
static bool IsInSwitchContext (AstNode node)

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

@ -428,7 +428,27 @@ namespace ThisOne { @@ -428,7 +428,27 @@ namespace ThisOne {
Assert.IsNotNull (provider);
Assert.IsNotNull (provider.Find ("Other.TheEnum"), "Other.TheEnum not found.");
}
[Test()]
public void TestInnerEnum ()
{
var provider = CreateProvider (
@"class Other {
public enum TheEnum { One, Two }
public Other (TheEnum e) { }
}
public class Test {
public void TestMethod () {
$new Other (O$
}
}");
Assert.IsNotNull (provider);
Assert.IsNotNull (provider.Find ("Other.TheEnum"), "'Other.TheEnum' not found.");
}
/// <summary>
/// Bug 318834 - autocompletion kicks in when inputting decimals
/// </summary>

Loading…
Cancel
Save