2006-12-16 Marek Sieradzki <marek.sieradzki@gmail.com>
[mono.git] / mcs / class / Microsoft.Build.Engine / Microsoft.Build.BuildEngine / Engine.cs
index b94a5c57003f1100f9d13c03f7b89321f9c3f070..d345c2d4da9de730a88baf7d2e0c8bf006532af9 100644 (file)
@@ -29,6 +29,7 @@
 
 using System;
 using System.Collections;
+using System.Collections.Generic;
 using System.IO;
 using Microsoft.Build.Framework;
 using Mono.XBuild.Utilities;
@@ -44,10 +45,10 @@ namespace Microsoft.Build.BuildEngine {
                EventSource             eventSource;
                bool                    buildStarted;
                BuildPropertyGroup      globalProperties;
-               IDictionary             importedProjects;
-               IList                   loggers;
-               bool                    onlyLogCriticalEvents;
-               IDictionary             projects;
+               //IDictionary           importedProjects;
+               List <ILogger>          loggers;
+               //bool                  onlyLogCriticalEvents;
+               Dictionary <string, Project>    projects;
 
                static Engine           globalEngine;
                static Version          version;
@@ -68,9 +69,9 @@ namespace Microsoft.Build.BuildEngine {
                {
                        this.binPath = binPath;
                        this.buildEnabled = true;
-                       this.projects = new Hashtable ();
+                       this.projects = new Dictionary <string, Project> ();
                        this.eventSource = new EventSource ();
-                       this.loggers = new ArrayList ();
+                       this.loggers = new List <ILogger> ();
                        this.buildStarted = false;
                        this.globalProperties = new BuildPropertyGroup ();
                        
@@ -167,13 +168,16 @@ namespace Microsoft.Build.BuildEngine {
                        bool result;
                        Project project;
                        
-                       if (projects.Contains (projectFile)) {
+                       if (projects.ContainsKey (projectFile)) {
                                project = (Project) projects [projectFile];
                                LogProjectStarted (project, targetNames);
                                result = project.Build (targetNames, targetOutputs);
+                       } else {
+                               project = CreateNewProject ();
+                               project.Load (projectFile);
+                               LogProjectStarted (project, targetNames);
+                               result = project.Build (targetNames, targetOutputs);
                        }
-                       else
-                               return false;
                        
                        LogProjectFinished (project, result);
                        
@@ -191,7 +195,7 @@ namespace Microsoft.Build.BuildEngine {
 
                public Project CreateNewProject ()
                {
-                       if (defaultTasksRegistered == true)
+                       if (defaultTasksRegistered)
                                CheckBinPath ();
                        // FIXME: I don't really know if it should be here
                        LogBuildStarted ();
@@ -203,7 +207,7 @@ namespace Microsoft.Build.BuildEngine {
                        if (projectFullFileName == null)
                                throw new ArgumentNullException ("projectFullFileName");
                        
-                       return (Project) projects [projectFullFileName];
+                       return projects [projectFullFileName];
                }
 
                internal void RemoveLoadedProject (Project p)
@@ -233,8 +237,8 @@ namespace Microsoft.Build.BuildEngine {
 
                public void UnloadAllProjects ()
                {
-                       foreach (DictionaryEntry e in projects)
-                               UnloadProject ((Project) e.Value);
+                       foreach (KeyValuePair <string, Project> e in projects)
+                               UnloadProject (e.Value);
                }
 
                [MonoTODO]
@@ -301,7 +305,7 @@ namespace Microsoft.Build.BuildEngine {
                        Project defaultTasksProject = CreateNewProject ();
                        
                        if (binPath != null) {
-                               if (File.Exists (Path.Combine (binPath, defaultTasksProjectName)) == true) {
+                               if (File.Exists (Path.Combine (binPath, defaultTasksProjectName))) {
                                        defaultTasksProject.Load (Path.Combine (binPath, defaultTasksProjectName));
                                        defaultTasks = defaultTasksProject.TaskDatabase;
                                } else {