[runtime] Move pending_exception from InternalThread to Thread to avoid crashing...
[mono.git] / mcs / tools / misc / EnumCheck.cs
1 /**\r
2  * Namespace: System.Web\r
3  * Class:     EnumCheck\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Contact: <gvaish@iitk.ac.in>\r
7  * Status:  100%\r
8  *\r
9  * (C) Gaurav Vaish (2002)\r
10  */\r
11 \r
12 using System;\r
13 using System.Xml;\r
14 using System.Collections;\r
15 using System.Reflection;\r
16 \r
17 namespace Mono.Enumerations\r
18 {\r
19         public class EnumCheck\r
20         {\r
21                 private string className;\r
22                 private Type   type;\r
23                 private EnumCheckAssemblyCollection ecac = new EnumCheckAssemblyCollection();\r
24                 \r
25                 public static string confFile = "assemblies.xml";\r
26 \r
27                 public EnumCheck(string className)\r
28                 {\r
29                         this.className = className;\r
30                         ecac.Parse();\r
31                 }\r
32 \r
33                 public void Display()\r
34                 {\r
35                         ecac.ConfigFile = confFile;\r
36                         LoadType();\r
37                         if(type == null || !type.IsEnum)\r
38                         {\r
39                                 System.Console.Write("-->Failed to load the enumeration: " + className);\r
40                                 return;\r
41                         }\r
42                         Array ar = Enum.GetValues(type);\r
43                         System.Console.WriteLine("-->Enumeration: {0}", type.ToString());\r
44                         for(int i=0; i < ar.Length; i++)\r
45                         {\r
46                                 Enum b = (Enum)ar.GetValue(i);\r
47                                 System.Console.Write(" {0}", Enum.Format(type, b, "G"));\r
48                                 System.Console.WriteLine(" ({0}) ", Enum.Format(type, b, "D"));\r
49                         }\r
50                 }\r
51 \r
52                 private void LoadType()\r
53                 {\r
54                         type = null;\r
55                         foreach(string url in ecac)\r
56                         {\r
57                                 try\r
58                                 {\r
59                                         Assembly assembly = Assembly.LoadFrom(url);\r
60                                         foreach(Type t in assembly.GetTypes())\r
61                                         {\r
62                                                 if(!t.IsEnum)\r
63                                                         continue;\r
64                                                 if(className == t.ToString())\r
65                                                 {\r
66                                                         type = t;\r
67                                                         break;\r
68                                                 }\r
69                                         }\r
70                                 } catch(BadImageFormatException)\r
71                                 {\r
72                                 } catch(ReflectionTypeLoadException)\r
73                                 {\r
74                                 } catch(ArgumentException)\r
75                                 {\r
76                                 }\r
77                                 if(type != null)\r
78                                         return;\r
79                         }\r
80                 }\r
81 \r
82                 public static void PrintUsage()\r
83                 {\r
84                         System.Console.WriteLine("Usage:");\r
85                         System.Console.WriteLine("EnumCheck [<enum> [<enum> [... ] ] ]");\r
86                         System.Console.WriteLine("");\r
87                         System.Console.WriteLine("enum := <namespace>[.<subnamespace>[...]].enum_name");\r
88                         System.Console.WriteLine("");\r
89                 }\r
90 \r
91                 public static void Main(string[] args)\r
92                 {\r
93                         if(args.Length > 0 && (args[0] == "--help" || args[0] == "-h"))\r
94                         {\r
95                                 PrintUsage();\r
96                                 return;\r
97                         }\r
98                         EnumCheck check = null;\r
99                         string bdir;\r
100                         System.Console.Write("Enter assembly configuration file [{0}]:", confFile);\r
101                         //System.Console.Write("[{0}]: ", confFile);\r
102                         bdir = System.Console.ReadLine();\r
103                         while(bdir.EndsWith("/") || bdir.EndsWith("\\"))\r
104                         {\r
105                                 bdir = bdir.Substring(0, bdir.Length - 1);\r
106                         }\r
107                         if(bdir != "")\r
108                         {\r
109                                 confFile = bdir;\r
110                         }\r
111                         if(args.Length != 0)\r
112                         {\r
113                                 foreach(string clName in args)\r
114                                 {\r
115                                         check = new EnumCheck(clName);\r
116                                         check.Display();\r
117                                         System.Console.WriteLine("\n");\r
118                                 }\r
119                         }\r
120                         while(true)\r
121                         {\r
122                                 System.Console.Write("Enter the name of the Enumeration (end to stop): ");\r
123                                 string clName = System.Console.ReadLine();\r
124                                 if(clName == "stop" || clName == "end" || clName.Length == 0)\r
125                                         break;\r
126                                 check = new EnumCheck(clName);\r
127                                 check.Display();\r
128                                 System.Console.WriteLine("\n");\r
129                         }\r
130                 }\r
131         }\r
132 }\r