Model: Improve signature matching for overridden/hidden methods (CS0108)

This commit is contained in:
Katy Coe
2019-11-18 07:24:47 +01:00
parent 8f7b461310
commit 36f7c19b8f
3 changed files with 7 additions and 4 deletions

View File

@@ -22,7 +22,7 @@ namespace Il2CppInspector.Reflection
public override string ToString() => DeclaringType.Name + "(" + string.Join(", ", DeclaredParameters.Select(x => x.ParameterType.Name)) + ")"; public override string ToString() => DeclaringType.Name + "(" + string.Join(", ", DeclaredParameters.Select(x => x.ParameterType.Name)) + ")";
public override string GetSignatureString(Scope usingScope) => Name + GetTypeParametersString(usingScope) public override string GetSignatureString() => Name + GetFullTypeParametersString()
+ "(" + string.Join(",", DeclaredParameters.Select(x => x.GetSignatureString())) + ")"; + "(" + string.Join(",", DeclaredParameters.Select(x => x.GetSignatureString())) + ")";
} }
} }

View File

@@ -173,7 +173,7 @@ namespace Il2CppInspector.Reflection
modifiers.Append("extern "); modifiers.Append("extern ");
// Method hiding // Method hiding
if ((DeclaringType.BaseType?.GetAllMethods().Any(m => m.GetSignatureString(usingScope) == GetSignatureString(usingScope) && m.IsHideBySig) ?? false) if ((DeclaringType.BaseType?.GetAllMethods().Any(m => m.GetSignatureString() == GetSignatureString() && m.IsHideBySig) ?? false)
&& (((Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.ReuseSlot && !IsVirtual) && (((Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.ReuseSlot && !IsVirtual)
|| (Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.NewSlot)) || (Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.NewSlot))
modifiers.Append($"new "); modifiers.Append($"new ");
@@ -194,7 +194,10 @@ namespace Il2CppInspector.Reflection
public string GetTypeParametersString(Scope usingScope) => GenericTypeParameters == null? "" : public string GetTypeParametersString(Scope usingScope) => GenericTypeParameters == null? "" :
"<" + string.Join(", ", GenericTypeParameters.Select(p => p.GetScopedCSharpName(usingScope))) + ">"; "<" + string.Join(", ", GenericTypeParameters.Select(p => p.GetScopedCSharpName(usingScope))) + ">";
public abstract string GetSignatureString(Scope usingScope); public string GetFullTypeParametersString() => GenericTypeParameters == null? "" :
"[" + string.Join(",", GenericTypeParameters.Select(p => p.FullName ?? p.Name)) + "]";
public abstract string GetSignatureString();
// List of operator overload metadata names // List of operator overload metadata names
// https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/operator-overloads // https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/operator-overloads

View File

@@ -33,7 +33,7 @@ namespace Il2CppInspector.Reflection
// TODO: Generic arguments (and on ConstructorInfo) // TODO: Generic arguments (and on ConstructorInfo)
public override string ToString() => ReturnType.Name + " " + Name + "(" + string.Join(", ", DeclaredParameters.Select(x => x.ParameterType.Name)) + ")"; public override string ToString() => ReturnType.Name + " " + Name + "(" + string.Join(", ", DeclaredParameters.Select(x => x.ParameterType.Name)) + ")";
public override string GetSignatureString(Scope usingScope) => ReturnParameter.GetSignatureString() + " " + Name + GetTypeParametersString(usingScope) public override string GetSignatureString() => ReturnParameter.GetSignatureString() + " " + Name + GetFullTypeParametersString()
+ "(" + string.Join(",", DeclaredParameters.Select(x => x.GetSignatureString())) + ")"; + "(" + string.Join(",", DeclaredParameters.Select(x => x.GetSignatureString())) + ")";
} }
} }