Output: Don't include nested generic type parameters in generic type usages (CS0305)

This commit is contained in:
Katy Coe
2019-12-11 12:34:36 +01:00
parent ffb1ebced7
commit 88be17003e
4 changed files with 28 additions and 24 deletions

View File

@@ -66,18 +66,22 @@ namespace Il2CppInspector.Reflection {
} }
// C# name as it would be written in a type declaration // C# name as it would be written in a type declaration
public string CSharpTypeDeclarationName => public string CSharpTypeDeclarationName {
(IsByRef? "ref " : "") get {
+ (HasElementType? var gtp = IsNested? GenericTypeParameters?.Where(p => DeclaringType.GenericTypeParameters?.All(dp => dp.Name != p.Name) ?? true) : GenericTypeParameters;
ElementType.CSharpTypeDeclarationName :
((GenericParameterAttributes & GenericParameterAttributes.Contravariant) == GenericParameterAttributes.Contravariant? "in " : "") return (IsByRef ? "ref " : "")
+ ((GenericParameterAttributes & GenericParameterAttributes.Covariant) == GenericParameterAttributes.Covariant? "out ":"") + (HasElementType
? ElementType.CSharpTypeDeclarationName
: ((GenericParameterAttributes & GenericParameterAttributes.Contravariant) == GenericParameterAttributes.Contravariant ? "in " : "")
+ ((GenericParameterAttributes & GenericParameterAttributes.Covariant) == GenericParameterAttributes.Covariant ? "out " : "")
+ (base.Name.IndexOf("`", StringComparison.Ordinal) == -1 ? base.Name : base.Name.Remove(base.Name.IndexOf("`", StringComparison.Ordinal))) + (base.Name.IndexOf("`", StringComparison.Ordinal) == -1 ? base.Name : base.Name.Remove(base.Name.IndexOf("`", StringComparison.Ordinal)))
+ ((IsNested? GenericTypeParameters?.Where(p => DeclaringType.GenericTypeParameters?.All(dp => dp.Name != p.Name) ?? true) : GenericTypeParameters)?.Any() ?? false? + (gtp?.Any() ?? false? "<" + string.Join(", ", gtp.Select(x => x.CSharpTypeDeclarationName)) + ">" : "")
"<" + string.Join(", ", GenericTypeParameters.Select(x => x.CSharpTypeDeclarationName)) + ">" : "") + (GenericTypeArguments != null ? "<" + string.Join(", ", GenericTypeArguments.Select(x => (!x.IsGenericTypeParameter ? x.Namespace + "." : "") + x.CSharpTypeDeclarationName)) + ">" : ""))
+ (GenericTypeArguments != null ? "<" + string.Join(", ", GenericTypeArguments.Select(x => (!x.IsGenericTypeParameter? x.Namespace + "." : "") + x.CSharpTypeDeclarationName)) + ">" : ""))
+ (IsArray ? "[" + new string(',', GetArrayRank() - 1) + "]" : "") + (IsArray ? "[" + new string(',', GetArrayRank() - 1) + "]" : "")
+ (IsPointer ? "*" : ""); + (IsPointer ? "*" : "");
}
}
// Custom attributes for this member // Custom attributes for this member
public override IEnumerable<CustomAttributeData> CustomAttributes => CustomAttributeData.GetCustomAttributes(this); public override IEnumerable<CustomAttributeData> CustomAttributes => CustomAttributeData.GetCustomAttributes(this);

View File

