Author: ankit
Date: 2007-09-27 16:56:05 -0400 (Thu, 27 Sep 2007)
New Revision: 86538

Modified:
   trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog
   trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs
   trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs
   trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs
Log:
* DefaultMSBuildProjectExtension.cs (FileToXmlElement): Handle existing
XmlElements. Update LogicalName and DependentUpon correctly.
* MSBuildFileFormat.cs (WriteFileInternal): Always update XmlElements for
project files.
(HandleFileRenamed): Use FileToXmlElement to correctly update the xml
element.
* Utils.cs (RemoveChild): New.


Modified: trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog
===================================================================
--- trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog       2007-09-27 
20:44:41 UTC (rev 86537)
+++ trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog       2007-09-27 
20:56:05 UTC (rev 86538)
@@ -1,3 +1,13 @@
+2007-09-28  Ankit Jain  <[EMAIL PROTECTED]>
+
+       * DefaultMSBuildProjectExtension.cs (FileToXmlElement): Handle existing
+       XmlElements. Update LogicalName and DependentUpon correctly.
+       * MSBuildFileFormat.cs (WriteFileInternal): Always update XmlElements 
for
+       project files.
+       (HandleFileRenamed): Use FileToXmlElement to correctly update the xml
+       element.
+       * Utils.cs (RemoveChild): New.
+
 2007-09-27  Ankit Jain  <[EMAIL PROTECTED]>
 
        * MSBuildProjectExtension.cs: New.

Modified: 
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs
===================================================================
--- 
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs   
    2007-09-27 20:44:41 UTC (rev 86537)
+++ 
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs   
    2007-09-27 20:56:05 UTC (rev 86538)
@@ -301,43 +301,69 @@
 
                        //FIXME: Subtype
 
+                       bool newElement = false;
                        XmlDocument doc = data.Document;
