3 using System
.Reflection
;
4 using System
.Collections
;
6 namespace Mono
.Util
.CorCompare
10 /// Represents a generic member that is completely missing
13 /// created by - Piersh
14 /// created on - 3/1/2002 3:37:00 am
16 abstract class MissingMember
: MissingBase
18 // e.g. <method name="Equals" status="missing"/>
19 protected MemberInfo mInfoMono
;
20 protected MemberInfo mInfoMS
;
22 public MissingMember (MemberInfo infoMono
, MemberInfo infoMS
)
26 m_nodeStatus
= new NodeStatus (infoMono
, infoMS
);
29 public override string Name
31 get { return Info.Name; }
34 public override NodeStatus
Analyze ()
36 if (!Status
.IsMissing
)
38 rgAttributes
= new ArrayList ();
39 nsAttributes
= MissingAttribute
.AnalyzeAttributes (
40 (mInfoMono
== null) ? null : mInfoMono
.GetCustomAttributes (false),
41 (mInfoMS
== null) ? null : mInfoMS
.GetCustomAttributes (false),
44 if (mInfoMono
!= null && mInfoMS
!= null)
46 Accessibility acMono
= GetAccessibility (mInfoMono
);
47 Accessibility acMS
= GetAccessibility (mInfoMS
);
49 Status
.AddWarning ("Should be "+AccessibilityToString (acMS
));
52 m_nodeStatus
.Add (nsAttributes
);
58 /// returns the MemberInfo for this member.
59 /// if it's a missing member then the microsoft MemberInfo is returned instead
61 public MemberInfo Info
63 get { return (mInfoMono != null) ? mInfoMono : mInfoMS; }
67 /// returns the 'best' info for this member. the 'best' info is the microsoft info, if it's available, otherwise the mono info.
69 public MemberInfo BestInfo
71 get { return (mInfoMS != null) ? mInfoMS : mInfoMono; }
74 public static string GetUniqueName (MemberInfo mi
)
76 return (mi
.MemberType
).ToString () + mi
.ToString ();
79 public static Accessibility
GetAccessibility (MemberInfo mi
)
81 switch (mi
.MemberType
)
83 case MemberTypes
.Constructor
:
84 case MemberTypes
.Method
:
85 MethodBase mb
= (MethodBase
) mi
;
87 return Accessibility
.Public
;
88 else if (mb
.IsAssembly
)
89 return Accessibility
.Assembly
;
90 else if (mb
.IsFamilyOrAssembly
)
91 return Accessibility
.FamilyOrAssembly
;
93 return Accessibility
.Family
;
94 else if (mb
.IsFamilyAndAssembly
)
95 return Accessibility
.FamilyAndAssembly
;
96 else if (mb
.IsPrivate
)
97 return Accessibility
.Private
;
99 case MemberTypes
.Field
:
100 FieldInfo fi
= (FieldInfo
) mi
;
102 return Accessibility
.Public
;
103 else if (fi
.IsAssembly
)
104 return Accessibility
.Assembly
;
105 else if (fi
.IsFamilyOrAssembly
)
106 return Accessibility
.FamilyOrAssembly
;
107 else if (fi
.IsFamily
)
108 return Accessibility
.Family
;
109 else if (fi
.IsFamilyAndAssembly
)
110 return Accessibility
.FamilyAndAssembly
;
111 else if (fi
.IsPrivate
)
112 return Accessibility
.Private
;
114 case MemberTypes
.NestedType
:
116 if (ti
.IsNestedPublic
)
117 return Accessibility
.Public
;
118 if (ti
.IsNestedAssembly
)
119 return Accessibility
.Assembly
;
120 else if (ti
.IsNestedFamORAssem
)
121 return Accessibility
.FamilyOrAssembly
;
122 else if (ti
.IsNestedFamily
)
123 return Accessibility
.Family
;
124 else if (ti
.IsNestedFamANDAssem
)
125 return Accessibility
.FamilyAndAssembly
;
126 else if (ti
.IsNestedPrivate
)
127 return Accessibility
.Private
;
129 case MemberTypes
.Event
:
130 case MemberTypes
.Property
:
131 return Accessibility
.Public
;
133 throw new Exception ("Missing handler for MemberType: "+mi
.MemberType
.ToString ());
135 throw new Exception ("Invalid accessibility: "+mi
.ToString ());