Пример #1
0
    Symbol GetSymbol(MetaDataTypeReference r)
    {
        if (r.ResolutionScope is MetaDataAssemblyRef)
        {
            string name = ((MetaDataAssemblyRef)r.ResolutionScope).Name;
            if (!Path.HasExtension(name))
            {
                name += ".dll";
            }
            Load(name);
        }
        if (r.Namespace == "")
        {
            if (r.ResolutionScope is MetaDataTypeReference &&
                ((MetaDataTypeReference)r.ResolutionScope).Namespace != "")
            {
                return(Import(((MetaDataTypeReference)r.ResolutionScope).FullName + "." + r.Name));
            }
            else
            {
                return(Import(r.Name));
            }
        }
        Symbol s = Import(r.Namespace + "." + r.Name);

        if (s == null)
        {
            msg.Error("type or namespace '{0}' cannot be found\n" +
                      "\t(missing using directive or assembly reference?)", r.FullName);
            return(global.Types.Object);
        }
        return(s);
    }
Пример #2
0
    private XmlNode GetEndpointHierarchy(string nodeName, string endpointType)
    {
        XmlNode node = AddElement(null, nodeName);
        MetaDataTypeDefinition epType = resolver.ResolveName(endpointType);

        XmlNode oldChild = null;
        XmlNode newChild = null;

        while (epType.FullName != "Microsoft.Singularity.Channels.Endpoint")
        {
            newChild = manifest.CreateNode(XmlNodeType.Element, "inherit", "");

            AddAttribute(newChild, "name", epType.FullName);

            if (oldChild == null)
            {
                node.AppendChild(newChild);
            }
            else
            {
                node.InsertBefore(newChild, oldChild);
            }
            oldChild = newChild;

            string nextName;
            if (epType.Extends is MetaDataTypeReference)
            {
                nextName = ((MetaDataTypeReference)epType.Extends).FullName;
                if (nextName == "Exp" || nextName == "Imp")
                {
                    MetaDataTypeReference mdtr =
                        (MetaDataTypeReference)epType.Extends;
                    nextName =
                        ((MetaDataTypeReference)mdtr.ResolutionScope).FullName
                        + "." + nextName;
                }
            }
            else if (epType.Extends is MetaDataTypeDefinition)
            {
                nextName = ((MetaDataTypeDefinition)epType.Extends).FullName;
            }
            else
            {
                return(node);
            }

            epType = resolver.ResolveName(nextName);
        }

        newChild = manifest.CreateNode(XmlNodeType.Element, "inherit", "");
        AddAttribute(newChild, "name", epType.FullName);

        if (oldChild == null)
        {
            node.AppendChild(newChild);
        }
        else
        {
            node.InsertBefore(newChild, oldChild);
            oldChild = newChild;
        }

        return(node);
    }