Browse Source

Fixed enum base type bug.

newNRvisualizers
Mike Krüger 13 years ago
parent
commit
bd201520a1
  1. 17
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 19
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  3. 26
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/EnumContextTests.cs

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

@ -852,13 +852,26 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -852,13 +852,26 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return null;
}
string[] validEnumBaseTypes = { "byte", "sbyte", "short", "int", "long", "ushort", "uint", "ulong" };
IEnumerable<ICompletionData> HandleEnumContext()
{
var cu = ParseStub("a", false);
if (cu == null) {
return null;
}
var curType = cu.GetNodeAt<TypeDeclaration> (location);
if (curType == null || curType.ClassType != ClassType.Enum) {
cu = ParseStub("a {}", false);
var node = cu.GetNodeAt<AstType>(location);
if (node != null) {
var wrapper = new CompletionDataWrapper(this);
AddKeywords(wrapper, validEnumBaseTypes);
return wrapper.Result;
}
}
var member = cu.GetNodeAt<EnumMemberDeclaration>(location);
if (member != null && member.NameToken.EndLocation < location) {
return DefaultControlSpaceItems();
@ -887,7 +900,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -887,7 +900,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (node is Accessor) {
node = node.Parent;
}
var contextList = new CompletionDataWrapper (this);
var contextList = new CompletionDataWrapper(this);
if (node is PropertyDeclaration) {
contextList.AddCustom("get");
contextList.AddCustom("set");

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

@ -4971,5 +4971,24 @@ $#region S$ @@ -4971,5 +4971,24 @@ $#region S$
}
}");
}
[Test()]
public void TestParameterAttributeContext()
{
CombinedProviderTest(
@"using System;
using System.Runtime.InteropServices;
public class Test
{
$static extern IntPtr somefunction([MarshalAs(UnmanagedType.LPTStr)] string fileName, [MarshalAs(UnmanagedType.$
}
", provider => {
Assert.IsNotNull(provider.Find("LPStr"), "'LPStr' not found.");
});
}
}
}

26
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/EnumContextTests.cs

@ -95,9 +95,9 @@ enum Name { @@ -95,9 +95,9 @@ enum Name {
[Test()]
public void TestEnumInitializerContinuation ()
public void TestEnumInitializerContinuation()
{
CodeCompletionBugTests.CombinedProviderTest (
CodeCompletionBugTests.CombinedProviderTest(
@"using System;
[Flags]
enum Name {
@ -106,9 +106,27 @@ enum Name { @@ -106,9 +106,27 @@ enum Name {
Combined $= Name.$
}
", provider => {
Assert.IsNotNull (provider.Find ("Flag1"), "value 'Flag1' not found.");
Assert.IsNotNull (provider.Find ("Flag2"), "value 'Flag2' not found.");
Assert.IsNotNull(provider.Find("Flag1"), "value 'Flag1' not found.");
Assert.IsNotNull(provider.Find("Flag2"), "value 'Flag2' not found.");
});
}
[Test()]
public void TestEnumBaseTypes()
{
string[] integralTypes = { "byte", "sbyte", "short", "int", "long", "ushort", "uint", "ulong" };
CodeCompletionBugTests.CombinedProviderTest(
@"using System;
enum Name : $b$
{
Flag1
}
", provider => {
foreach (var type in integralTypes)
Assert.IsNotNull(provider.Find(type), "value '" + type + "' not found.");
Assert.IsNull(provider.Find("char"), "type 'char' found.");
});
}
}
}

Loading…
Cancel
Save