Now that we generate methods in instantiated generic types, we were getting test failures from methods that were being detected as new methods. In actuality, they weren't new, but they differed only in generic type parameters from some base type method, and GetSignatureString ignores generic parameters completely. This fix eliminates the hacky GetSignatureString and replaces it with more-or-less proper signature comparison. This even manages to fix an incorrect test case from Methods.cs (because GetSignatureString was incorrectly incorporating the return type - when the return type should not be examined for signature checking).
32 lines
1.3 KiB
C#
32 lines
1.3 KiB
C#
/*
|
|
Copyright 2017-2020 Katy Coe - http://www.hearthcode.org - http://www.djkaty.com
|
|
|
|
All rights reserved.
|
|
*/
|
|
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
|
|
namespace Il2CppInspector.Reflection
|
|
{
|
|
public class ConstructorInfo : MethodBase
|
|
{
|
|
// IL names of constructor and static constructor
|
|
public static readonly string ConstructorName = ".ctor";
|
|
|
|
public static readonly string TypeConstructorName = ".cctor";
|
|
|
|
public override MemberTypes MemberType => MemberTypes.Constructor;
|
|
|
|
public ConstructorInfo(Il2CppInspector pkg, int methodIndex, TypeInfo declaringType) : base(pkg, methodIndex, declaringType) { }
|
|
|
|
public ConstructorInfo(ConstructorInfo methodDef, TypeInfo declaringType) : base(methodDef, declaringType) { }
|
|
|
|
private ConstructorInfo(ConstructorInfo methodDef, TypeInfo[] typeArguments) : base(methodDef, typeArguments) { }
|
|
|
|
protected override MethodBase MakeGenericMethodImpl(TypeInfo[] typeArguments) => new ConstructorInfo(this, typeArguments);
|
|
|
|
public override string ToString() => DeclaringType.Name + GetFullTypeParametersString()
|
|
+ "(" + string.Join(", ", DeclaredParameters.Select(x => x.ParameterType.Name)) + ")";
|
|
}
|
|
} |