18 using ErrorManagement;
20 using TypeSystem.Constraints;
21 using DynVarManagement;
22 using System.Collections.Generic;
23 using System.Reflection;
25 namespace TypeSystem.Operations {
47 #region TypeExpression
48 public override object Exec(
TypeExpression typeExpression,
object arg) {
55 return emptyAccessModifier;
61 return arrayBCLClassType.AcceptOperation(
this, null);
67 return stringBCLClassType.AcceptOperation(
this, null);
74 if (subtitution == null)
75 return emptyAccessModifier;
76 return subtitution.AcceptOperation(
this, null);
82 return g.FieldTypeExpression.AcceptOperation(
this, null);
92 allMembers =
union(allMembers, temp);
95 if (unionType.IsDynamic)
101 members = intersect(members, temp);
106 List<AccessModifier> list =
new List<AccessModifier>();
108 if (contains(set2, accessModifier, ContainsStrategy.OnlyName))
109 list.Add(accessModifier);
115 List<AccessModifier> list =
new List<AccessModifier>();
118 if (!contains(set1, accessModifier, ContainsStrategy.NameAndClass))
119 list.Add(accessModifier);
125 private enum ContainsStrategy { OnlyName, NameAndClass };
129 if (strategy == ContainsStrategy.OnlyName)
132 if (accessModifier.
Class == null || element.
Class == null)
148 Array.Copy(inheritedMembers, 0, members, 0, inheritedMembers.Length);
149 classType.Members.Values.CopyTo(members, inheritedMembers.Length);
157 interfaceType.Members.Values.CopyTo(members, 0);
160 int previousLength = members.Length;
161 Array.Resize(ref members, members.Length + tempMembers.Length);
162 Array.Copy(tempMembers, 0, members, previousLength, tempMembers.Length);
172 return this.getAccessModifiers(bclClassType,
false);
175 List<AccessModifier> list =
new List<AccessModifier>();
176 Type type = Type.GetType(bclUserType.Name);
177 MemberInfo[] members = type.GetMembers(BindingFlags.Instance | BindingFlags.Public);
178 foreach (MemberInfo member
in members) {
180 IMemberType memberType = (
IMemberType)bclUserType.GetType().GetMethod(
"FindMember").Invoke(bclUserType,
new object[] { member.Name });
182 member.Name, memberType, isInterface);
183 list.Add(accessModifier);
191 #region BCLInterfaceType
195 return this.getAccessModifiers(bclInterfaceType,
true);
override object Exec(UnionType unionType, object arg)
Represents a type obtained using introspection.
Representa an array type.
This class represent the entry wnen sending a message to an operation object derived from TypeExpress...
string Name
Class identifier;
Represents an operation to return all the members in a type
override object Exec(BCLClassType bclClassType, object arg)
Represents a interface type.
string MemberIdentifier
Gets the attribute name
static List< Modifier > getMethodModifierList(MethodBase method)
Gets the modifier list from a method info
override object Exec(TypeVariable tv, object arg)
Abstract class that represents all different types.
Represents a generic type expression
override object Exec(ClassType classType, object arg)
List< InterfaceType > InterfaceList
Gets the list of interfaces
override object Exec(BCLInterfaceType bclInterfaceType, object arg)
override object Exec(FieldType g, object arg)
UserType Class
Gets or sets the class type reference
override object AcceptOperation(TypeSystemOperation op, object arg)
ClassType BaseClass
Gets the base type (null if not exists).
override object Exec(StringType stringType, object arg)
Association Class between ClassType and MethodType (or Fields). Represents the access modifier inform...
override object AcceptOperation(TypeSystemOperation op, object arg)
override object Exec(ArrayType arrayType, object arg)
override object Exec(InterfaceType interfaceType, object arg)
virtual object AcceptOperation(TypeSystemOperation op, object arg)
Representa a class attribute (fields or methods).