diff --git a/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs b/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs index e93d26c50d..9eeed5209b 100644 --- a/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs @@ -651,6 +651,14 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem a.Parameters.Add(indexerParam); } DefaultUnresolvedParameter param = null; + + // copy indexer parameters to the accessor + if (p is IUnresolvedParameterizedMember) { + foreach (var parameter in ((IUnresolvedParameterizedMember)p).Parameters) { + a.Parameters.Add (parameter); + } + } + if (accessor.Role == PropertyDeclaration.GetterRole) { a.ReturnType = p.ReturnType; } else { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs index 38567372d5..d8e1109527 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs @@ -80,6 +80,17 @@ namespace ICSharpCode.NRefactory.CSharp.Parser Assert.AreEqual(genericInterfaceOfString, interfaceMethod2.DeclaringType); Assert.IsTrue(interfaceMethod2.Parameters[1].IsRef); } + + [Test] + public void IndexerParameters() + { + var testClass = GetTypeDefinition(typeof(NRefactory.TypeSystem.TestCase.IndexerTest)); + IProperty p = testClass.Properties.Single(pr => pr.IsIndexer); + Assert.AreEqual("Item", p.Name); + + Assert.AreEqual(new[] { "index" }, p.Getter.Parameters.Select(x => x.Name).ToArray()); + Assert.AreEqual(new[] { "index", "value" }, p.Setter.Parameters.Select(x => x.Name).ToArray()); + } } [TestFixture] diff --git a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs index 1054b0ccc6..165b3eafd7 100644 --- a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs +++ b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs @@ -180,4 +180,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase void IGenericInterface.Test(string a, T b) {} void IGenericInterface.Test(string a, ref T b) {} } + + public class IndexerTest + { + public string this[int index] { get { return "Test"; } set {} } + } } +