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 @@ -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 {

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

@ -80,6 +80,17 @@ namespace ICSharpCode.NRefactory.CSharp.Parser @@ -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]

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

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

Loading…
Cancel
Save