-                       XmlElement elem = doc.CreateElement (name, Utils.ns);
-                       elem.SetAttribute ("Include", Utils.CanonicalizePath 
(projectFile.RelativePath));
-
-                       XmlNode n = doc.SelectSingleNode (String.Format (
+                       XmlElement elem;
+                       if (!data.ProjectFileElements.TryGetValue (projectFile, 
out elem)) {
+                               newElement = true;
+                               elem = doc.CreateElement (name, Utils.ns);
+                               XmlNode n = doc.SelectSingleNode (String.Format 
(
                                        "/tns:Project/tns:ItemGroup/tns:{0}", 
name), MSBuildFileFormat.NamespaceManager);
 
-                       if (n == null) {
-                               n = doc.CreateElement ("ItemGroup", Utils.ns);
-                               doc.DocumentElement.AppendChild (n);
-                               n.AppendChild (elem);
-                       } else {
-                               n.ParentNode.AppendChild (elem);
-                       }
+                               if (n == null) {
+                                       n = doc.CreateElement ("ItemGroup", 
Utils.ns);
+                                       doc.DocumentElement.AppendChild (n);
+                                       n.AppendChild (elem);
+                               } else {
+                                       n.ParentNode.AppendChild (elem);
+                               }
 
-                       if (projectFile.BuildAction == 
BuildAction.EmbedAsResource) {
-                               if (Utils.GetMSBuildData (project) == null ||
-                                       
Services.ProjectService.GetDefaultResourceId (projectFile) != 
projectFile.ResourceId)
+                               bool notMSBuild = (Utils.GetMSBuildData 
(project) == null);
+                               if (projectFile.BuildAction == 
BuildAction.EmbedAsResource &&
+                                       (notMSBuild || 
Services.ProjectService.GetDefaultResourceId (projectFile) != 
projectFile.ResourceId)) {
                                        //Emit LogicalName if we are writing 
elements for a Non-MSBuidProject,
-                                       //(eg. when converting a gtk-sharp 
project, it might depend on non-vs
-                                       // style resource naming)
+                                       //  (eg. when converting a gtk-sharp 
project, it might depend on non-vs
+                                       //  style resource naming )
                                        //Or when the resourceId is different 
from the default one
                                        Utils.EnsureChildValue (elem, 
"LogicalName", Utils.Escape (projectFile.ResourceId));
 
+                                       if (notMSBuild)
+                                               // explicitly set the 
resourceId, as once when it becomes a
+                                               // msbuild project, .ResourceId 
will give resourceId by msbuild
+                                               // rules, but we want to retain 
this value
+                                               projectFile.ResourceId = 
projectFile.ResourceId;
+                               }
+
+                               if (projectFile.BuildAction == 
BuildAction.FileCopy)
+                                       Utils.EnsureChildValue (elem, 
"CopyToOutputDirectory", "Always");
+
+                               if (projectFile.IsExternalToProject)
+                                       Utils.EnsureChildValue (elem, "Link", 
Path.GetFileName (projectFile.Name));
+                       }
+
+                       elem.SetAttribute ("Include", Utils.CanonicalizePath 
(projectFile.RelativePath));
+
+                       if (projectFile.BuildAction == 
BuildAction.EmbedAsResource) {
+                               string projectResourceId = 
projectFile.ResourceId;
+
+                               if (!newElement) {
+                                       if 
(Services.ProjectService.GetDefaultResourceId (projectFile) == 
projectResourceId)
+                                               Utils.RemoveChild (elem, 
"LogicalName");
+                                       else
+                                               Utils.EnsureChildValue (elem, 
"LogicalName", Utils.Escape (projectResourceId));
+                               }
+
                                //DependentUpon is relative to the basedir of 
the 'pf' (resource file)
-                               if (!String.IsNullOrEmpty 
(projectFile.DependsOn))
+                               if (String.IsNullOrEmpty 
(projectFile.DependsOn)) {
+                                       if (!newElement)
+                                               Utils.RemoveChild (elem, 
"DependentUpon");
+                               } else {
                                        Utils.EnsureChildValue (elem, 
"DependentUpon",
                                                Utils.CanonicalizePath 
(Runtime.FileService.AbsoluteToRelativePath (
                                                        Path.GetDirectoryName 
(projectFile.Name), projectFile.DependsOn)));
+                               }
                        }
 
-                       if (projectFile.BuildAction == BuildAction.FileCopy)
-                               Utils.EnsureChildValue (elem, 
"CopyToOutputDirectory", "Always");
-
-                       if (projectFile.IsExternalToProject)
-                               Utils.EnsureChildValue (elem, "Link", 
Path.GetFileName (projectFile.Name));
-
                        return elem;
                }
 

Modified: trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs
===================================================================
--- trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs    
2007-09-27 20:44:41 UTC (rev 86537)
+++ trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs    
2007-09-27 20:56:05 UTC (rev 86538)
@@ -264,16 +264,16 @@
                        foreach (ProjectReference pref in 
project.ProjectReferences)
                                data.ProjectReferenceElements [pref] = 
data.ExtensionChain.ReferenceToXmlElement (data, project, pref);
                
+                       foreach (ProjectFile pfile in project.ProjectFiles) {
+                               XmlElement xe = 
data.ExtensionChain.FileToXmlElement (data, project, pfile);
+                               if (xe != null)
+                                       data.ProjectFileElements [pfile] = xe;
+                       }
+
                        //FIXME: Set ActiveConfiguration
                        CleanUpEmptyItemGroups (doc);
 
                        if (newdoc) {
-                               foreach (ProjectFile pfile in 
project.ProjectFiles) {
-                                       XmlElement xe = 
data.ExtensionChain.FileToXmlElement (data, project, pfile);
-                                       if (xe != null)
-                                               data.ProjectFileElements 
[pfile] = xe;
-                               }
-
                                XmlElement elem = doc.CreateElement 
("Configuration", Utils.ns);
                                data.GlobalConfigElement.AppendChild (elem);
                                elem.InnerText = "Debug";
@@ -660,8 +660,9 @@
                                return;
 
                        //FIXME: Check whether this file is a ApplicationIcon 
and accordingly update that?
-                       XmlElement elem = d.ProjectFileElements [e.ProjectFile];
-                       elem.SetAttribute ("Include", Utils.CanonicalizePath 
(e.ProjectFile.RelativePath));
+                       XmlElement elem = d.ExtensionChain.FileToXmlElement (d, 
e.Project, e.ProjectFile);
+                       if (elem != null)
+                               d.ProjectFileElements [e.ProjectFile] = elem;
                }
 
                static void HandleFilePropertyChanged (object sender, 
ProjectFileEventArgs e)

Modified: trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs
===================================================================
--- trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs        2007-09-27 
20:44:41 UTC (rev 86537)
+++ trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs        2007-09-27 
20:56:05 UTC (rev 86538)
@@ -64,6 +64,13 @@
                        return null;
                }
 
+               public static void RemoveChild (XmlNode parent, string 
localName)
+               {
+                       XmlNode child = MoveToChild (parent, localName);
+                       if (child != null)
+                               parent.RemoveChild (child);
+               }
+
                public static void EnsureChildValue (XmlNode node, string 
localName, bool val)
                {
                        EnsureChildValue (node, localName, val.ToString 
().ToLower ());

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to