2007-02-03 Marek Sieradzki <marek.sieradzki@gmail.com>
[mono.git] / mcs / class / Microsoft.Build.Engine / Microsoft.Build.BuildEngine / TaskDatabase.cs
index 32b4c059b5746078baa72c538b90a0b92d9e3d84..b1cec9a7d6c51530dfdcdda4cdce51ff40c402a5 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
+#if NET_2_0
+
 using System;
-using System.Collections;
+using System.Collections.Generic;
 using System.Reflection;
 using Microsoft.Build.Framework;
-using Mono.XBuild.Shared;
+using Mono.XBuild.Framework;
 
 namespace Microsoft.Build.BuildEngine {
        internal class TaskDatabase {
                
                // full name -> AssemblyLoadInfo
-               IDictionary     assemblyInformation;
+               Dictionary <string, AssemblyLoadInfo>   assemblyInformation;
                // full name -> Type
-               IDictionary     typesByFullName;
+               Dictionary <string, Type>               typesByFullName;
                // short name -> Type
-               IDictionary     typesByShortName;
+               Dictionary <string, Type>               typesByShortName;
        
                public TaskDatabase ()
                {
-                       assemblyInformation = new Hashtable ();
-                       typesByFullName = new Hashtable ();
-                       typesByShortName = new Hashtable ();
+                       assemblyInformation = new Dictionary <string, AssemblyLoadInfo> ();
+                       typesByFullName = new Dictionary <string, Type> ();
+                       typesByShortName = new Dictionary <string, Type> ();
                }
                
                public void RegisterTask (string classname, AssemblyLoadInfo assemblyLoadInfo)
                {
                        assemblyInformation.Add (classname, assemblyLoadInfo);
                        Assembly assembly;
-                       if (assemblyLoadInfo.InfoType == LoadInfoType.AssemblyFilename) {
+
+                       if (assemblyLoadInfo.InfoType == LoadInfoType.AssemblyFilename)
                                assembly = Assembly.LoadFrom (assemblyLoadInfo.Filename);
-                       } else if (assemblyLoadInfo.InfoType == LoadInfoType.AssemblyName) {
+                       else if (assemblyLoadInfo.InfoType == LoadInfoType.AssemblyName)
                                assembly = Assembly.Load (assemblyLoadInfo.AssemblyName);
-                       } else {
+                       else
                                assembly = Assembly.Load (assemblyLoadInfo.AssemblyNameString);
-                       }
+                       
                        Type type = assembly.GetType (classname);
                        typesByFullName.Add (classname, type);
                        typesByShortName.Add (GetShortName (classname), type);
@@ -66,14 +69,23 @@ namespace Microsoft.Build.BuildEngine {
                
                public Type GetTypeFromClassName (string classname)
                {
-                       if (typesByFullName.Contains (classname) == false) {
-                               if (typesByShortName.Contains (classname) == false)
+                       if (!typesByFullName.ContainsKey (classname)) {
+                               if (!typesByShortName.ContainsKey (classname))
                                        throw new Exception ("Not registered task.");
-                               else {
-                                       return (Type) typesByShortName [classname];
-                               }
+                               else
+                                       return typesByShortName [classname];
                        } else
-                               return (Type) typesByFullName [classname];
+                               return typesByFullName [classname];
+               }
+               
+               public void CopyTasks (TaskDatabase taskDatabase)
+               {
+                       foreach (KeyValuePair <string, AssemblyLoadInfo> kvp in taskDatabase.assemblyInformation)
+                               assemblyInformation.Add (kvp.Key, kvp.Value);
+                       foreach (KeyValuePair <string, Type> kvp in taskDatabase.typesByFullName)
+                               typesByFullName.Add (kvp.Key, kvp.Value);
+                       foreach (KeyValuePair <string, Type> kvp in taskDatabase.typesByShortName)
+                               typesByShortName.Add (kvp.Key, kvp.Value);
                }
                
                private string GetShortName (string fullname)
@@ -83,3 +95,5 @@ namespace Microsoft.Build.BuildEngine {
                }
        }
 }
+
+#endif