Browse Source

Undo reordering of base types

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
9d2957372b
  1. 10
      ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemLoaderTests.cs
  2. 8
      ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs

10
ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemLoaderTests.cs

@ -1095,8 +1095,8 @@ namespace ICSharpCode.Decompiler.Tests.TypeSystem @@ -1095,8 +1095,8 @@ namespace ICSharpCode.Decompiler.Tests.TypeSystem
{
ITypeDefinition type = GetTypeDefinition(typeof(IShadowTestDerived));
Assert.That(type.DirectBaseTypes.Count() == 2, "Should have exactly two direct base types");
Assert.That(type.DirectBaseTypes.First() == GetTypeDefinition(typeof(IShadowTestBase)), "Base type should be IShadowTestBase");
Assert.That(type.DirectBaseTypes.Skip(1).First().IsKnownType(KnownTypeCode.Object), "Base type should be object");
Assert.That(type.DirectBaseTypes.Skip(1).First() == GetTypeDefinition(typeof(IShadowTestBase)), "Base type should be IShadowTestBase");
Assert.That(type.DirectBaseTypes.First().IsKnownType(KnownTypeCode.Object), "Base type should be object");
}
[Test]
@ -1104,9 +1104,9 @@ namespace ICSharpCode.Decompiler.Tests.TypeSystem @@ -1104,9 +1104,9 @@ namespace ICSharpCode.Decompiler.Tests.TypeSystem
{
ITypeDefinition type = GetTypeDefinition(typeof(IDerived));
Assert.That(type.DirectBaseTypes.Count() == 3, "Should have exactly three direct base types");
Assert.That(type.DirectBaseTypes.First() == GetTypeDefinition(typeof(IBase1)), "Base type should be IBase1");
Assert.That(type.DirectBaseTypes.Skip(1).First() == GetTypeDefinition(typeof(IBase2)), "Base type should be IBase2");
Assert.That(type.DirectBaseTypes.Skip(2).First().IsKnownType(KnownTypeCode.Object), "Base type should be object");
Assert.That(type.DirectBaseTypes.First().IsKnownType(KnownTypeCode.Object), "Base type should be object");
Assert.That(type.DirectBaseTypes.Skip(1).First() == GetTypeDefinition(typeof(IBase1)), "Base type should be IBase1");
Assert.That(type.DirectBaseTypes.Skip(2).First() == GetTypeDefinition(typeof(IBase2)), "Base type should be IBase2");
}
[Test]

8
ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs

@ -261,10 +261,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -261,10 +261,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
var context = new GenericContext(TypeParameters);
var interfaceImplCollection = td.GetInterfaceImplementations();
baseTypes = new List<IType>(1 + interfaceImplCollection.Count);
foreach (var h in interfaceImplCollection) {
var iface = metadata.GetInterfaceImplementation(h);
baseTypes.Add(assembly.ResolveType(iface.Interface, context, iface.GetCustomAttributes()));
}
if (!td.BaseType.IsNil) {
baseTypes.Add(assembly.ResolveType(td.BaseType, context));
} else if (Kind == TypeKind.Interface) {
@ -272,6 +268,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -272,6 +268,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
// but the type system expects every interface to derive from System.Object as well.
baseTypes.Add(Compilation.FindType(KnownTypeCode.Object));
}
foreach (var h in interfaceImplCollection) {
var iface = metadata.GetInterfaceImplementation(h);
baseTypes.Add(assembly.ResolveType(iface.Interface, context, iface.GetCustomAttributes()));
}
return LazyInit.GetOrSet(ref this.directBaseTypes, baseTypes);
}
}

Loading…
Cancel
Save