private void DoFindNamespaces(string prefix, string parent, CsNamespace ns, List<string> names) { string name = null; if (ns.Name != "<globals>") name = parent != null ? (parent + "." + ns.Name) : ns.Name; if (name != null) if (prefix.Length > 0 && name.StartsWith(prefix)) names.AddIfMissing(name.Substring(prefix.Length)); else if (prefix.Length == 0) names.AddIfMissing(name); foreach (CsNamespace child in ns.Namespaces) { DoFindNamespaces(prefix, name, child, names); } }
// Find the last m_member offset intersects. private CsMember DoFindMember(CsNamespace ns) { CsMember member = null; for (int i = 0; i < ns.Namespaces.Length && member == null; ++i) { member = DoFindMember(ns.Namespaces[i]); } var types = new List<CsType>(); types.AddRange(ns.Types); int j = 0; while (j < types.Count && member == null) { CsType type = types[j++]; for (int k = 0; k < type.Members.Length && member == null; ++k) { CsMember candidate = type.Members[k]; if (candidate.Offset <= m_offset && m_offset < candidate.Offset + candidate.Length) { member = candidate; } } types.AddRange(type.Types); } return member; }
public AddUsing(CsNamespace ns, string name) { Contract.Requires(ns != null, "ns is null"); Contract.Requires(!string.IsNullOrEmpty(name), "name is null or empty"); m_namespace = ns; m_name = name; }
public void QueueAddUsing(CsNamespace ns, string name) { m_refactor.Queue(new AddUsing(ns, name)); }
private void DoWriteUsing(StringBuilder builder, CsNamespace ns, string indent) { if (ns.Uses.Length > 0) { foreach (CsUsingDirective u in ns.Uses) { builder.WriteLine("{0}using {1};", indent, u.Namespace); } builder.WriteLine(); } }
private object DoTypeMatches(CsNamespace ns, string type, string name) { return DoMatchType(ns, type, name); }
private object DoAddUsing(CsNamespace ns, string name) { return new AddUsing(ns, name); }
private object DoGetUses(CsNamespace ns) { return ns.Uses; }
private bool DoMatchType(CsNamespace ns, string type, string name) { bool matches = false; if (type == name) { matches = true; } if (!matches) { foreach (CsUsingDirective used in ns.Uses) { if (used.Namespace + "." + type == name) { matches = true; break; } } } if (!matches) { foreach (CsUsingAlias alias in ns.Aliases) { string t = type.Replace(alias.Alias + ".", alias.Value + "."); if (t == name) { matches = true; break; } } } if (!matches) { foreach (CsUsingAlias alias in ns.Aliases) { if (alias.Alias == type && DoMatchType(ns, alias.Value, name)) { matches = true; break; } } } if (!matches && ns.Namespace != null) matches = DoMatchType(ns.Namespace, type, name); return matches; }
private object DoGetNamespaces(CsNamespace ns) { return ns.Namespaces; }
private object DoGetExterns(CsNamespace ns) { return ns.Externs; }
private object DoGetAliases(CsNamespace ns) { return ns.Aliases; }
public CsNamespace(CsBody body, string name, CsExternAlias[] externs, CsUsingAlias[] aliases, CsUsingDirective[] uses, CsNamespace[] namespaces, CsType[] types, int offset, int length, int line) : base(body, types, offset, length, line) { Contract.Requires(!string.IsNullOrEmpty(name), "name is null or empty"); Contract.Requires(externs != null, "externs is null"); Contract.Requires(aliases != null, "aliases is null"); Contract.Requires(uses != null, "uses is null"); Contract.Requires(namespaces != null, "namespaces is null"); Name = name; Externs = externs; Aliases = aliases; Uses = uses; Namespaces = namespaces; var decs = new List<CsDeclaration>(); decs.AddRange(namespaces); SetDeclarations(decs); foreach (CsNamespace n in Namespaces) n.Namespace = this; foreach (CsType t in Types) t.Namespace = this; }
public CsGlobalNamespace(CsPreprocess[] preprocess, CsBody body, CsAttribute[] attrs, CsExternAlias[] externs, CsUsingAlias[] aliases, CsUsingDirective[] uses, CsNamespace[] namespaces, CsType[] types, int length) : base(body, "<globals>", externs, aliases, uses, namespaces, types, 0, length, 1) { Contract.Requires(attrs != null, "attrs is null"); Contract.Requires(preprocess != null, "preprocess is null"); Attributes = attrs; Preprocess = preprocess; }