Free cookie consent management tool by TermsFeed Policy Generator

source: branches/CodeEditor/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/Ast/GeneralScope/TypeDeclaration.cs @ 11700

Last change on this file since 11700 was 11700, checked in by jkarder, 9 years ago

#2077: created branch and added first version

File size: 4.1 KB
Line 
1//
2// TypeDeclaration.cs
3//
4// Author:
5//       Mike Krüger <mkrueger@novell.com>
6//
7// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
8//
9// Permission is hereby granted, free of charge, to any person obtaining a copy
10// of this software and associated documentation files (the "Software"), to deal
11// in the Software without restriction, including without limitation the rights
12// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13// copies of the Software, and to permit persons to whom the Software is
14// furnished to do so, subject to the following conditions:
15//
16// The above copyright notice and this permission notice shall be included in
17// all copies or substantial portions of the Software.
18//
19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25// THE SOFTWARE.
26
27using System.Collections.Generic;
28using System.Linq;
29using ICSharpCode.NRefactory.TypeSystem;
30
31namespace ICSharpCode.NRefactory.CSharp
32{
33  public enum ClassType
34  {
35    Class,
36    Struct,
37    Interface,
38    Enum
39  }
40 
41  /// <summary>
42  /// class Name&lt;TypeParameters&gt; : BaseTypes where Constraints;
43  /// </summary>
44  public class TypeDeclaration : EntityDeclaration
45  {
46    public override NodeType NodeType {
47      get { return NodeType.TypeDeclaration; }
48    }
49   
50    public override SymbolKind SymbolKind {
51      get { return SymbolKind.TypeDefinition; }
52    }
53   
54    ClassType classType;
55
56    public CSharpTokenNode TypeKeyword {
57      get {
58        switch (classType) {
59          case ClassType.Class:
60            return GetChildByRole(Roles.ClassKeyword);
61          case ClassType.Struct:
62            return GetChildByRole(Roles.StructKeyword);
63          case ClassType.Interface:
64            return GetChildByRole(Roles.InterfaceKeyword);
65          case ClassType.Enum:
66            return GetChildByRole(Roles.EnumKeyword);
67          default:
68            return CSharpTokenNode.Null;
69        }
70      }
71    }
72   
73    public ClassType ClassType {
74      get { return classType; }
75      set {
76        ThrowIfFrozen();
77        classType = value;
78      }
79    }
80
81    public CSharpTokenNode LChevronToken {
82      get { return GetChildByRole (Roles.LChevron); }
83    }
84
85    public AstNodeCollection<TypeParameterDeclaration> TypeParameters {
86      get { return GetChildrenByRole (Roles.TypeParameter); }
87    }
88
89    public CSharpTokenNode RChevronToken {
90      get { return GetChildByRole (Roles.RChevron); }
91    }
92
93
94
95    public CSharpTokenNode ColonToken {
96      get {
97        return GetChildByRole(Roles.Colon);
98      }
99    }
100   
101    public AstNodeCollection<AstType> BaseTypes {
102      get { return GetChildrenByRole(Roles.BaseType); }
103    }
104   
105    public AstNodeCollection<Constraint> Constraints {
106      get { return GetChildrenByRole(Roles.Constraint); }
107    }
108   
109    public CSharpTokenNode LBraceToken {
110      get { return GetChildByRole (Roles.LBrace); }
111    }
112
113    public AstNodeCollection<EntityDeclaration> Members {
114      get { return GetChildrenByRole (Roles.TypeMemberRole); }
115    }
116   
117    public CSharpTokenNode RBraceToken {
118      get { return GetChildByRole (Roles.RBrace); }
119    }
120   
121    public override void AcceptVisitor (IAstVisitor visitor)
122    {
123      visitor.VisitTypeDeclaration (this);
124    }
125   
126    public override T AcceptVisitor<T> (IAstVisitor<T> visitor)
127    {
128      return visitor.VisitTypeDeclaration (this);
129    }
130   
131    public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
132    {
133      return visitor.VisitTypeDeclaration (this, data);
134    }
135   
136    protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
137    {
138      TypeDeclaration o = other as TypeDeclaration;
139      return o != null && this.ClassType == o.ClassType && MatchString(this.Name, o.Name)
140        && this.MatchAttributesAndModifiers(o, match) && this.TypeParameters.DoMatch(o.TypeParameters, match)
141        && this.BaseTypes.DoMatch(o.BaseTypes, match) && this.Constraints.DoMatch(o.Constraints, match)
142        && this.Members.DoMatch(o.Members, match);
143    }
144  }
145}
Note: See TracBrowser for help on using the repository browser.