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

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

@ -5960,5 +5960,41 @@ public class Testing
Assert.IsNotNull(provider.Find("new()")); 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