Output: Don't output generic constraints from outer types on inner types
This commit is contained in:
@@ -457,6 +457,8 @@ namespace Il2CppInspector.Reflection {
|
|||||||
genericConstraintCount = param.constraintsCount;
|
genericConstraintCount = param.constraintsCount;
|
||||||
|
|
||||||
// Base type of object (set by default)
|
// Base type of object (set by default)
|
||||||
|
// TODO: BaseType should be set to base type constraint
|
||||||
|
// TODO: ImplementedInterfaces should be set to interface types constraints
|
||||||
|
|
||||||
// Name of parameter
|
// Name of parameter
|
||||||
Name = Assembly.Model.Package.Strings[param.nameIndex];
|
Name = Assembly.Model.Package.Strings[param.nameIndex];
|
||||||
@@ -612,6 +614,11 @@ namespace Il2CppInspector.Reflection {
|
|||||||
if (GenericParameterAttributes == GenericParameterAttributes.None && typeConstraints.Length == 0)
|
if (GenericParameterAttributes == GenericParameterAttributes.None && typeConstraints.Length == 0)
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
||||||
|
// Check if we are a nested type, and if so, exclude ourselves if we are a generic type parameter from the outer type
|
||||||
|
// All constraints are inherited automatically by all nested types so we only have to look at the immediate outer type
|
||||||
|
if (DeclaringMethod == null && DeclaringType.IsNested && (DeclaringType.DeclaringType.GenericTypeParameters?.Any(p => p.Name == Name) ?? false))
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
var constraintList = typeConstraints.Where(c => c.FullName != "System.ValueType").Select(c => c.CSharpTypeDeclarationName).ToList();
|
var constraintList = typeConstraints.Where(c => c.FullName != "System.ValueType").Select(c => c.CSharpTypeDeclarationName).ToList();
|
||||||
|
|
||||||
if ((GenericParameterAttributes & GenericParameterAttributes.NotNullableValueTypeConstraint) == GenericParameterAttributes.NotNullableValueTypeConstraint)
|
if ((GenericParameterAttributes & GenericParameterAttributes.NotNullableValueTypeConstraint) == GenericParameterAttributes.NotNullableValueTypeConstraint)
|
||||||
@@ -620,6 +627,7 @@ namespace Il2CppInspector.Reflection {
|
|||||||
constraintList.Add("class");
|
constraintList.Add("class");
|
||||||
if ((GenericParameterAttributes & GenericParameterAttributes.DefaultConstructorConstraint) == GenericParameterAttributes.DefaultConstructorConstraint
|
if ((GenericParameterAttributes & GenericParameterAttributes.DefaultConstructorConstraint) == GenericParameterAttributes.DefaultConstructorConstraint
|
||||||
&& !constraintList.Contains("struct"))
|
&& !constraintList.Contains("struct"))
|
||||||
|
// new() must be the last constraint specified
|
||||||
constraintList.Add("new()");
|
constraintList.Add("new()");
|
||||||
|
|
||||||
return "where " + Name + " : " + string.Join(", ", constraintList);
|
return "where " + Name + " : " + string.Join(", ", constraintList);
|
||||||
|
|||||||
Reference in New Issue
Block a user