CS: Don't output redundant interfaces in type declarations

This commit is contained in:
Katy Coe
2020-06-22 22:56:26 +02:00
parent 42310483af
commit 181d3ad600
2 changed files with 4 additions and 1 deletions

View File

@@ -578,7 +578,7 @@ namespace Il2CppInspector.Outputs
sb.Append(prefix + type.GetModifierString());
var @base = type.ImplementedInterfaces.Select(x => x.GetScopedCSharpName(scope, isPartOfTypeDeclaration: true)).ToList();
var @base = type.NonInheritedInterfaces.Select(x => x.GetScopedCSharpName(scope, isPartOfTypeDeclaration: true)).ToList();
if (type.BaseType != null && type.BaseType.FullName != "System.Object" && type.BaseType.FullName != "System.ValueType" && !type.IsEnum)
@base.Insert(0, type.BaseType.GetScopedCSharpName(scope, isPartOfTypeDeclaration: true));
if (type.IsEnum && type.GetEnumUnderlyingType().FullName != "System.Int32") // enums derive from int by default

View File

@@ -654,6 +654,9 @@ namespace Il2CppInspector.Reflection
}
}
// Get only interfaces not inherited from base interfaces
public IEnumerable<TypeInfo> NonInheritedInterfaces => ImplementedInterfaces.Except(ImplementedInterfaces.SelectMany(t => t.ImplementedInterfaces));
public bool IsAbstract => (Attributes & TypeAttributes.Abstract) == TypeAttributes.Abstract;
public bool IsArray { get; }
public bool IsByRef { get; }