/// <inheritdoc/> public new DotNetReferenceClassGeneric GetLocalized(DotNetQualifiedName other) { DotNetReferenceClassGeneric clone = this.Clone(); clone.Localize(other); return(clone); }
/// <summary> /// Parses a .Net XML documentation type name. /// Not intended for type declarations. Intended for field types, property types, parameter types, and return types. /// </summary> public static new DotNetQualifiedTypeName FromVisualStudioXml(string typeName) { if (String.IsNullOrEmpty(typeName)) { return(new DotNetQualifiedTypeName()); } if (DotNetReferenceClassGeneric.HasExpectedVisualStudioXmlFormat(typeName)) { return(DotNetReferenceClassGeneric.FromVisualStudioXml(typeName)); } if (DotNetReferenceMethodGeneric.HasExpectedVisualStudioXmlFormat(typeName)) { return(DotNetReferenceMethodGeneric.FromVisualStudioXml(typeName)); } string[] dotDelimited = typeName.SplitIgnoreNested('.'); string localName = dotDelimited.Last(); string fullNamespace = (dotDelimited.Length == 1) ? null : String.Join(".", dotDelimited.Take(dotDelimited.Length - 1).ToArray()); //fully qualified generic type parameters //such as System.Collections.Generic.List<T> which are formatted as System.Collections.Generic.List{`0} List <DotNetQualifiedTypeName> parameters = new List <DotNetQualifiedTypeName>(); if (localName.EndsWith("}")) { string parameterSignature = localName.Substring(localName.IndexOf("{")).RemoveOuterBraces(); localName = localName.Substring(0, localName.IndexOf("{")); parameters = parameterSignature.SplitIgnoreNested(',').Select(p => DotNetQualifiedTypeName.FromVisualStudioXml(p)).ToList(); } if (String.IsNullOrEmpty(fullNamespace)) { return(new DotNetQualifiedTypeName(localName, parameters)); } return(new DotNetQualifiedTypeName(localName, parameters, DotNetQualifiedTypeName.FromVisualStudioXml(fullNamespace))); }