@@ -138,20 +138,20 @@ namespace Il2CppTests.TestSources
public NestedWithAutomaticConstraints() {} public NestedWithAutomaticConstraints() {}
} }
private class NestedWithNewGenericParameter<R, T> // TypeDefIndex: 1823 private class NestedWithNewGenericParameter<T> // TypeDefIndex: 1823
{ {
// Constructors // Constructors
public NestedWithNewGenericParameter() {} public NestedWithNewGenericParameter() {}
} }
private class NestedWithNewGenericParameterAndConstraint<R, T> // TypeDefIndex: 1824 private class NestedWithNewGenericParameterAndConstraint<T> // TypeDefIndex: 1824
where T : new() where T : new()
{ {
// Constructors // Constructors
public NestedWithNewGenericParameterAndConstraint() {} public NestedWithNewGenericParameterAndConstraint() {}
} }
private class NestedWithNewGenericParameterAndDependentConstraint<R, T> // TypeDefIndex: 1825 private class NestedWithNewGenericParameterAndDependentConstraint<T> // TypeDefIndex: 1825
where T : G<R>, new() where T : G<R>, new()
{ {
// Constructors // Constructors
@@ -211,7 +211,7 @@ namespace Il2CppTests.TestSources
public SubInnerGeneric2() {} public SubInnerGeneric2() {}
} }
public class SubInnerGeneric3<T1, T2, V> // TypeDefIndex: 1832 public class SubInnerGeneric3<V> // TypeDefIndex: 1832
{ {
// Constructors // Constructors
public SubInnerGeneric3() {} public SubInnerGeneric3() {}

View File

@@ -138,20 +138,20 @@ namespace Il2CppTests.TestSources
public NestedWithAutomaticConstraints() {} public NestedWithAutomaticConstraints() {}
} }
private class NestedWithNewGenericParameter<R, T> // TypeDefIndex: 1823 private class NestedWithNewGenericParameter<T> // TypeDefIndex: 1823
{ {
// Constructors // Constructors
public NestedWithNewGenericParameter() {} public NestedWithNewGenericParameter() {}
} }
private class NestedWithNewGenericParameterAndConstraint<R, T> // TypeDefIndex: 1824 private class NestedWithNewGenericParameterAndConstraint<T> // TypeDefIndex: 1824
where T : new() where T : new()
{ {
// Constructors // Constructors
public NestedWithNewGenericParameterAndConstraint() {} public NestedWithNewGenericParameterAndConstraint() {}
} }
private class NestedWithNewGenericParameterAndDependentConstraint<R, T> // TypeDefIndex: 1825 private class NestedWithNewGenericParameterAndDependentConstraint<T> // TypeDefIndex: 1825
where T : G<R>, new() where T : G<R>, new()
{ {
// Constructors // Constructors
@@ -211,7 +211,7 @@ namespace Il2CppTests.TestSources
public SubInnerGeneric2() {} public SubInnerGeneric2() {}
} }
public class SubInnerGeneric3<T1, T2, V> // TypeDefIndex: 1832 public class SubInnerGeneric3<V> // TypeDefIndex: 1832
{ {
// Constructors // Constructors
public SubInnerGeneric3() {} public SubInnerGeneric3() {}

View File

@@ -138,20 +138,20 @@ namespace Il2CppTests.TestSources
public NestedWithAutomaticConstraints() {} public NestedWithAutomaticConstraints() {}
} }
private class NestedWithNewGenericParameter<R, T> // TypeDefIndex: 1823 private class NestedWithNewGenericParameter<T> // TypeDefIndex: 1823
{ {
// Constructors // Constructors
public NestedWithNewGenericParameter() {} public NestedWithNewGenericParameter() {}
} }
private class NestedWithNewGenericParameterAndConstraint<R, T> // TypeDefIndex: 1824 private class NestedWithNewGenericParameterAndConstraint<T> // TypeDefIndex: 1824
where T : new() where T : new()
{ {
// Constructors // Constructors
public NestedWithNewGenericParameterAndConstraint() {} public NestedWithNewGenericParameterAndConstraint() {}
} }
private class NestedWithNewGenericParameterAndDependentConstraint<R, T> // TypeDefIndex: 1825 private class NestedWithNewGenericParameterAndDependentConstraint<T> // TypeDefIndex: 1825
where T : G<R>, new() where T : G<R>, new()
{ {
// Constructors // Constructors
@@ -211,7 +211,7 @@ namespace Il2CppTests.TestSources
public SubInnerGeneric2() {} public SubInnerGeneric2() {}
} }
public class SubInnerGeneric3<T1, T2, V> // TypeDefIndex: 1832 public class SubInnerGeneric3<V> // TypeDefIndex: 1832
{ {
// Constructors // Constructors
public SubInnerGeneric3() {} public SubInnerGeneric3() {}