5
// Mike Krüger <mkrueger@novell.com>
7
// Copyright (C) 2008 Novell, Inc (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
using MonoDevelop.Core.Collections;
31
using System.Collections.Generic;
32
using System.Collections.ObjectModel;
35
namespace MonoDevelop.Projects.Dom
37
public class DomUsing : IUsing
39
static readonly Dictionary<string, IReturnType> emptyAliases = new Dictionary<string,IReturnType> ();
40
static readonly List<string> emptyNamespaces = new List<string> ();
42
protected List<string> namespaces = emptyNamespaces;
43
protected Dictionary<string, IReturnType> aliases = emptyAliases;
45
public DomRegion Region {
50
public DomRegion ValidRegion {
55
public ReadOnlyCollection<string> Namespaces {
57
return namespaces.AsReadOnly ();
61
public ReadOnlyDictionary<string, IReturnType> Aliases {
63
return new ReadOnlyDictionary<string, IReturnType> (aliases);
67
public bool IsFromNamespace {
74
IsFromNamespace = false;
75
ValidRegion = DomRegion.Empty;
78
public DomUsing (DomRegion region, string nspace) : this ()
84
public void Add (string nspace)
86
if (namespaces == null || namespaces == emptyNamespaces)
87
namespaces = new List<string> ();
88
namespaces.Add (nspace);
91
public void Add (string nspace, IReturnType alias)
93
if (aliases == null || aliases == emptyAliases)
94
aliases = new Dictionary<string, IReturnType> ();
95
aliases[nspace] = alias;
98
public S AcceptVisitor<T, S> (IDomVisitor<T, S> visitor, T data)
100
return visitor.Visit (this, data);
103
public override string ToString ()
105
StringBuilder aliasString = new StringBuilder ();
106
foreach (var alias in this.aliases) {
107
if (aliasString.Length > 0)
108
aliasString.Append (", ");
109
aliasString.Append (alias.Key);
110
aliasString.Append ("/");
111
aliasString.Append (alias.Value.ToInvariantString ());
113
return string.Format ("[DomUsing: Region={0}, Namespaces=({1}), Aliases=({3}), IsFromNamespace={2}]", Region, string.Join (",", namespaces.ToArray ()), IsFromNamespace, aliasString);