Browse Source

Add namespace restore while saving assembly info

pull/624/head
olegbevz 12 years ago
parent
commit
807651fe54
  1. 10
      src/AddIns/Analysis/Profiler/Frontend/AddIn/Properties/AssemblyInfo.cs
  2. 52
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoProvider.cs
  3. 35
      src/Main/Base/Test/ProjectOptions/AssemblyInfoProviderTests.cs

10
src/AddIns/Analysis/Profiler/Frontend/AddIn/Properties/AssemblyInfo.cs

@ -18,16 +18,15 @@
#region Using directives #region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
#endregion #endregion
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
using System.Reflection;
using System.Resources;
[assembly: AssemblyTitle("Profiler.AddIn")] [assembly: AssemblyTitle("Profiler.AddIn")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
@ -51,3 +50,6 @@ using System.Windows;
// You can specify all the values or you can use the default the Revision and // You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below: // Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.*")]
[assembly: NeutralResourcesLanguage("af")]
[assembly: AssemblyFlags(AssemblyNameFlags.EnableJITcompileOptimizer)]

52
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoProvider.cs

@ -22,6 +22,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
using Attribute = ICSharpCode.NRefactory.CSharp.Attribute; using Attribute = ICSharpCode.NRefactory.CSharp.Attribute;
using CSharpParser = ICSharpCode.NRefactory.CSharp.CSharpParser; using CSharpParser = ICSharpCode.NRefactory.CSharp.CSharpParser;
@ -55,6 +56,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#endregion #endregion
/// <summary>
/// Read assembly info from file
/// </summary>
/// <param name="assemblyInfoFileName">Source file name</param>
/// <returns>Assembly info model</returns>
public AssemblyInfo ReadAssemblyInfo(string assemblyInfoFileName) public AssemblyInfo ReadAssemblyInfo(string assemblyInfoFileName)
{ {
using (var fileStream = new FileStream(assemblyInfoFileName, FileMode.Open, FileAccess.Read)) using (var fileStream = new FileStream(assemblyInfoFileName, FileMode.Open, FileAccess.Read))
@ -63,6 +69,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
} }
} }
/// <summary>
/// Read assembly info from stream
/// </summary>
/// <param name="stream">Sourcce stream</param>
/// <returns>Assembly info model</returns>
public AssemblyInfo ReadAssemblyInfo(Stream stream) public AssemblyInfo ReadAssemblyInfo(Stream stream)
{ {
var syntaxTree = ReadSyntaxTree(stream); var syntaxTree = ReadSyntaxTree(stream);
@ -152,6 +163,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
return assemblyInfo; return assemblyInfo;
} }
/// <summary>
/// Merge assembly info in file with the assembly info model
/// </summary>
/// <param name="assemblyInfo">Assembly info model</param>
/// <param name="fileName">Source file name</param>
public void MergeAssemblyInfo(AssemblyInfo assemblyInfo, string fileName) public void MergeAssemblyInfo(AssemblyInfo assemblyInfo, string fileName)
{ {
var content = string.Empty; var content = string.Empty;
@ -165,6 +181,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
File.WriteAllText(fileName, content); File.WriteAllText(fileName, content);
} }
/// <summary>
/// Merge assembly info from the stream with the assembly info model
/// </summary>
/// <param name="assemblyInfo">Assembly info model</param>
/// <param name="inputStream">Source file name</param>
/// <returns>Result assembly info file content</returns>
public string MergeAssemblyInfo(AssemblyInfo assemblyInfo, Stream inputStream) public string MergeAssemblyInfo(AssemblyInfo assemblyInfo, Stream inputStream)
{ {
var syntaxTree = ReadSyntaxTree(inputStream); var syntaxTree = ReadSyntaxTree(inputStream);
@ -172,6 +194,15 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
if (syntaxTree == null) if (syntaxTree == null)
throw new Exception("Can't read assembly info syntax tree."); throw new Exception("Can't read assembly info syntax tree.");
AddNamespaceUsingIfNotExist(syntaxTree, "System");
AddNamespaceUsingIfNotExist(syntaxTree, "System.Reflection");
if (assemblyInfo.NeutralLanguage != null)
AddNamespaceUsingIfNotExist(syntaxTree, "System.Resources");
if (assemblyInfo.Guid.HasValue || assemblyInfo.ComVisible)
AddNamespaceUsingIfNotExist(syntaxTree, "System.Runtime.InteropServices");
SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyTitle, assemblyInfo.Title); SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyTitle, assemblyInfo.Title);
SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyDescription, assemblyInfo.Description); SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyDescription, assemblyInfo.Description);
SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyCompany, assemblyInfo.Company); SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyCompany, assemblyInfo.Company);
@ -356,5 +387,26 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
syntaxTree.AddChild(attributeSection, new NRefactory.Role<AttributeSection>("Member")); syntaxTree.AddChild(attributeSection, new NRefactory.Role<AttributeSection>("Member"));
} }
} }
private void AddNamespaceUsingIfNotExist(SyntaxTree syntaxTree, string @namespace)
{
AstNode nodeToInsertAfter = null;
foreach (var usingDeclaration in syntaxTree.Children.OfType<UsingDeclaration>())
{
if (usingDeclaration.Namespace == @namespace)
return;
if (string.Compare(usingDeclaration.Namespace, @namespace, StringComparison.InvariantCulture) < 0)
nodeToInsertAfter = usingDeclaration;
}
if (nodeToInsertAfter != null)
syntaxTree.InsertChildAfter(nodeToInsertAfter, new UsingDeclaration(@namespace), new Role<UsingDeclaration>("Using"));
else if (syntaxTree.HasChildren)
syntaxTree.InsertChildBefore(syntaxTree.FirstChild, new UsingDeclaration(@namespace), new Role<UsingDeclaration>("Using"));
else
syntaxTree.AddChild(new UsingDeclaration(@namespace), new Role<UsingDeclaration>("Using"));
}
} }
} }

