Browse Source

Fixed type system converter case reported from "erik-kallen".

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
c4dfb27626
  1. 8
      ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs
  2. 11
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs
  3. 6
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs

8
ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs

@ -651,6 +651,14 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
a.Parameters.Add(indexerParam); a.Parameters.Add(indexerParam);
} }
DefaultUnresolvedParameter param = null; 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) { if (accessor.Role == PropertyDeclaration.GetterRole) {
a.ReturnType = p.ReturnType; a.ReturnType = p.ReturnType;
} else { } else {

11
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs

@ -80,6 +80,17 @@ namespace ICSharpCode.NRefactory.CSharp.Parser
Assert.AreEqual(genericInterfaceOfString, interfaceMethod2.DeclaringType); Assert.AreEqual(genericInterfaceOfString, interfaceMethod2.DeclaringType);
Assert.IsTrue(interfaceMethod2.Parameters[1].IsRef); 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] [TestFixture]

6
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs

@ -180,4 +180,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase
void IGenericInterface<string>.Test<T>(string a, T b) {} void IGenericInterface<string>.Test<T>(string a, T b) {}
void IGenericInterface<string>.Test<T>(string a, ref T b) {} void IGenericInterface<string>.Test<T>(string a, ref T b) {}
} }
public class IndexerTest
{
public string this[int index] { get { return "Test"; } set {} }
}
} }

Loading…
Cancel
Save