public DmdTypeDef GetTypeDef(IDmdAssemblyName assemblyName, List <string> typeNames) { if (typeNames.Count == 0) { return(null); } var targetAssembly = assembly; if (assemblyName != null && !AssemblyNameEqualityComparer.Instance.Equals(targetAssembly.GetName(), assemblyName)) { targetAssembly = (DmdAssemblyImpl)targetAssembly.AppDomain.GetAssembly(assemblyName); if (targetAssembly == null) { return(null); } } DmdTypeDef type; DmdTypeUtilities.SplitFullName(typeNames[0], out string @namespace, out string name); var module = targetAssembly.ManifestModule; if (module == null) { return(null); } var typeRef = new DmdParsedTypeRef(module, null, DmdTypeScope.Invalid, @namespace, name, null); type = targetAssembly.GetType(typeRef, ignoreCase); if ((object)type == null) { return(null); } for (int i = 1; i < typeNames.Count; i++) { var flags = DmdBindingFlags.Public | DmdBindingFlags.NonPublic; if (ignoreCase) { flags |= DmdBindingFlags.IgnoreCase; } type = (DmdTypeDef)type.GetNestedType(typeNames[i], flags); if ((object)type == null) { return(null); } } return(type); }
DmdParsedTypeRef CreateTypeRefNoAssembly(string fullName, DmdParsedTypeRef?declaringTypeRef) { DmdTypeUtilities.SplitFullName(fullName, out var ns, out var name); return(new DmdParsedTypeRef(ownerModule !, declaringTypeRef, DmdTypeScope.Invalid, ns, name, null)); }