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); }
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); }