diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 36ddcfc6e6..a08427fe62 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -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 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) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index c0f36908ac..69455ea4d0 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -5960,5 +5960,41 @@ public class Testing Assert.IsNotNull(provider.Find("new()")); }); } + + /// + /// Bug 10361 - No completion for optional attribute arguments + /// + [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:")); + }); + } + + + + } }