Browse Source

Add namespace restore while saving assembly info

pull/624/head
olegbevz 11 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 @@ @@ -18,16 +18,15 @@
#region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
using System.Reflection;
using System.Resources;
[assembly: AssemblyTitle("Profiler.AddIn")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
@ -51,3 +50,6 @@ using System.Windows; @@ -51,3 +50,6 @@ using System.Windows;
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[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; @@ -22,6 +22,7 @@ using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using Attribute = ICSharpCode.NRefactory.CSharp.Attribute;
using CSharpParser = ICSharpCode.NRefactory.CSharp.CSharpParser;
@ -55,6 +56,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -55,6 +56,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
#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)
{
using (var fileStream = new FileStream(assemblyInfoFileName, FileMode.Open, FileAccess.Read))
@ -63,6 +69,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -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)
{
var syntaxTree = ReadSyntaxTree(stream);
@ -152,6 +163,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -152,6 +163,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
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)
{
var content = string.Empty;
@ -165,6 +181,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -165,6 +181,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
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)
{
var syntaxTree = ReadSyntaxTree(inputStream);
@ -172,6 +194,15 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -172,6 +194,15 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
if (syntaxTree == null)
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, AssemblyDescription, assemblyInfo.Description);
SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, AssemblyCompany, assemblyInfo.Company);
@ -356,5 +387,26 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -356,5 +387,26 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
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; @@ -345,30 +345,43 @@ using System.Runtime.InteropServices;
{
var assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = true };
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));
assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = true };
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));
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 };
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));
}
[TestCase]
public void WriteDefaultAssemblyInfoToEmptyAssemblyInfoFileTest()
{
var assemblyInfoFile = "using System.Reflection;";
var assemblyInfoFile = "using System;";
var assemblyInfo = new AssemblyInfo { JitOptimization = true };
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]
@ -399,7 +412,10 @@ using System.Runtime.InteropServices; @@ -399,7 +412,10 @@ using System.Runtime.InteropServices;
var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile);
Assert.AreEqual(
@"using System.Reflection;
@"using System;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle (""SharpDevelop"")]
[assembly: AssemblyDescription (""OpenSource IDE"")]
@ -415,7 +431,7 @@ using System.Runtime.InteropServices; @@ -415,7 +431,7 @@ using System.Runtime.InteropServices;
[assembly: NeutralResourcesLanguage (""ru-RU"")]
[assembly: ComVisible (true)]
[assembly: CLSCompliant (true)]
[assembly: AssemblyFlags (32769)]
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileTracking)]
", result);
}
@ -449,6 +465,7 @@ using System.Runtime.InteropServices; @@ -449,6 +465,7 @@ using System.Runtime.InteropServices;
Assert.AreEqual(
@"using System;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
@ -475,7 +492,7 @@ using System.Runtime.InteropServices; @@ -475,7 +492,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyInformationalVersion (""4.3.2.1"")]
[assembly: Guid (""dc8c889f-ced2-4167-b155-2d48a99d8c72"")]
[assembly: NeutralResourcesLanguage (""en-US"")]
[assembly: AssemblyFlags (16385)]
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer)]
[assembly: CLSCompliant (false)]
", result);
}

Loading…
Cancel
Save