Browse Source

CecilLoader: add support for indexers

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
894630051a
  1. 19
      ICSharpCode.NRefactory.Tests/TypeSystem/TestInterningProvider.cs
  2. 2
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs
  3. 16
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs
  4. 13
      ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs

19
ICSharpCode.NRefactory.Tests/TypeSystem/TestInterningProvider.cs

@ -123,22 +123,15 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -123,22 +123,15 @@ namespace ICSharpCode.NRefactory.TypeSystem
return list;
}
void Run(ITypeDefinition c)
{
foreach (ITypeDefinition n in c.InnerClasses) {
Run(n);
}
Intern(c.Name);
foreach (IMember m in c.Members) {
Intern(m);
}
}
[Test]
public void PrintStatistics()
{
foreach (var c in CecilLoaderTests.Mscorlib.GetClasses()) {
Run(c);
foreach (var c in TreeTraversal.PreOrder(CecilLoaderTests.Mscorlib.GetClasses(), c => c.InnerClasses)) {
Intern(c.Namespace);
Intern(c.Name);
foreach (IMember m in c.Members) {
Intern(m);
}
}
var stats =

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

@ -41,5 +41,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase @@ -41,5 +41,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase
public int PropertyWithProtectedSetter { get; protected set; }
public object PropertyWithPrivateSetter { get; private set; }
public string this[int index] { get { return "Test"; } }
}
}

16
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs

@ -151,6 +151,8 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -151,6 +151,8 @@ namespace ICSharpCode.NRefactory.TypeSystem
{
var testClass = testCasePC.GetClass(typeof(PropertyTest));
IProperty p = testClass.Properties.Single(pr => pr.Name == "PropertyWithProtectedSetter");
Assert.IsTrue(p.CanGet);
Assert.IsTrue(p.CanSet);
Assert.AreEqual(Accessibility.Public, p.Accessibility);
Assert.AreEqual(Accessibility.Public, p.GetterAccessibility);
Assert.AreEqual(Accessibility.Protected, p.SetterAccessibility);
@ -161,9 +163,23 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -161,9 +163,23 @@ namespace ICSharpCode.NRefactory.TypeSystem
{
var testClass = testCasePC.GetClass(typeof(PropertyTest));
IProperty p = testClass.Properties.Single(pr => pr.Name == "PropertyWithPrivateSetter");
Assert.IsTrue(p.CanGet);
Assert.IsTrue(p.CanSet);
Assert.AreEqual(Accessibility.Public, p.Accessibility);
Assert.AreEqual(Accessibility.Public, p.GetterAccessibility);
Assert.AreEqual(Accessibility.Private, p.SetterAccessibility);
}
[Test]
public void Indexer()
{
var testClass = testCasePC.GetClass(typeof(PropertyTest));
IProperty p = testClass.Properties.Single(pr => pr.IsIndexer);
Assert.IsTrue(p.CanGet);
Assert.AreEqual(Accessibility.Public, p.Accessibility);
Assert.AreEqual(Accessibility.Public, p.GetterAccessibility);
Assert.IsFalse(p.CanSet);
Assert.AreEqual(Accessibility.None, p.SetterAccessibility);
}
}
}

13
ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
@ -599,6 +600,18 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -599,6 +600,18 @@ namespace ICSharpCode.NRefactory.TypeSystem
this.Properties.Add(loader.ReadProperty(property, this));
}
}
var defaultMemberAttribute = typeDefinition.CustomAttributes.FirstOrDefault(
a => a.AttributeType.FullName == typeof(System.Reflection.DefaultMemberAttribute).FullName);
if (defaultMemberAttribute != null && defaultMemberAttribute.ConstructorArguments.Count == 1) {
string defaultMemberName = defaultMemberAttribute.ConstructorArguments[0].Value as string;
if (defaultMemberName != null) {
foreach (DefaultProperty p in this.Properties) {
if (p.Name == defaultMemberName) {
p.IsIndexer = true;
}
}
}
}
}
if (typeDefinition.HasEvents) {
foreach (EventDefinition ev in typeDefinition.Events) {

Loading…
Cancel
Save