Browse Source

Fixed attribute completion bug.

pull/32/merge
Mike Krüger 13 years ago
parent
commit
7427e66a88
  1. 10
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 36
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -917,8 +917,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -917,8 +917,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
// add attribute properties.
if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) {
var resolved = astResolver.Resolve(n.Parent);
AddAttributeProperties(contextList, resolved);
var rr = ResolveExpression(n.Parent);
if (rr != null)
AddAttributeProperties(contextList, rr.Item1);
}
} else {
csResolver = GetState();
@ -1292,6 +1293,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1292,6 +1293,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
foreach (var field in resolved.Type.GetFields (p => p.Accessibility == Accessibility.Public)) {
wrapper.AddMember(field);
}
foreach (var constructor in resolved.Type.GetConstructors (p => p.Accessibility == Accessibility.Public)) {
foreach (var p in constructor.Parameters) {
wrapper.AddNamedParameterVariable(p);
}
}
}
void AddContextCompletion(CompletionDataWrapper wrapper, CSharpResolver state, AstNode node)

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

@ -5960,5 +5960,41 @@ public class Testing @@ -5960,5 +5960,41 @@ public class Testing
Assert.IsNotNull(provider.Find("new()"));
});
}
/// <summary>
/// Bug 10361 - No completion for optional attribute arguments
/// </summary>
[Test]
public void TestBug10361 ()
{
CombinedProviderTest(
@"using System;
namespace test {
class RequestAttribute : Attribute {
public int RequestId { get; set; }
public bool RequireLogin { get; set; }
public RequestAttribute (int requestId, bool requireLogin = false) {
RequestId = requestId;
RequireLogin = requireLogin;
}
}
class MainClass {
[RequestAttribute(5$, r$)]
public static void Main (string[] args) {
Console.WriteLine(""Hello World!"");
}
}
}
", provider => {
Assert.IsNotNull(provider.Find("requireLogin:"));
});
}
}
}

Loading…
Cancel
Save