From 9d2957372be96bd33530e14c4985d990ba2190b2 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 28 Jun 2018 16:39:31 +0200 Subject: [PATCH] Undo reordering of base types --- .../TypeSystem/TypeSystemLoaderTests.cs | 10 +++++----- .../Implementation/MetadataTypeDefinition.cs | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemLoaderTests.cs b/ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemLoaderTests.cs index 3c0a9bdc8..936df3910 100644 --- a/ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemLoaderTests.cs +++ b/ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemLoaderTests.cs @@ -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 { 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] diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs index 7e34680af..5e2c4771f 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs @@ -261,10 +261,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation var context = new GenericContext(TypeParameters); var interfaceImplCollection = td.GetInterfaceImplementations(); baseTypes = new List(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 // 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); } }