From e511b99dec663209bbc82f5e69740827896880fd Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Sun, 13 Sep 2020 14:51:20 +0200 Subject: [PATCH] Model: UnmangledBaseName / CSharpSafeName refactoring (#70) --- Il2CppInspector.Common/Outputs/CSharpCodeStubs.cs | 12 ++++++------ Il2CppInspector.Common/Reflection/MemberInfo.cs | 2 +- Il2CppInspector.Common/Reflection/MethodBase.cs | 2 +- Il2CppInspector.Common/Reflection/PropertyInfo.cs | 8 ++++---- Il2CppInspector.Common/Reflection/TypeInfo.cs | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Il2CppInspector.Common/Outputs/CSharpCodeStubs.cs b/Il2CppInspector.Common/Outputs/CSharpCodeStubs.cs index 8a304b7..a6e4b11 100644 --- a/Il2CppInspector.Common/Outputs/CSharpCodeStubs.cs +++ b/Il2CppInspector.Common/Outputs/CSharpCodeStubs.cs @@ -385,11 +385,11 @@ namespace Il2CppInspector.Outputs if (field.GetCustomAttributes(FBAttribute).Any()) { if (!SuppressMetadata) sb.Append($"/* {field.GetCustomAttributes(FBAttribute)[0].VirtualAddress.ToAddressString()} */ "); - sb.Append($"{field.FieldType.DeclaredFields[0].FieldType.GetScopedCSharpName(scope)} {field.CSharpSafeName}[0]"); // FixedElementField + sb.Append($"{field.FieldType.DeclaredFields[0].FieldType.GetScopedCSharpName(scope)} {field.CSharpName}[0]"); // FixedElementField } // Regular fields else - sb.Append($"{field.FieldType.GetScopedCSharpName(scope)} {field.CSharpSafeName}"); + sb.Append($"{field.FieldType.GetScopedCSharpName(scope)} {field.CSharpName}"); if (field.HasDefaultValue) sb.Append($" = {field.GetDefaultValueString(scope)}"); sb.Append(";"); @@ -477,7 +477,7 @@ namespace Il2CppInspector.Outputs .ToString(scope, prefix + "\t", emitPointer: !SuppressMetadata, mustCompile: MustCompile)); string modifiers = evt.AddMethod?.GetModifierString(); - sb.Append($"{prefix}\t{modifiers}event {evt.EventHandlerType.GetScopedCSharpName(scope)} {evt.CSharpSafeName}"); + sb.Append($"{prefix}\t{modifiers}event {evt.EventHandlerType.GetScopedCSharpName(scope)} {evt.CSharpName}"); if (!MustCompile) { sb.Append(" {\n"); @@ -507,14 +507,14 @@ namespace Il2CppInspector.Outputs // Crete a parameterless constructor for every relevant type when making code that compiles to mitigate CS1729 and CS7036 if (MustCompile && !type.IsInterface && !(type.IsAbstract && type.IsSealed) && !type.IsValueType && type.DeclaredConstructors.All(c => c.IsStatic || c.DeclaredParameters.Any())) - sb.Append($"{prefix}\t{(type.IsAbstract? "protected" : "public")} {type.UnmangledBaseName}() {{}} // Dummy constructor\n"); + sb.Append($"{prefix}\t{(type.IsAbstract? "protected" : "public")} {type.CSharpBaseName}() {{}} // Dummy constructor\n"); foreach (var method in type.DeclaredConstructors) { // Attributes sb.Append(method.CustomAttributes.OrderBy(a => a.AttributeType.Name) .ToString(scope, prefix + "\t", emitPointer: !SuppressMetadata, mustCompile: MustCompile)); - sb.Append($"{prefix}\t{method.GetModifierString()}{method.DeclaringType.UnmangledBaseName}{method.GetTypeParametersString(scope)}"); + sb.Append($"{prefix}\t{method.GetModifierString()}{method.DeclaringType.CSharpBaseName}{method.GetTypeParametersString(scope)}"); sb.Append($"({method.GetParametersString(scope, !SuppressMetadata)})"); if (MustCompile) { @@ -640,7 +640,7 @@ namespace Il2CppInspector.Outputs // Finalizers become destructors if (method.Name == "Finalize" && method.IsVirtual && method.ReturnType.FullName == "System.Void" && method.IsFamily) - writer.Append("~" + method.DeclaringType.UnmangledBaseName); + writer.Append("~" + method.DeclaringType.CSharpBaseName); // Regular method or operator overload else if (method.Name != "op_Implicit" && method.Name != "op_Explicit") diff --git a/Il2CppInspector.Common/Reflection/MemberInfo.cs b/Il2CppInspector.Common/Reflection/MemberInfo.cs index 0676b26..6093074 100644 --- a/Il2CppInspector.Common/Reflection/MemberInfo.cs +++ b/Il2CppInspector.Common/Reflection/MemberInfo.cs @@ -29,7 +29,7 @@ namespace Il2CppInspector.Reflection { public virtual string Name { get; protected set; } // Name of the member with @ prepended if the name is a C# reserved keyword - public string CSharpSafeName => Constants.Keywords.Contains(Name) ? "@" + Name : Name; + public virtual string CSharpName => Constants.Keywords.Contains(Name) ? "@" + Name : Name; // For top-level members in an assembly (ie. non-nested types) protected MemberInfo(Assembly asm) => Assembly = asm; diff --git a/Il2CppInspector.Common/Reflection/MethodBase.cs b/Il2CppInspector.Common/Reflection/MethodBase.cs index d2c95db..96627d2 100644 --- a/Il2CppInspector.Common/Reflection/MethodBase.cs +++ b/Il2CppInspector.Common/Reflection/MethodBase.cs @@ -92,7 +92,7 @@ namespace Il2CppInspector.Reflection return image.ReadMappedBytes(VirtualAddress.Value.Start, (int) (VirtualAddress.Value.End - VirtualAddress.Value.Start)); } - public string CSharpName => + public override string CSharpName => // Operator overload or user-defined conversion operator OperatorMethodNames.ContainsKey(Name)? "operator " + OperatorMethodNames[Name] diff --git a/Il2CppInspector.Common/Reflection/PropertyInfo.cs b/Il2CppInspector.Common/Reflection/PropertyInfo.cs index 4105aef..bc3a715 100644 --- a/Il2CppInspector.Common/Reflection/PropertyInfo.cs +++ b/Il2CppInspector.Common/Reflection/PropertyInfo.cs @@ -31,14 +31,14 @@ namespace Il2CppInspector.Reflection { public override string Name { get; protected set; } - public string CSharpName { + public override string CSharpName { get { // Explicit interface implementation if (DeclaringType.ImplementedInterfaces - .FirstOrDefault(i => CSharpSafeName.IndexOf("." + i.CSharpName, StringComparison.Ordinal) != -1) is TypeInfo @interface) - return CSharpSafeName.Substring(CSharpSafeName.IndexOf("." + @interface.CSharpName, StringComparison.Ordinal) + 1); + .FirstOrDefault(i => Name.IndexOf("." + i.CSharpName, StringComparison.Ordinal) != -1) is TypeInfo @interface) + return Name.Substring(Name.IndexOf("." + @interface.CSharpName, StringComparison.Ordinal) + 1); - // Regular method + // Regular property return Name; } } diff --git a/Il2CppInspector.Common/Reflection/TypeInfo.cs b/Il2CppInspector.Common/Reflection/TypeInfo.cs index 8f8ccb1..bde9e4b 100644 --- a/Il2CppInspector.Common/Reflection/TypeInfo.cs +++ b/Il2CppInspector.Common/Reflection/TypeInfo.cs @@ -298,10 +298,10 @@ namespace Il2CppInspector.Reflection } // Get rid of generic backticks - public string UnmangledBaseName => unmangleName(base.Name); + public string CSharpBaseName => unmangleName(base.Name); // C# colloquial name of the type (if available) - public string CSharpName { + public override string CSharpName { get { if (HasElementType) { var n = ElementType.CSharpName;