public override object VisitSimpleType(SimpleType simpleType, object data) { // Handle type arguments first, so that the fixed-up type arguments get moved over to the MemberType, // if we're also creating one here. base.VisitSimpleType(simpleType, data); ITypeDefOrRef tr = simpleType.Annotation <ITypeDefOrRef>(); // Fully qualify any ambiguous type names. if (tr == null) { return(null); } var nss = GetNamespace(tr).ToString(); if (IsAmbiguous(nss, null, GetName(tr))) { AstType ns; if (string.IsNullOrEmpty(nss)) { ns = new SimpleType("global").WithAnnotation(TextTokenKind.Keyword); } else { string[] parts = nss.Split('.'); if (IsAmbiguous(string.Empty, parts[0], null)) { // conflict between namespace and type name/member name ns = new MemberType { Target = new SimpleType("global").WithAnnotation(TextTokenKind.Keyword), IsDoubleColon = true, MemberNameToken = Identifier.Create(parts[0]).WithAnnotation(TextTokenKind.NamespacePart) }.WithAnnotation(TextTokenKind.NamespacePart); } else { ns = new SimpleType(parts[0]).WithAnnotation(TextTokenKind.NamespacePart); } for (int i = 1; i < parts.Length; i++) { ns = new MemberType { Target = ns, MemberNameToken = Identifier.Create(parts[i]).WithAnnotation(TextTokenKind.NamespacePart) }.WithAnnotation(TextTokenKind.NamespacePart); } } MemberType mt = new MemberType(); mt.Target = ns; mt.IsDoubleColon = string.IsNullOrEmpty(nss); mt.MemberNameToken = (Identifier)simpleType.IdentifierToken.Clone(); mt.CopyAnnotationsFrom(simpleType); simpleType.TypeArguments.MoveTo(mt.TypeArguments); simpleType.ReplaceWith(mt); } return(null); }
public override object VisitSimpleType(SimpleType simpleType, object data) { // Handle type arguments first, so that the fixed-up type arguments get moved over to the MemberType, // if we're also creating one here. base.VisitSimpleType(simpleType, data); TypeReference tr = simpleType.Annotation <TypeReference>(); // Fully qualify any ambiguous type names. if (tr != null && IsAmbiguous(tr.Namespace, tr.Name)) { AstType ns; if (string.IsNullOrEmpty(tr.Namespace)) { ns = new SimpleType("global"); } else { string[] parts = tr.Namespace.Split('.'); if (IsAmbiguous(string.Empty, parts[0])) { // conflict between namespace and type name/member name ns = new MemberType { Target = new SimpleType("global"), IsDoubleColon = true, MemberName = parts[0] }; } else { ns = new SimpleType(parts[0]); } for (int i = 1; i < parts.Length; i++) { ns = new MemberType { Target = ns, MemberName = parts[i] }; } } MemberType mt = new MemberType(); mt.Target = ns; mt.IsDoubleColon = string.IsNullOrEmpty(tr.Namespace); mt.MemberName = simpleType.Identifier; mt.CopyAnnotationsFrom(simpleType); simpleType.TypeArguments.MoveTo(mt.TypeArguments); simpleType.ReplaceWith(mt); } return(null); }