2 // Copyright (c) 2004, Rodrigo B. de Oliveira (rbo@acm.org)
3 // All rights reserved.
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 // * Neither the name of Rodrigo B. de Oliveira nor the names of its
14 // contributors may be used to endorse or promote products derived from this
15 // software without specific prior written permission.
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 namespace Boo
.Lang
.Compiler
.Ast
33 [System
.Xml
.Serialization
.XmlInclude(typeof(TypeDefinition
))]
34 [System
.Xml
.Serialization
.XmlInclude(typeof(EnumMember
))]
35 [System
.Xml
.Serialization
.XmlInclude(typeof(Field
))]
36 [System
.Xml
.Serialization
.XmlInclude(typeof(Property
))]
37 [System
.Xml
.Serialization
.XmlInclude(typeof(Method
))]
38 public abstract partial class TypeMember
40 protected TypeMember()
44 protected TypeMember(TypeMemberModifiers modifiers
, string name
)
46 this.Modifiers
= modifiers
;
50 protected TypeMember(LexicalInfo lexicalInfoProvider
) : base(lexicalInfoProvider
)
54 public virtual TypeDefinition DeclaringType
58 return ParentNode
as TypeDefinition
;
62 public virtual string FullName
66 if (null != ParentNode
)
68 return DeclaringType
.FullName
+ "." + Name
;
74 public virtual NamespaceDeclaration EnclosingNamespace
78 Module enclosing
= this.EnclosingModule
;
79 return enclosing
== null ? null : enclosing
.Namespace
;
83 public virtual Module EnclosingModule
87 Node parent
= _parent
;
88 while (parent
!= null)
90 Module module
= parent
as Module
;
95 parent
= parent
.ParentNode
;
101 public TypeMemberModifiers Visibility
105 return _modifiers
& TypeMemberModifiers
.VisibilityMask
;
110 _modifiers
&= ~TypeMemberModifiers
.VisibilityMask
;
115 public bool IsVisibilitySet
119 return IsPublic
| IsInternal
| IsPrivate
| IsProtected
;
123 public bool IsAbstract
127 return IsModifierSet(TypeMemberModifiers
.Abstract
);
131 public bool IsOverride
135 return IsModifierSet(TypeMemberModifiers
.Override
);
139 public bool IsVirtual
143 return IsModifierSet(TypeMemberModifiers
.Virtual
);
151 return IsModifierSet(TypeMemberModifiers
.Static
);
159 return IsModifierSet(TypeMemberModifiers
.Public
);
163 public bool IsInternal
167 return IsModifierSet(TypeMemberModifiers
.Internal
);
171 public bool IsProtected
175 return IsModifierSet(TypeMemberModifiers
.Protected
);
179 public bool IsPrivate
183 return IsModifierSet(TypeMemberModifiers
.Private
);
191 return IsModifierSet(TypeMemberModifiers
.Final
);
195 public bool IsTransient
199 return IsModifierSet(TypeMemberModifiers
.Transient
);
203 public bool IsPartial
207 return IsModifierSet(TypeMemberModifiers
.Partial
);
211 public bool IsModifierSet(TypeMemberModifiers modifiers
)
213 return modifiers
== (_modifiers
& modifiers
);
216 override public string ToString()