From b36ccda9b97d6f2a8034a75fe9f28e268fe7b8f0 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Fri, 29 Nov 2019 06:51:30 +0100 Subject: [PATCH] Model: Small naming corrections to improve reliability (re: CS0308) --- Il2CppInspector/Reflection/MethodBase.cs | 6 +- Il2CppInspector/Reflection/TypeInfo.cs | 6 +- .../GameAssembly-GenericTypes-x64.cs | 115 ++++++++---- .../GameAssembly-GenericTypes-x86.cs | 165 +++++++++++------- .../TestExpectedResults/GenericTypes.cs | 165 +++++++++++------- Il2CppTests/TestSources/GenericTypes.cs | 24 +++ 6 files changed, 319 insertions(+), 162 deletions(-) diff --git a/Il2CppInspector/Reflection/MethodBase.cs b/Il2CppInspector/Reflection/MethodBase.cs index 3a872ba..11aa404 100644 --- a/Il2CppInspector/Reflection/MethodBase.cs +++ b/Il2CppInspector/Reflection/MethodBase.cs @@ -59,13 +59,13 @@ namespace Il2CppInspector.Reflection // Explicit interface implementation : (IsVirtual && IsFinal && (Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.NewSlot && Name.IndexOf('.') != -1)? ((Func)(() => { + // This is some shenanigans because IL2CPP does not use a consistent naming scheme for explicit interface implementation method names var implementingInterface = DeclaringType.ImplementedInterfaces.FirstOrDefault(i => Name.StartsWith(i.Namespace + "." + i.CSharpName + ".")) - ?? DeclaringType.ImplementedInterfaces.FirstOrDefault(i => Name.StartsWith(Regex.Replace(i.FullName, @"`\d", "").Replace('[', '<').Replace(']', '>') + ".")); + ?? DeclaringType.ImplementedInterfaces.FirstOrDefault(i => Name.StartsWith(i.Namespace + "." + i.CSharpTypeDeclarationName.Replace(" ", "") + ".")); // TODO: There are some combinations we haven't dealt with so use this test as a safety valve if (implementingInterface == null) return Name; - var sliceLength = Regex.Replace(implementingInterface.FullName, @"`\d", "").Length + 1; - return implementingInterface.CSharpName + "." + Name.Substring(sliceLength); + return implementingInterface.CSharpName + Name.Substring(Name.LastIndexOf('.')); }))() // Regular method diff --git a/Il2CppInspector/Reflection/TypeInfo.cs b/Il2CppInspector/Reflection/TypeInfo.cs index f9e9da8..c4ebe14 100644 --- a/Il2CppInspector/Reflection/TypeInfo.cs +++ b/Il2CppInspector/Reflection/TypeInfo.cs @@ -72,7 +72,7 @@ namespace Il2CppInspector.Reflection { + (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? "<" + string.Join(", ", GenericTypeParameters.Select(x => x.CSharpTypeDeclarationName)) + ">" : "") - + (GenericTypeArguments != null ? "<" + string.Join(", ", GenericTypeArguments.Select(x => x.CSharpTypeDeclarationName)) + ">" : "")) + + (GenericTypeArguments != null ? "<" + string.Join(", ", GenericTypeArguments.Select(x => (!x.IsGenericTypeParameter? x.Namespace + "." : "") + x.CSharpTypeDeclarationName)) + ">" : "")) + (IsArray ? "[" + new string(',', GetArrayRank() - 1) + "]" : "") + (IsPointer ? "*" : ""); @@ -146,9 +146,7 @@ namespace Il2CppInspector.Reflection { IsGenericParameter? null : (HasElementType? ElementType.FullName : (DeclaringType != null? DeclaringType.FullName + "+" : Namespace + (Namespace.Length > 0? "." : "")) - + base.Name - + (GenericTypeParameters != null ? "[" + string.Join(",", GenericTypeParameters.Select(x => x.FullName ?? x.Name)) + "]" : "") - + (GenericTypeArguments != null ? "[" + string.Join(",", GenericTypeArguments.Select(x => x.FullName ?? x.Name)) + "]" : "")) + + base.Name) + (IsArray? "[" + new string(',', GetArrayRank() - 1) + "]" : "") + (IsPointer? "*" : ""); diff --git a/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x64.cs b/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x64.cs index 54a7c4a..74b1738 100644 --- a/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x64.cs +++ b/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x64.cs @@ -33,7 +33,7 @@ using System.Runtime.InteropServices; [assembly: StringFreezing] // 0x000000018000E050-0x000000018000A8A0 // [assembly: TypeLibVersion] // 0x000000018000E050-0x000000018000A8A0 -// Image 1: GenericTypes.dll - Assembly: GenericTypes, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - Types 1810-1827 +// Image 1: GenericTypes.dll - Assembly: GenericTypes, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - Types 1810-1832 // [assembly: CompilationRelaxations] // 0x000000018000C150-0x000000018000C150 // [assembly: Debuggable] // 0x000000018000C150-0x000000018000C150 [assembly: RuntimeCompatibility] // 0x000000018000C150-0x000000018000C150 @@ -41,45 +41,45 @@ using System.Runtime.InteropServices; internal static class Consts // TypeDefIndex: 100 { // Fields - public const string MonoVersion = "2.6.5.0"; // Metadata: 0x000ECED8 - public const string MonoCompany = "MONO development team"; // Metadata: 0x000ECEE3 - public const string MonoProduct = "MONO Common language infrastructure"; // Metadata: 0x000ECEFC - public const string MonoCopyright = "(c) various MONO Authors"; // Metadata: 0x000ECF23 - public const string FxVersion = "2.0.0.0"; // Metadata: 0x000ECF3F - public const string VsVersion = "8.0.0.0"; // Metadata: 0x000ECF4A - public const string FxFileVersion = "2.0.50727.1433"; // Metadata: 0x000ECF55 - public const string VsFileVersion = "8.0.50727.1433"; // Metadata: 0x000ECF67 - public const string AssemblyI18N = "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ECF79 - public const string AssemblyMicrosoft_VisualStudio = "Microsoft.VisualStudio, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ECFC4 - public const string AssemblyMicrosoft_VisualStudio_Web = "Microsoft.VisualStudio.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED021 - public const string AssemblyMicrosoft_VSDesigner = "Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED082 - public const string AssemblyMono_Http = "Mono.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED0DD - public const string AssemblyMono_Posix = "Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED12D - public const string AssemblyMono_Security = "Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED17E - public const string AssemblyMono_Messaging_RabbitMQ = "Mono.Messaging.RabbitMQ, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED1D2 - public const string AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED230 - public const string AssemblySystem = "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED27F - public const string AssemblySystem_Data = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED2CC - public const string AssemblySystem_Design = "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED31E - public const string AssemblySystem_DirectoryServices = "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED372 - public const string AssemblySystem_Drawing = "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED3D1 - public const string AssemblySystem_Drawing_Design = "System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED426 - public const string AssemblySystem_Messaging = "System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED482 - public const string AssemblySystem_Security = "System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED4D9 - public const string AssemblySystem_ServiceProcess = "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED52F - public const string AssemblySystem_Web = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED58B - public const string AssemblySystem_Windows_Forms = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED5DC - public const string AssemblySystem_Core = "System.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED637 + public const string MonoVersion = "2.6.5.0"; // Metadata: 0x000ED0B4 + public const string MonoCompany = "MONO development team"; // Metadata: 0x000ED0BF + public const string MonoProduct = "MONO Common language infrastructure"; // Metadata: 0x000ED0D8 + public const string MonoCopyright = "(c) various MONO Authors"; // Metadata: 0x000ED0FF + public const string FxVersion = "2.0.0.0"; // Metadata: 0x000ED11B + public const string VsVersion = "8.0.0.0"; // Metadata: 0x000ED126 + public const string FxFileVersion = "2.0.50727.1433"; // Metadata: 0x000ED131 + public const string VsFileVersion = "8.0.50727.1433"; // Metadata: 0x000ED143 + public const string AssemblyI18N = "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED155 + public const string AssemblyMicrosoft_VisualStudio = "Microsoft.VisualStudio, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED1A0 + public const string AssemblyMicrosoft_VisualStudio_Web = "Microsoft.VisualStudio.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED1FD + public const string AssemblyMicrosoft_VSDesigner = "Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED25E + public const string AssemblyMono_Http = "Mono.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED2B9 + public const string AssemblyMono_Posix = "Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED309 + public const string AssemblyMono_Security = "Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED35A + public const string AssemblyMono_Messaging_RabbitMQ = "Mono.Messaging.RabbitMQ, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED3AE + public const string AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED40C + public const string AssemblySystem = "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED45B + public const string AssemblySystem_Data = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED4A8 + public const string AssemblySystem_Design = "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED4FA + public const string AssemblySystem_DirectoryServices = "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED54E + public const string AssemblySystem_Drawing = "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED5AD + public const string AssemblySystem_Drawing_Design = "System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED602 + public const string AssemblySystem_Messaging = "System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED65E + public const string AssemblySystem_Security = "System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED6B5 + public const string AssemblySystem_ServiceProcess = "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED70B + public const string AssemblySystem_Web = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED767 + public const string AssemblySystem_Windows_Forms = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED7B8 + public const string AssemblySystem_Core = "System.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED813 } internal sealed class Locale // TypeDefIndex: 101 { // Constructors - private Locale() {} // 0x00000001800E2000-0x00000001800E2010 + private Locale() {} // 0x00000001800E3000-0x00000001800E3010 // Methods - public static string GetText(string msg) => default; // 0x0000000180123590-0x00000001801235A0 - public static string GetText(string fmt, params /* 0x00000001800090D0-0x00000001800090D0 */ object[] args) => default; // 0x00000001802C6900-0x00000001802C6970 + public static string GetText(string msg) => default; // 0x0000000180124590-0x00000001801245A0 + public static string GetText(string fmt, params /* 0x00000001800090D0-0x00000001800090D0 */ object[] args) => default; // 0x00000001802C5BB0-0x00000001802C5C20 } namespace Il2CppTests.TestSources @@ -115,10 +115,10 @@ namespace Il2CppTests.TestSources internal class Test // TypeDefIndex: 1819 { // Constructors - public Test() {} // 0x00000001800E2000-0x00000001800E2010 + public Test() {} // 0x00000001800E3000-0x00000001800E3010 // Methods - public void GenericTypesTest() {} // 0x00000001803E11C0-0x00000001803E11C0 + public void GenericTypesTest() {} // 0x00000001803EDC60-0x00000001803EDC60 } internal class ConstrainedValueType // TypeDefIndex: 1820 @@ -183,4 +183,49 @@ namespace Il2CppTests.TestSources public void EnumConstraint(E enumeration) where E : Enum {} } + + public class OuterGeneric // TypeDefIndex: 1828 + { + // Fields + public InnerGeneric1 fieldOfInnerGeneric1; // 0x00 + public InnerGeneric2 fieldOfInnerGeneric2; // 0x00 + public OuterGeneric fieldOfOuterGenericOpen1; // 0x00 + public OuterGeneric fieldOfOuterGenericOpen2; // 0x00 + public OuterGeneric fieldOfOuterGenericClosed; // 0x00 + public InnerGeneric2.SubInnerGeneric2 fieldOfSubInnerGeneric2; // 0x00 + public InnerGeneric2.SubInnerGeneric3 fieldOfSubInnerGeneric3; // 0x00 + + // Nested types + public class InnerGeneric1 : List // TypeDefIndex: 1829 + { + // Constructors + public InnerGeneric1() {} + } + + public class InnerGeneric2 : List // TypeDefIndex: 1830 + { + // Nested types + public class SubInnerGeneric2 : List // TypeDefIndex: 1831 + { + // Constructors + public SubInnerGeneric2() {} + } + + public class SubInnerGeneric3 // TypeDefIndex: 1832 + { + // Constructors + public SubInnerGeneric3() {} + } + + // Constructors + public InnerGeneric2() {} + + // Methods + public SubInnerGeneric2 Test() => default; + public SubInnerGeneric3 Test2() => default; + } + + // Constructors + public OuterGeneric() {} + } } diff --git a/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x86.cs b/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x86.cs index 84ccb10..51bf020 100644 --- a/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x86.cs +++ b/Il2CppTests/TestExpectedResults/GameAssembly-GenericTypes-x86.cs @@ -11,75 +11,75 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Image 0: mscorlib.dll - Assembly: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Types 0-1809 -// [assembly: AssemblyCompany] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyCopyright] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyDefaultAlias] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyDelaySign] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyDescription] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyFileVersion] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyInformationalVersion] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyKeyFile] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyProduct] // 0x1000ED00-0x1000BC80 -// [assembly: AssemblyTitle] // 0x1000ED00-0x1000BC80 -// [assembly: CLSCompliant] // 0x1000ED00-0x1000BC80 -// [assembly: CompilationRelaxations] // 0x1000ED00-0x1000BC80 -// [assembly: ComVisible] // 0x1000ED00-0x1000BC80 -// [assembly: Debuggable] // 0x1000ED00-0x1000BC80 -// [assembly: DefaultDependency] // 0x1000ED00-0x1000BC80 -// [assembly: Guid] // 0x1000ED00-0x1000BC80 -// [assembly: NeutralResourcesLanguage] // 0x1000ED00-0x1000BC80 -[assembly: RuntimeCompatibility] // 0x1000ED00-0x1000BC80 -// [assembly: SatelliteContractVersion] // 0x1000ED00-0x1000BC80 -[assembly: StringFreezing] // 0x1000ED00-0x1000BC80 -// [assembly: TypeLibVersion] // 0x1000ED00-0x1000BC80 +// [assembly: AssemblyCompany] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyCopyright] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyDefaultAlias] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyDelaySign] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyDescription] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyFileVersion] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyInformationalVersion] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyKeyFile] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyProduct] // 0x1000ED70-0x1000BCE0 +// [assembly: AssemblyTitle] // 0x1000ED70-0x1000BCE0 +// [assembly: CLSCompliant] // 0x1000ED70-0x1000BCE0 +// [assembly: CompilationRelaxations] // 0x1000ED70-0x1000BCE0 +// [assembly: ComVisible] // 0x1000ED70-0x1000BCE0 +// [assembly: Debuggable] // 0x1000ED70-0x1000BCE0 +// [assembly: DefaultDependency] // 0x1000ED70-0x1000BCE0 +// [assembly: Guid] // 0x1000ED70-0x1000BCE0 +// [assembly: NeutralResourcesLanguage] // 0x1000ED70-0x1000BCE0 +[assembly: RuntimeCompatibility] // 0x1000ED70-0x1000BCE0 +// [assembly: SatelliteContractVersion] // 0x1000ED70-0x1000BCE0 +[assembly: StringFreezing] // 0x1000ED70-0x1000BCE0 +// [assembly: TypeLibVersion] // 0x1000ED70-0x1000BCE0 -// Image 1: GenericTypes.dll - Assembly: GenericTypes, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - Types 1810-1827 -// [assembly: CompilationRelaxations] // 0x1000D1B0-0x1000D1B0 -// [assembly: Debuggable] // 0x1000D1B0-0x1000D1B0 -[assembly: RuntimeCompatibility] // 0x1000D1B0-0x1000D1B0 +// Image 1: GenericTypes.dll - Assembly: GenericTypes, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - Types 1810-1832 +// [assembly: CompilationRelaxations] // 0x1000D210-0x1000D210 +// [assembly: Debuggable] // 0x1000D210-0x1000D210 +[assembly: RuntimeCompatibility] // 0x1000D210-0x1000D210 internal static class Consts // TypeDefIndex: 100 { // Fields - public const string MonoVersion = "2.6.5.0"; // Metadata: 0x000ECED8 - public const string MonoCompany = "MONO development team"; // Metadata: 0x000ECEE3 - public const string MonoProduct = "MONO Common language infrastructure"; // Metadata: 0x000ECEFC - public const string MonoCopyright = "(c) various MONO Authors"; // Metadata: 0x000ECF23 - public const string FxVersion = "2.0.0.0"; // Metadata: 0x000ECF3F - public const string VsVersion = "8.0.0.0"; // Metadata: 0x000ECF4A - public const string FxFileVersion = "2.0.50727.1433"; // Metadata: 0x000ECF55 - public const string VsFileVersion = "8.0.50727.1433"; // Metadata: 0x000ECF67 - public const string AssemblyI18N = "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ECF79 - public const string AssemblyMicrosoft_VisualStudio = "Microsoft.VisualStudio, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ECFC4 - public const string AssemblyMicrosoft_VisualStudio_Web = "Microsoft.VisualStudio.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED021 - public const string AssemblyMicrosoft_VSDesigner = "Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED082 - public const string AssemblyMono_Http = "Mono.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED0DD - public const string AssemblyMono_Posix = "Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED12D - public const string AssemblyMono_Security = "Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED17E - public const string AssemblyMono_Messaging_RabbitMQ = "Mono.Messaging.RabbitMQ, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED1D2 - public const string AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED230 - public const string AssemblySystem = "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED27F - public const string AssemblySystem_Data = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED2CC - public const string AssemblySystem_Design = "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED31E - public const string AssemblySystem_DirectoryServices = "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED372 - public const string AssemblySystem_Drawing = "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED3D1 - public const string AssemblySystem_Drawing_Design = "System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED426 - public const string AssemblySystem_Messaging = "System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED482 - public const string AssemblySystem_Security = "System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED4D9 - public const string AssemblySystem_ServiceProcess = "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED52F - public const string AssemblySystem_Web = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED58B - public const string AssemblySystem_Windows_Forms = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED5DC - public const string AssemblySystem_Core = "System.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED637 + public const string MonoVersion = "2.6.5.0"; // Metadata: 0x000ED0B4 + public const string MonoCompany = "MONO development team"; // Metadata: 0x000ED0BF + public const string MonoProduct = "MONO Common language infrastructure"; // Metadata: 0x000ED0D8 + public const string MonoCopyright = "(c) various MONO Authors"; // Metadata: 0x000ED0FF + public const string FxVersion = "2.0.0.0"; // Metadata: 0x000ED11B + public const string VsVersion = "8.0.0.0"; // Metadata: 0x000ED126 + public const string FxFileVersion = "2.0.50727.1433"; // Metadata: 0x000ED131 + public const string VsFileVersion = "8.0.50727.1433"; // Metadata: 0x000ED143 + public const string AssemblyI18N = "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED155 + public const string AssemblyMicrosoft_VisualStudio = "Microsoft.VisualStudio, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED1A0 + public const string AssemblyMicrosoft_VisualStudio_Web = "Microsoft.VisualStudio.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED1FD + public const string AssemblyMicrosoft_VSDesigner = "Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED25E + public const string AssemblyMono_Http = "Mono.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED2B9 + public const string AssemblyMono_Posix = "Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED309 + public const string AssemblyMono_Security = "Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED35A + public const string AssemblyMono_Messaging_RabbitMQ = "Mono.Messaging.RabbitMQ, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED3AE + public const string AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED40C + public const string AssemblySystem = "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED45B + public const string AssemblySystem_Data = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED4A8 + public const string AssemblySystem_Design = "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED4FA + public const string AssemblySystem_DirectoryServices = "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED54E + public const string AssemblySystem_Drawing = "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED5AD + public const string AssemblySystem_Drawing_Design = "System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED602 + public const string AssemblySystem_Messaging = "System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED65E + public const string AssemblySystem_Security = "System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED6B5 + public const string AssemblySystem_ServiceProcess = "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED70B + public const string AssemblySystem_Web = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED767 + public const string AssemblySystem_Windows_Forms = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED7B8 + public const string AssemblySystem_Core = "System.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED813 } internal sealed class Locale // TypeDefIndex: 101 { // Constructors - private Locale() {} // 0x100BF000-0x100BF010 + private Locale() {} // 0x100C0000-0x100C0010 // Methods - public static string GetText(string msg) => default; // 0x100F7810-0x100F7820 - public static string GetText(string fmt, params /* 0x10009B20-0x10009B20 */ object[] args) => default; // 0x10261460-0x102614B0 + public static string GetText(string msg) => default; // 0x100F8810-0x100F8820 + public static string GetText(string fmt, params /* 0x10009B80-0x10009B80 */ object[] args) => default; // 0x10261620-0x10261670 } namespace Il2CppTests.TestSources @@ -115,10 +115,10 @@ namespace Il2CppTests.TestSources internal class Test // TypeDefIndex: 1819 { // Constructors - public Test() {} // 0x100BF000-0x100BF010 + public Test() {} // 0x100C0000-0x100C0010 // Methods - public void GenericTypesTest() {} // 0x1034DA60-0x1034DA60 + public void GenericTypesTest() {} // 0x103584B0-0x103584B0 } internal class ConstrainedValueType // TypeDefIndex: 1820 @@ -169,7 +169,7 @@ namespace Il2CppTests.TestSources public ConstrainedRefType() {} // Methods - // [NullableContext] // 0x10009AA0-0x1000D1B0 + // [NullableContext] // 0x10009B00-0x1000D210 public void ConstrainedMethodNotNull(N notnullArgument, R bar) {} public void ConstrainedUnmanaged(U unmanagedArgument) where U : struct {} @@ -183,4 +183,49 @@ namespace Il2CppTests.TestSources public void EnumConstraint(E enumeration) where E : Enum {} } + + public class OuterGeneric // TypeDefIndex: 1828 + { + // Fields + public InnerGeneric1 fieldOfInnerGeneric1; // 0x00 + public InnerGeneric2 fieldOfInnerGeneric2; // 0x00 + public OuterGeneric fieldOfOuterGenericOpen1; // 0x00 + public OuterGeneric fieldOfOuterGenericOpen2; // 0x00 + public OuterGeneric fieldOfOuterGenericClosed; // 0x00 + public InnerGeneric2.SubInnerGeneric2 fieldOfSubInnerGeneric2; // 0x00 + public InnerGeneric2.SubInnerGeneric3 fieldOfSubInnerGeneric3; // 0x00 + + // Nested types + public class InnerGeneric1 : List // TypeDefIndex: 1829 + { + // Constructors + public InnerGeneric1() {} + } + + public class InnerGeneric2 : List // TypeDefIndex: 1830 + { + // Nested types + public class SubInnerGeneric2 : List // TypeDefIndex: 1831 + { + // Constructors + public SubInnerGeneric2() {} + } + + public class SubInnerGeneric3 // TypeDefIndex: 1832 + { + // Constructors + public SubInnerGeneric3() {} + } + + // Constructors + public InnerGeneric2() {} + + // Methods + public SubInnerGeneric2 Test() => default; + public SubInnerGeneric3 Test2() => default; + } + + // Constructors + public OuterGeneric() {} + } } diff --git a/Il2CppTests/TestExpectedResults/GenericTypes.cs b/Il2CppTests/TestExpectedResults/GenericTypes.cs index e4e1713..c48e8e4 100644 --- a/Il2CppTests/TestExpectedResults/GenericTypes.cs +++ b/Il2CppTests/TestExpectedResults/GenericTypes.cs @@ -11,75 +11,75 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Image 0: mscorlib.dll - Assembly: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Types 0-1809 -// [assembly: AssemblyCompany] // 0x000A5524-0x000A5818 -// [assembly: AssemblyCopyright] // 0x000A5524-0x000A5818 -// [assembly: AssemblyDefaultAlias] // 0x000A5524-0x000A5818 -// [assembly: AssemblyDelaySign] // 0x000A5524-0x000A5818 -// [assembly: AssemblyDescription] // 0x000A5524-0x000A5818 -// [assembly: AssemblyFileVersion] // 0x000A5524-0x000A5818 -// [assembly: AssemblyInformationalVersion] // 0x000A5524-0x000A5818 -// [assembly: AssemblyKeyFile] // 0x000A5524-0x000A5818 -// [assembly: AssemblyProduct] // 0x000A5524-0x000A5818 -// [assembly: AssemblyTitle] // 0x000A5524-0x000A5818 -// [assembly: CLSCompliant] // 0x000A5524-0x000A5818 -// [assembly: CompilationRelaxations] // 0x000A5524-0x000A5818 -// [assembly: ComVisible] // 0x000A5524-0x000A5818 -// [assembly: Debuggable] // 0x000A5524-0x000A5818 -// [assembly: DefaultDependency] // 0x000A5524-0x000A5818 -// [assembly: Guid] // 0x000A5524-0x000A5818 -// [assembly: NeutralResourcesLanguage] // 0x000A5524-0x000A5818 -[assembly: RuntimeCompatibility] // 0x000A5524-0x000A5818 -// [assembly: SatelliteContractVersion] // 0x000A5524-0x000A5818 -[assembly: StringFreezing] // 0x000A5524-0x000A5818 -// [assembly: TypeLibVersion] // 0x000A5524-0x000A5818 +// [assembly: AssemblyCompany] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyCopyright] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyDefaultAlias] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyDelaySign] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyDescription] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyFileVersion] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyInformationalVersion] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyKeyFile] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyProduct] // 0x000A795C-0x000A7C50 +// [assembly: AssemblyTitle] // 0x000A795C-0x000A7C50 +// [assembly: CLSCompliant] // 0x000A795C-0x000A7C50 +// [assembly: CompilationRelaxations] // 0x000A795C-0x000A7C50 +// [assembly: ComVisible] // 0x000A795C-0x000A7C50 +// [assembly: Debuggable] // 0x000A795C-0x000A7C50 +// [assembly: DefaultDependency] // 0x000A795C-0x000A7C50 +// [assembly: Guid] // 0x000A795C-0x000A7C50 +// [assembly: NeutralResourcesLanguage] // 0x000A795C-0x000A7C50 +[assembly: RuntimeCompatibility] // 0x000A795C-0x000A7C50 +// [assembly: SatelliteContractVersion] // 0x000A795C-0x000A7C50 +[assembly: StringFreezing] // 0x000A795C-0x000A7C50 +// [assembly: TypeLibVersion] // 0x000A795C-0x000A7C50 -// Image 1: GenericTypes.dll - Assembly: GenericTypes, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - Types 1810-1827 -// [assembly: CompilationRelaxations] // 0x000A592C-0x000A592C -// [assembly: Debuggable] // 0x000A592C-0x000A592C -[assembly: RuntimeCompatibility] // 0x000A592C-0x000A592C +// Image 1: GenericTypes.dll - Assembly: GenericTypes, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - Types 1810-1832 +// [assembly: CompilationRelaxations] // 0x000A7D64-0x000A7D64 +// [assembly: Debuggable] // 0x000A7D64-0x000A7D64 +[assembly: RuntimeCompatibility] // 0x000A7D64-0x000A7D64 internal static class Consts // TypeDefIndex: 100 { // Fields - public const string MonoVersion = "2.6.5.0"; // Metadata: 0x000ECED8 - public const string MonoCompany = "MONO development team"; // Metadata: 0x000ECEE3 - public const string MonoProduct = "MONO Common language infrastructure"; // Metadata: 0x000ECEFC - public const string MonoCopyright = "(c) various MONO Authors"; // Metadata: 0x000ECF23 - public const string FxVersion = "2.0.0.0"; // Metadata: 0x000ECF3F - public const string VsVersion = "8.0.0.0"; // Metadata: 0x000ECF4A - public const string FxFileVersion = "2.0.50727.1433"; // Metadata: 0x000ECF55 - public const string VsFileVersion = "8.0.50727.1433"; // Metadata: 0x000ECF67 - public const string AssemblyI18N = "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ECF79 - public const string AssemblyMicrosoft_VisualStudio = "Microsoft.VisualStudio, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ECFC4 - public const string AssemblyMicrosoft_VisualStudio_Web = "Microsoft.VisualStudio.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED021 - public const string AssemblyMicrosoft_VSDesigner = "Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED082 - public const string AssemblyMono_Http = "Mono.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED0DD - public const string AssemblyMono_Posix = "Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED12D - public const string AssemblyMono_Security = "Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED17E - public const string AssemblyMono_Messaging_RabbitMQ = "Mono.Messaging.RabbitMQ, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED1D2 - public const string AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED230 - public const string AssemblySystem = "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED27F - public const string AssemblySystem_Data = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED2CC - public const string AssemblySystem_Design = "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED31E - public const string AssemblySystem_DirectoryServices = "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED372 - public const string AssemblySystem_Drawing = "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED3D1 - public const string AssemblySystem_Drawing_Design = "System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED426 - public const string AssemblySystem_Messaging = "System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED482 - public const string AssemblySystem_Security = "System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED4D9 - public const string AssemblySystem_ServiceProcess = "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED52F - public const string AssemblySystem_Web = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED58B - public const string AssemblySystem_Windows_Forms = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED5DC - public const string AssemblySystem_Core = "System.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED637 + public const string MonoVersion = "2.6.5.0"; // Metadata: 0x000ED0B4 + public const string MonoCompany = "MONO development team"; // Metadata: 0x000ED0BF + public const string MonoProduct = "MONO Common language infrastructure"; // Metadata: 0x000ED0D8 + public const string MonoCopyright = "(c) various MONO Authors"; // Metadata: 0x000ED0FF + public const string FxVersion = "2.0.0.0"; // Metadata: 0x000ED11B + public const string VsVersion = "8.0.0.0"; // Metadata: 0x000ED126 + public const string FxFileVersion = "2.0.50727.1433"; // Metadata: 0x000ED131 + public const string VsFileVersion = "8.0.50727.1433"; // Metadata: 0x000ED143 + public const string AssemblyI18N = "I18N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED155 + public const string AssemblyMicrosoft_VisualStudio = "Microsoft.VisualStudio, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED1A0 + public const string AssemblyMicrosoft_VisualStudio_Web = "Microsoft.VisualStudio.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED1FD + public const string AssemblyMicrosoft_VSDesigner = "Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED25E + public const string AssemblyMono_Http = "Mono.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED2B9 + public const string AssemblyMono_Posix = "Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED309 + public const string AssemblyMono_Security = "Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED35A + public const string AssemblyMono_Messaging_RabbitMQ = "Mono.Messaging.RabbitMQ, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"; // Metadata: 0x000ED3AE + public const string AssemblyCorlib = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED40C + public const string AssemblySystem = "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED45B + public const string AssemblySystem_Data = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED4A8 + public const string AssemblySystem_Design = "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED4FA + public const string AssemblySystem_DirectoryServices = "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED54E + public const string AssemblySystem_Drawing = "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED5AD + public const string AssemblySystem_Drawing_Design = "System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED602 + public const string AssemblySystem_Messaging = "System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED65E + public const string AssemblySystem_Security = "System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED6B5 + public const string AssemblySystem_ServiceProcess = "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED70B + public const string AssemblySystem_Web = "System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; // Metadata: 0x000ED767 + public const string AssemblySystem_Windows_Forms = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED7B8 + public const string AssemblySystem_Core = "System.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; // Metadata: 0x000ED813 } internal sealed class Locale // TypeDefIndex: 101 { // Constructors - private Locale() {} // 0x003ED1B0-0x003ED1B8 + private Locale() {} // 0x003ED908-0x003ED910 // Methods - public static string GetText(string msg) => default; // 0x003ED1B8-0x003ED1BC - public static string GetText(string fmt, params /* 0x000A3D50-0x000A3D60 */ object[] args) => default; // 0x003ED1BC-0x003ED248 + public static string GetText(string msg) => default; // 0x003ED910-0x003ED914 + public static string GetText(string fmt, params /* 0x000A6188-0x000A6198 */ object[] args) => default; // 0x003ED914-0x003ED9A0 } namespace Il2CppTests.TestSources @@ -115,10 +115,10 @@ namespace Il2CppTests.TestSources internal class Test // TypeDefIndex: 1819 { // Constructors - public Test() {} // 0x00561F04-0x00561F0C + public Test() {} // 0x0057AFD8-0x0057AFE0 // Methods - public void GenericTypesTest() {} // 0x00561D48-0x00561F04 + public void GenericTypesTest() {} // 0x0057AE1C-0x0057AFD8 } internal class ConstrainedValueType // TypeDefIndex: 1820 @@ -169,7 +169,7 @@ namespace Il2CppTests.TestSources public ConstrainedRefType() {} // Methods - // [NullableContext] // 0x000A5918-0x000A592C + // [NullableContext] // 0x000A7D50-0x000A7D64 public void ConstrainedMethodNotNull(N notnullArgument, R bar) {} public void ConstrainedUnmanaged(U unmanagedArgument) where U : struct {} @@ -183,4 +183,49 @@ namespace Il2CppTests.TestSources public void EnumConstraint(E enumeration) where E : Enum {} } + + public class OuterGeneric // TypeDefIndex: 1828 + { + // Fields + public InnerGeneric1 fieldOfInnerGeneric1; // 0x00 + public InnerGeneric2 fieldOfInnerGeneric2; // 0x00 + public OuterGeneric fieldOfOuterGenericOpen1; // 0x00 + public OuterGeneric fieldOfOuterGenericOpen2; // 0x00 + public OuterGeneric fieldOfOuterGenericClosed; // 0x00 + public InnerGeneric2.SubInnerGeneric2 fieldOfSubInnerGeneric2; // 0x00 + public InnerGeneric2.SubInnerGeneric3 fieldOfSubInnerGeneric3; // 0x00 + + // Nested types + public class InnerGeneric1 : List // TypeDefIndex: 1829 + { + // Constructors + public InnerGeneric1() {} + } + + public class InnerGeneric2 : List // TypeDefIndex: 1830 + { + // Nested types + public class SubInnerGeneric2 : List // TypeDefIndex: 1831 + { + // Constructors + public SubInnerGeneric2() {} + } + + public class SubInnerGeneric3 // TypeDefIndex: 1832 + { + // Constructors + public SubInnerGeneric3() {} + } + + // Constructors + public InnerGeneric2() {} + + // Methods + public SubInnerGeneric2 Test() => default; + public SubInnerGeneric3 Test2() => default; + } + + // Constructors + public OuterGeneric() {} + } } diff --git a/Il2CppTests/TestSources/GenericTypes.cs b/Il2CppTests/TestSources/GenericTypes.cs index a497acc..87a6c7b 100644 --- a/Il2CppTests/TestSources/GenericTypes.cs +++ b/Il2CppTests/TestSources/GenericTypes.cs @@ -87,4 +87,28 @@ namespace Il2CppTests.TestSources private delegate void NestedDelegateWithAutomaticConstraints(); } + + // Nested generic types should not be referenced using outer type parameters + public class OuterGeneric { + public class InnerGeneric1 : List {} + + public class InnerGeneric2 : List + { + public class SubInnerGeneric2 : List {} + public class SubInnerGeneric3 {} + + public SubInnerGeneric2 Test() => default; + public SubInnerGeneric3 Test2() => default; + } + + public InnerGeneric1 fieldOfInnerGeneric1; + public InnerGeneric2 fieldOfInnerGeneric2; + + public OuterGeneric fieldOfOuterGenericOpen1; + public OuterGeneric fieldOfOuterGenericOpen2; + public OuterGeneric fieldOfOuterGenericClosed; + + public InnerGeneric2.SubInnerGeneric2 fieldOfSubInnerGeneric2; + public InnerGeneric2.SubInnerGeneric3 fieldOfSubInnerGeneric3; + } } \ No newline at end of file