Output: Render generic methods and constructors correctly

This commit is contained in:
Katy Coe
2019-11-02 01:44:33 +01:00
parent fdab846710
commit f2fcd7cd59

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2017-2019 Katy Coe - https://www.djkaty.com - https://github.com/djkaty // Copyright (c) 2017-2019 Katy Coe - https://www.djkaty.com - https://github.com/djkaty
// All rights reserved // All rights reserved
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@@ -75,7 +76,7 @@ namespace Il2CppInspector
// Roll-up multicast delegates to use the 'delegate' syntactic sugar // Roll-up multicast delegates to use the 'delegate' syntactic sugar
if (type.IsClass && type.IsSealed && type.BaseType?.FullName == "System.MulticastDelegate") { if (type.IsClass && type.IsSealed && type.BaseType?.FullName == "System.MulticastDelegate") {
var del = type.DeclaredMethods.First(x => x.Name == "Invoke"); var del = type.DeclaredMethods.First(x => x.Name == "Invoke");
writer.Write($"delegate {del.ReturnType.CSharpName} {type.Name}("); writer.Write($"delegate {del.ReturnType.CSharpName} {type.CSharpTypeDeclarationName}(");
bool first = true; bool first = true;
foreach (var param in del.DeclaredParameters) { foreach (var param in del.DeclaredParameters) {
@@ -117,7 +118,7 @@ namespace Il2CppInspector
@base.Insert(0, type.ElementType.CSharpName); @base.Insert(0, type.ElementType.CSharpName);
var baseText = @base.Count > 0 ? " : " + string.Join(", ", @base) : string.Empty; var baseText = @base.Count > 0 ? " : " + string.Join(", ", @base) : string.Empty;
writer.Write($"{type.Name}{baseText} // TypeDefIndex: {type.Index}\n" + prefix + "{\n"); writer.Write($"{type.CSharpTypeDeclarationName}{baseText} // TypeDefIndex: {type.Index}\n" + prefix + "{\n");
// Fields // Fields
if (!type.IsEnum) { if (!type.IsEnum) {
@@ -222,7 +223,7 @@ namespace Il2CppInspector
writer.Write(prefix + "\t// Constructors\n"); writer.Write(prefix + "\t// Constructors\n");
foreach (var method in type.DeclaredConstructors) { foreach (var method in type.DeclaredConstructors) {
writer.Write($"{prefix}\t{method.GetModifierString()}{method.DeclaringType.Name}("); writer.Write($"{prefix}\t{method.GetModifierString()}{method.DeclaringType.UnmangledBaseName}{method.GetTypeParametersString()}(");
writer.Write(method.GetParametersString()); writer.Write(method.GetParametersString());
writer.Write(");" + (method.VirtualAddress != 0 ? $" // {formatAddress(method.VirtualAddress)}" : "") + "\n"); writer.Write(");" + (method.VirtualAddress != 0 ? $" // {formatAddress(method.VirtualAddress)}" : "") + "\n");
} }
@@ -237,7 +238,7 @@ namespace Il2CppInspector
foreach (var method in type.DeclaredMethods.Except(usedMethods)) { foreach (var method in type.DeclaredMethods.Except(usedMethods)) {
writer.Write($"{prefix}\t{method.GetModifierString()}"); writer.Write($"{prefix}\t{method.GetModifierString()}");
if (method.Name != "op_Implicit" && method.Name != "op_Explicit") if (method.Name != "op_Implicit" && method.Name != "op_Explicit")
writer.Write($"{method.ReturnType.CSharpName} {method.CSharpName}"); writer.Write($"{method.ReturnType.CSharpName} {method.CSharpName}{method.GetTypeParametersString()}");
else else
writer.Write($"{method.CSharpName}{method.ReturnType.CSharpName}"); writer.Write($"{method.CSharpName}{method.ReturnType.CSharpName}");
writer.Write("(" + method.GetParametersString()); writer.Write("(" + method.GetParametersString());