From bd09136b7387a9bc69f57589586d41de3de44b1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 23 May 2016 21:49:14 +0200 Subject: Fixed 'Bug 41245 - Attribute code completion not showing all constructors and showing too many things' --- .../ParameterHinting/ParameterHintingEngine.cs | 10 ++-- .../Features/CodeCompletion/NR6/MiscTests.cs | 54 ++++++++++++++++++++++ .../ParameterHinting/ParameterHintingTests.cs | 53 +++++++++++++++++++++ 3 files changed, 114 insertions(+), 3 deletions(-) diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Features/ParameterHinting/ParameterHintingEngine.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Features/ParameterHinting/ParameterHintingEngine.cs index 0dff09ee36..a558a6ed71 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Features/ParameterHinting/ParameterHintingEngine.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Features/ParameterHinting/ParameterHintingEngine.cs @@ -264,9 +264,13 @@ namespace ICSharpCode.NRefactory6.CSharp.Completion var info = semanticModel.GetSymbolInfo(node, cancellationToken); var result = new ParameterHintingResult(node.SpanStart); var resolvedMethod = info.Symbol as IMethodSymbol; - if (resolvedMethod != null) - result.AddData(factory.CreateConstructorProvider(resolvedMethod)); - result.AddRange(info.CandidateSymbols.OfType().Select (m => factory.CreateConstructorProvider(m))); + if (resolvedMethod != null) { + foreach (var c in resolvedMethod.ContainingType.GetMembers ().OfType ().Where (m => m.MethodKind == MethodKind.Constructor)) { + result.AddData (factory.CreateConstructorProvider (c)); + } + } else { + result.AddRange (info.CandidateSymbols.OfType ().Select (m => factory.CreateConstructorProvider (m))); + } return result; } diff --git a/main/tests/MonoDevelop.CSharpBinding.Tests/Features/CodeCompletion/NR6/MiscTests.cs b/main/tests/MonoDevelop.CSharpBinding.Tests/Features/CodeCompletion/NR6/MiscTests.cs index 2ade84ef1f..c5fa583f30 100644 --- a/main/tests/MonoDevelop.CSharpBinding.Tests/Features/CodeCompletion/NR6/MiscTests.cs +++ b/main/tests/MonoDevelop.CSharpBinding.Tests/Features/CodeCompletion/NR6/MiscTests.cs @@ -27,6 +27,7 @@ using System; using NUnit.Framework; using ICSharpCode.NRefactory6.CSharp.Completion; using ICSharpCode.NRefactory6.CSharp.CodeCompletion.Roslyn; +using System.Reflection.Metadata.Ecma335.Blobs; namespace ICSharpCode.NRefactory6.CSharp.CodeCompletion.NR6 { @@ -210,5 +211,58 @@ class Test Assert.AreEqual (2, data.OverloadedData.Count); } + /// + /// Bug 41245 - Attribute code completion not showing all constructors and showing too many things + /// + [Ignore("Need to think about/discuss it - would maybe kill implement by usage oportunities.")] + [Test] + public void TestBug41245 () + { + var provider = CreateProvider ( + @" +using System; + +namespace cp654fz7 +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false)] + public sealed class JsonPropertyAttribute : Attribute + { + internal bool? _isReference; + internal int? _order; + public bool IsReference + { + get { return _isReference ?? default(bool); } + set { _isReference = value; } + } + public int Order + { + get { return _order ?? default(int); } + set { _order = value; } + } + public string PropertyName { get; set; } + public JsonPropertyAttribute() + { + } + + public JsonPropertyAttribute(string propertyName) + { + PropertyName = propertyName; + } + } + + class MainClass + { + [JsonProperty(""Hello"", $$)] + public object MyProperty { get; set; } + + public static void Main(string[] args) + { + } + } +} +"); + Assert.IsNotNull (provider, "provider was not created."); + Assert.IsNull (provider.Find ("MainClass")); + } } } \ No newline at end of file diff --git a/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs b/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs index 1cd5727b75..8d6579fff4 100644 --- a/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs +++ b/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs @@ -1362,5 +1362,58 @@ namespace Test40018 Assert.IsNotNull (provider, "provider was not created."); Assert.AreEqual (3, provider.Count); } + + /// + /// Bug 41245 - Attribute code completion not showing all constructors and showing too many things + /// + [Test] + public void TestBug41245 () + { + var provider = CreateProvider ( + @" +using System; + +namespace cp654fz7 +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false)] + public sealed class JsonPropertyAttribute : Attribute + { + internal bool? _isReference; + internal int? _order; + public bool IsReference + { + get { return _isReference ?? default(bool); } + set { _isReference = value; } + } + public int Order + { + get { return _order ?? default(int); } + set { _order = value; } + } + public string PropertyName { get; set; } + public JsonPropertyAttribute() + { + } + + public JsonPropertyAttribute(string propertyName) + { + PropertyName = propertyName; + } + } + + class MainClass + { + [JsonProperty($$)] + public object MyProperty { get; set; } + + public static void Main(string[] args) + { + } + } +} +"); + Assert.IsNotNull (provider, "provider was not created."); + Assert.AreEqual (2, provider.Count); + } } } \ No newline at end of file -- cgit v1.2.3 From 9b8a2ee62dc40ba8b3cdc682f268ff27bbf9cc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 20 Jun 2016 12:08:06 +0200 Subject: Added missing test. Was removed by a merge conflict. --- .../ParameterHinting/ParameterHintingTests.cs | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs b/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs index 241297c1f7..8d6579fff4 100644 --- a/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs +++ b/main/tests/MonoDevelop.CSharpBinding.Tests/Features/ParameterHinting/ParameterHintingTests.cs @@ -1362,5 +1362,58 @@ namespace Test40018 Assert.IsNotNull (provider, "provider was not created."); Assert.AreEqual (3, provider.Count); } + + /// + /// Bug 41245 - Attribute code completion not showing all constructors and showing too many things + /// + [Test] + public void TestBug41245 () + { + var provider = CreateProvider ( + @" +using System; + +namespace cp654fz7 +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false)] + public sealed class JsonPropertyAttribute : Attribute + { + internal bool? _isReference; + internal int? _order; + public bool IsReference + { + get { return _isReference ?? default(bool); } + set { _isReference = value; } + } + public int Order + { + get { return _order ?? default(int); } + set { _order = value; } + } + public string PropertyName { get; set; } + public JsonPropertyAttribute() + { + } + + public JsonPropertyAttribute(string propertyName) + { + PropertyName = propertyName; + } + } + + class MainClass + { + [JsonProperty($$)] + public object MyProperty { get; set; } + + public static void Main(string[] args) + { + } } } +"); + Assert.IsNotNull (provider, "provider was not created."); + Assert.AreEqual (2, provider.Count); + } + } +} \ No newline at end of file -- cgit v1.2.3