using System.CodeDom.Compiler;
using System.IO;
using System.Text;
-
+
+namespace Mono.CSharp {
public class Outline {
+
+ bool declared_only;
+ bool show_private;
+ bool filter_obsolete;
- Options options;
IndentedTextWriter o;
Type t;
- public Outline (Type t, TextWriter output, Options options)
+ public Outline (Type t, TextWriter output, bool declared_only, bool show_private, bool filter_obsolete)
{
this.t = t;
this.o = new IndentedTextWriter (output, "\t");
- this.options = options;
+ this.declared_only = declared_only;
+ this.show_private = show_private;
+ this.filter_obsolete = filter_obsolete;
}
public void OutlineType ()
o.Write (GetTypeKind (t));
o.Write (" ");
- Type [] interfaces = (Type []) Comparer.Sort (TypeGetInterfaces (t, options.DeclaredOnly));
+ Type [] interfaces = (Type []) Comparer.Sort (TypeGetInterfaces (t, declared_only));
Type parent = t.BaseType;
if (t.IsSubclassOf (typeof (System.MulticastDelegate))) {
}
if (t.IsEnum) {
- Type underlyingType = Enum.GetUnderlyingType (t);
+ Type underlyingType = System.Enum.GetUnderlyingType (t);
if (underlyingType != typeof (int))
o.Write (" : {0}", FormatType (underlyingType));
}
first = true;
foreach (ConstructorInfo ci in t.GetConstructors (DefaultFlags)) {
-
if (! ShowMember (ci))
continue;
o.WriteLine ();
first = false;
+ OutlineMemberAttribute (ci);
OutlineConstructor (ci);
o.WriteLine ();
if (first)
o.WriteLine ();
first = false;
-
+
+ OutlineMemberAttribute (m);
OutlineMethod (m);
o.WriteLine ();
o.WriteLine ();
first = false;
+ OutlineMemberAttribute (m);
OutlineOperator (m);
o.WriteLine ();
o.WriteLine ();
first = false;
+ OutlineMemberAttribute (pi);
OutlineProperty (pi);
o.WriteLine ();
o.WriteLine ();
first = false;
+ OutlineMemberAttribute (fi);
OutlineField (fi);
o.WriteLine ();
o.WriteLine ();
first = false;
+ OutlineMemberAttribute (ei);
OutlineEvent (ei);
o.WriteLine ();
o.WriteLine ();
first = false;
- new Outline (ntype, o, options).OutlineType ();
+ new Outline (ntype, o, declared_only, show_private, filter_obsolete).OutlineType ();
}
o.Indent--; o.WriteLine ("}");
get {
BindingFlags f = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
- if (options.DeclaredOnly)
+ if (declared_only)
f |= BindingFlags.DeclaredOnly;
return f;
o.WriteLine ("[Obsolete]");
}
+ void OutlineMemberAttribute (MemberInfo mi)
+ {
+ if (!mi.IsDefined (typeof (System.ObsoleteAttribute), false))
+ return;
+ var oa = mi.GetCustomAttributes (typeof (System.ObsoleteAttribute), false) [0] as ObsoleteAttribute;
+ var msg = oa.Message;
+ o.WriteLine ("[Obsolete{0}]", msg == null || msg == "" ? "" : string.Format ("(\"{0}\")", msg));
+ }
+
void OutlineEvent (EventInfo ei)
{
MethodBase accessor = ei.GetAddMethod (true);
}
}
+#if NET_2_0
string FormatGenericParams (Type [] args)
{
StringBuilder sb = new StringBuilder ();
sb.Append (">");
return sb.ToString ();
}
-
+#endif
+
// TODO: fine tune this so that our output is less verbose. We need to figure
// out a way to do this while not making things confusing.
string FormatType (Type t)
{
+ if (t == null)
+ return "";
+
string type = GetFullName (t);
+ if (type == null)
+ return t.ToString ();
if (!type.StartsWith ("System.")) {
if (t.Namespace == this.t.Namespace)
if (mi.MemberType == MemberTypes.Constructor && ((MethodBase) mi).IsStatic)
return false;
- if (options.ShowPrivate)
+ if (show_private)
return true;
- if (options.FilterObsolete && mi.IsDefined (typeof (ObsoleteAttribute), false))
+ if (filter_obsolete && mi.IsDefined (typeof (ObsoleteAttribute), false))
return false;
switch (mi.MemberType) {
static Type [] TypeGetInterfaces (Type t, bool declonly)
{
+ if (t.IsGenericParameter)
+ return new Type [0];
+
Type [] ifaces = t.GetInterfaces ();
if (! declonly)
return ifaces;
}
- static Comparer TypeComparer = new Comparer (new ComparerFunc (CompareType));
+// static Comparer TypeComparer = new Comparer (new ComparerFunc (CompareType));
- static Type [] Sort (Type [] types)
- {
- Array.Sort (types, TypeComparer);
- return types;
- }
+// static Type [] Sort (Type [] types)
+// {
+// Array.Sort (types, TypeComparer);
+// return types;
+// }
static int CompareMemberInfo (object a, object b)
{
ap = aa.GetParameters ();
bp = bb.GetParameters ();
- int n = Math.Min (ap.Length, bp.Length);
+ int n = System.Math.Min (ap.Length, bp.Length);
for (int i = 0; i < n; i ++)
if ((c = CompareType (ap [i].ParameterType, bp [i].ParameterType)) != 0)
return inf;
}
}
+}