35
src/Main/Base/Test/ProjectOptions/AssemblyInfoProviderTests.cs

@ -345,30 +345,43 @@ using System.Runtime.InteropServices;
{ {
var assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = true }; var assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = true };
Assert.AreEqual( Assert.AreEqual(
"[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer | AssemblyNameFlags.EnableJITcompileTracking)]\r\n", @"using System;
using System.Reflection;
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer | AssemblyNameFlags.EnableJITcompileTracking)]
",
WriteAssemblyInfoFile(assemblyInfo, string.Empty)); WriteAssemblyInfoFile(assemblyInfo, string.Empty));
assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = true }; assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = true };
Assert.AreEqual( Assert.AreEqual(
"[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileTracking)]\r\n", @"using System;
using System.Reflection;
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileTracking)]
",
WriteAssemblyInfoFile(assemblyInfo, string.Empty)); WriteAssemblyInfoFile(assemblyInfo, string.Empty));
assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = false }; assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = false };
Assert.IsEmpty(WriteAssemblyInfoFile(assemblyInfo, string.Empty)); Assert.AreEqual("using System;\r\nusing System.Reflection;\r\n\r\n", WriteAssemblyInfoFile(assemblyInfo, string.Empty));
assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = false }; assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = false };
Assert.AreEqual("[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer)]\r\n", Assert.AreEqual(
@"using System;
using System.Reflection;
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer)]
",
WriteAssemblyInfoFile(assemblyInfo, string.Empty)); WriteAssemblyInfoFile(assemblyInfo, string.Empty));
} }
[TestCase] [TestCase]
public void WriteDefaultAssemblyInfoToEmptyAssemblyInfoFileTest() public void WriteDefaultAssemblyInfoToEmptyAssemblyInfoFileTest()
{ {
var assemblyInfoFile = "using System.Reflection;"; var assemblyInfoFile = "using System;";
var assemblyInfo = new AssemblyInfo { JitOptimization = true }; var assemblyInfo = new AssemblyInfo { JitOptimization = true };
var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile); var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile);
Assert.AreEqual("using System.Reflection;\r\n\r\n", result); Assert.AreEqual("using System;\r\nusing System.Reflection;\r\n\r\n", result);
} }
[TestCase] [TestCase]
@ -399,7 +412,10 @@ using System.Runtime.InteropServices;
var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile); var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile);
Assert.AreEqual( Assert.AreEqual(
@"using System.Reflection; @"using System;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle (""SharpDevelop"")] [assembly: AssemblyTitle (""SharpDevelop"")]
[assembly: AssemblyDescription (""OpenSource IDE"")] [assembly: AssemblyDescription (""OpenSource IDE"")]
@ -415,7 +431,7 @@ using System.Runtime.InteropServices;
[assembly: NeutralResourcesLanguage (""ru-RU"")] [assembly: NeutralResourcesLanguage (""ru-RU"")]
[assembly: ComVisible (true)] [assembly: ComVisible (true)]
[assembly: CLSCompliant (true)] [assembly: CLSCompliant (true)]
[assembly: AssemblyFlags (32769)] [assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileTracking)]
", result); ", result);
} }
@ -449,6 +465,7 @@ using System.Runtime.InteropServices;
Assert.AreEqual( Assert.AreEqual(
@"using System; @"using System;
using System.Reflection; using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
@ -475,7 +492,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyInformationalVersion (""4.3.2.1"")] [assembly: AssemblyInformationalVersion (""4.3.2.1"")]
[assembly: Guid (""dc8c889f-ced2-4167-b155-2d48a99d8c72"")] [assembly: Guid (""dc8c889f-ced2-4167-b155-2d48a99d8c72"")]
[assembly: NeutralResourcesLanguage (""en-US"")] [assembly: NeutralResourcesLanguage (""en-US"")]
[assembly: AssemblyFlags (16385)] [assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer)]
[assembly: CLSCompliant (false)] [assembly: CLSCompliant (false)]
", result); ", result);
} }

Loading…
Cancel
Save