public DmdParsedTypeRef(DmdModule ownerModule, DmdParsedTypeRef declaringTypeRef, DmdTypeScope typeScope, string @namespace, string name, IList <DmdCustomModifier> customModifiers) : base(ownerModule, 0, customModifiers) { this.typeScope = typeScope; this.declaringTypeRef = declaringTypeRef; MetadataNamespace = @namespace; MetadataName = name ?? throw new ArgumentNullException(nameof(name)); }
IDmdAssemblyName FindAssemblyRef(DmdParsedTypeRef nonNestedTypeRef) { IDmdAssemblyName asmRef = null; if ((object)nonNestedTypeRef != null) { asmRef = FindAssemblyRefCore(nonNestedTypeRef); } return(asmRef ?? ownerModule.Assembly.GetName()); }
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 CreateTypeRef(List <string> typeNames) { if (typeNames.Count == 0) { throw new InvalidOperationException(); } DmdParsedTypeRef typeRef = null; for (int i = 0; i < typeNames.Count; i++) { var newTypeRef = CreateTypeRefNoAssembly(typeNames[i], typeRef); typeRef = newTypeRef; } return(typeRef); }
IDmdAssemblyName FindAssemblyRefCore(DmdParsedTypeRef nonNestedTypeRef) { var modAsm = (DmdAssemblyImpl)ownerModule !.Assembly; var type = modAsm.GetType(nonNestedTypeRef, ignoreCase: false); if (!(type is null)) { return(modAsm.GetName()); } var corLibAsm = (DmdAssemblyImpl?)ownerModule.AppDomain.CorLib; if (!(corLibAsm is null)) { type = corLibAsm.GetType(nonNestedTypeRef, ignoreCase: false); if (!(type is null)) { return(corLibAsm.GetName()); } } return(modAsm.GetName()); }
DmdParsedTypeRef CreateTypeRefNoAssembly(string fullName, DmdParsedTypeRef declaringTypeRef) { DmdTypeUtilities.SplitFullName(fullName, out string ns, out string name); return(new DmdParsedTypeRef(ownerModule, declaringTypeRef, DmdTypeScope.Invalid, ns, name, null)); }