Example #1
0
 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));
 }
Example #2
0
        IDmdAssemblyName FindAssemblyRef(DmdParsedTypeRef nonNestedTypeRef)
        {
            IDmdAssemblyName asmRef = null;

            if ((object)nonNestedTypeRef != null)
            {
                asmRef = FindAssemblyRefCore(nonNestedTypeRef);
            }
            return(asmRef ?? ownerModule.Assembly.GetName());
        }
Example #3
0
            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);
            }
Example #4
0
        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);
        }
Example #5
0
        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());
        }
Example #6
0
 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));
 }