diff --git a/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs b/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs index f77b45d..3ee6612 100644 --- a/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs +++ b/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs @@ -10,18 +10,25 @@ using Microsoft.CSharp; namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool { public class CodeDomCodeGenerator : CodeGenerator, IDisposable - { - private readonly string className; + { private readonly TypeAttributes? classAccessibility; + private readonly VisualStudioVersion visualStudioVersion; + private readonly string className; private readonly CodeNamespace codeNamespace; private readonly CodeCompileUnit compileUnit; private readonly CodeDomProvider provider; - public CodeDomCodeGenerator(IResourceParser resourceParser, string className, string defaultNamespace, CodeDomProvider codeDomProvider = null, TypeAttributes? classAccessibility = null) + public CodeDomCodeGenerator(IResourceParser resourceParser, + string className, + string defaultNamespace, + CodeDomProvider codeDomProvider = null, + TypeAttributes? classAccessibility = null, + VisualStudioVersion visualStudioVersion = VisualStudioVersion.VS2012) : base(resourceParser, defaultNamespace) { this.className = className; this.classAccessibility = classAccessibility; + this.visualStudioVersion = visualStudioVersion; compileUnit = new CodeCompileUnit(); provider = codeDomProvider ?? new CSharpCodeProvider(); codeNamespace = new CodeNamespace(defaultNamespace); @@ -29,7 +36,8 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool public override string GenerateCode() { - codeNamespace.Comments.Add(new CodeCommentStatement("--------------------------------------------------------------------------------------------------")); + codeNamespace.Comments.Add( + new CodeCommentStatement("--------------------------------------------------------------------------------------------------")); codeNamespace.Comments.Add(new CodeCommentStatement("")); codeNamespace.Comments.Add(new CodeCommentStatement("\tThis code was generated by ResW File Code Generator (http://reswcodegen.codeplex.com)")); codeNamespace.Comments.Add(new CodeCommentStatement("\tResW File Code Generator was written by Christian Resma Helle")); @@ -40,76 +48,75 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool codeNamespace.Comments.Add(new CodeCommentStatement(string.Empty)); codeNamespace.Comments.Add(new CodeCommentStatement("\tGenerated: " + DateTime.Now.ToString(CultureInfo.InvariantCulture))); codeNamespace.Comments.Add(new CodeCommentStatement("")); - codeNamespace.Comments.Add(new CodeCommentStatement("--------------------------------------------------------------------------------------------------")); + codeNamespace.Comments.Add( + new CodeCommentStatement("--------------------------------------------------------------------------------------------------")); codeNamespace.Imports.Add(new CodeNamespaceImport("Windows.ApplicationModel.Resources")); var targetClass = new CodeTypeDeclaration(className) - { - IsClass = true, - IsPartial = true, - TypeAttributes = classAccessibility.HasValue ? classAccessibility.Value : TypeAttributes.Public - }; + { + IsClass = true, + IsPartial = true, + TypeAttributes = classAccessibility.HasValue ? classAccessibility.Value : TypeAttributes.Public + }; const string resourceLoaderType = "ResourceLoader"; var resourceLoaderField = new CodeMemberField(resourceLoaderType, "resourceLoader") - { - Attributes = MemberAttributes.Private | MemberAttributes.Static | MemberAttributes.Final - }; + { + Attributes = MemberAttributes.Private | MemberAttributes.Static | MemberAttributes.Final + }; targetClass.Members.Add(resourceLoaderField); var constructor = new CodeTypeConstructor(); - var executingAssemblyVar = new CodeVariableDeclarationStatement(typeof(string), "executingAssemblyName"); - var executingAssemblyInit = new CodeAssignStatement( - new CodeVariableReferenceExpression("executingAssemblyName"), - new CodeSnippetExpression("Windows.UI.Xaml.Application.Current.GetType().AssemblyQualifiedName")); - var executingAssemblySplit = new CodeVariableDeclarationStatement(typeof(string[]), "executingAssemblySplit"); - var executingAssemblyInit2 = new CodeAssignStatement( - new CodeVariableReferenceExpression("executingAssemblySplit"), - new CodeMethodInvokeExpression(new CodeVariableReferenceExpression("executingAssemblyName"), "Split", new CodePrimitiveExpression(','))); - var executingAssemblyInit3 = new CodeAssignStatement( - new CodeVariableReferenceExpression("executingAssemblyName"), - new CodeArrayIndexerExpression(new CodeVariableReferenceExpression("executingAssemblySplit"), new CodePrimitiveExpression(1))); + var executingAssemblyVar = new CodeVariableDeclarationStatement(typeof (string), "executingAssemblyName"); + var executingAssemblyInit = new CodeAssignStatement(new CodeVariableReferenceExpression("executingAssemblyName"), + new CodeSnippetExpression("Windows.UI.Xaml.Application.Current.GetType().AssemblyQualifiedName")); + var executingAssemblySplit = new CodeVariableDeclarationStatement(typeof (string[]), "executingAssemblySplit"); + var executingAssemblyInit2 = new CodeAssignStatement(new CodeVariableReferenceExpression("executingAssemblySplit"), + new CodeMethodInvokeExpression(new CodeVariableReferenceExpression("executingAssemblyName"), + "Split", + new CodePrimitiveExpression(','))); + var executingAssemblyInit3 = new CodeAssignStatement(new CodeVariableReferenceExpression("executingAssemblyName"), + new CodeArrayIndexerExpression(new CodeVariableReferenceExpression("executingAssemblySplit"), + new CodePrimitiveExpression(1))); - var currentAssemblyVar = new CodeVariableDeclarationStatement(typeof(string), "currentAssemblyName"); - var currentAssemblyInit = new CodeAssignStatement( - new CodeVariableReferenceExpression("currentAssemblyName"), - new CodePropertyReferenceExpression(new CodeTypeOfExpression(className), "AssemblyQualifiedName")); - var currentAssemblySplit = new CodeVariableDeclarationStatement(typeof(string[]), "currentAssemblySplit"); - var currentAssemblyInit2 = new CodeAssignStatement( - new CodeVariableReferenceExpression("currentAssemblySplit"), - new CodeMethodInvokeExpression(new CodeVariableReferenceExpression("currentAssemblyName"), "Split", new CodePrimitiveExpression(','))); - var currentAssemblyInit3 = new CodeAssignStatement( - new CodeVariableReferenceExpression("currentAssemblyName"), - new CodeArrayIndexerExpression(new CodeVariableReferenceExpression("currentAssemblySplit"), new CodePrimitiveExpression(1))); - - // TODO: Call GetForCurrentView() instead of the constructor method because the constructor will be depracted after future versions of Windows 8.1 + var currentAssemblyVar = new CodeVariableDeclarationStatement(typeof (string), "currentAssemblyName"); + var currentAssemblyInit = new CodeAssignStatement(new CodeVariableReferenceExpression("currentAssemblyName"), + new CodePropertyReferenceExpression(new CodeTypeOfExpression(className), "AssemblyQualifiedName")); + var currentAssemblySplit = new CodeVariableDeclarationStatement(typeof (string[]), "currentAssemblySplit"); + var currentAssemblyInit2 = new CodeAssignStatement(new CodeVariableReferenceExpression("currentAssemblySplit"), + new CodeMethodInvokeExpression(new CodeVariableReferenceExpression("currentAssemblyName"), + "Split", + new CodePrimitiveExpression(','))); + var currentAssemblyInit3 = new CodeAssignStatement(new CodeVariableReferenceExpression("currentAssemblyName"), + new CodeArrayIndexerExpression(new CodeVariableReferenceExpression("currentAssemblySplit"), + new CodePrimitiveExpression(1))); var createResourceLoader = new CodeConditionStatement( new CodeSnippetExpression("executingAssemblyName.Equals(currentAssemblyName)"), new CodeStatement[] // true - { - new CodeAssignStatement( - new CodeFieldReferenceExpression(null, "resourceLoader"), - new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("ResourceLoader"), "GetForCurrentView", - new CodeSnippetExpression("\"" + className + "\""))) - //new CodeAssignStatement( - // new CodeFieldReferenceExpression(null, "resourceLoader"), - // new CodeObjectCreateExpression(new CodeTypeReference("ResourceLoader"), - // new CodeSnippetExpression("\"" + className + "\""))) - }, + { + visualStudioVersion == VisualStudioVersion.VS2013 + ? new CodeAssignStatement(new CodeFieldReferenceExpression(null, "resourceLoader"), + new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("ResourceLoader"), + "GetForCurrentView", + new CodeSnippetExpression("\"" + className + "\""))) + : new CodeAssignStatement(new CodeFieldReferenceExpression(null, "resourceLoader"), + new CodeObjectCreateExpression(new CodeTypeReference("ResourceLoader"), + new CodeSnippetExpression("\"" + className + "\""))) + }, new CodeStatement[] // false - { - new CodeAssignStatement( - new CodeFieldReferenceExpression(null, "resourceLoader"), - new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("ResourceLoader"), "GetForCurrentView", - new CodeSnippetExpression("currentAssemblyName + \"/" + className + "\""))) - //new CodeAssignStatement( - // new CodeFieldReferenceExpression(null, "resourceLoader"), - // new CodeObjectCreateExpression(new CodeTypeReference("ResourceLoader"), - // new CodeSnippetExpression("currentAssemblyName + \"/" + className + "\""))) - }); + { + visualStudioVersion == VisualStudioVersion.VS2013 + ? new CodeAssignStatement(new CodeFieldReferenceExpression(null, "resourceLoader"), + new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("ResourceLoader"), + "GetForCurrentView", + new CodeSnippetExpression("currentAssemblyName + \"/" + className + "\""))) + : new CodeAssignStatement(new CodeFieldReferenceExpression(null, "resourceLoader"), + new CodeObjectCreateExpression(new CodeTypeReference("ResourceLoader"), + new CodeSnippetExpression("currentAssemblyName + \"/" + className + "\""))) + }); constructor.Statements.Add(executingAssemblyVar); constructor.Statements.Add(executingAssemblyInit); @@ -132,12 +139,12 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool continue; var property = new CodeMemberProperty - { - Name = item.Name.Trim(), - Attributes = MemberAttributes.Public | MemberAttributes.Static, - HasGet = true, - Type = new CodeTypeReference(typeof(string)) - }; + { + Name = item.Name.Trim(), + Attributes = MemberAttributes.Public | MemberAttributes.Static, + HasGet = true, + Type = new CodeTypeReference(typeof (string)) + }; property.Comments.Add(new CodeCommentStatement("", true)); property.Comments.Add(new CodeCommentStatement("Localized resource similar to \"" + (item.Value ?? item.Name) + "\"", true)); @@ -145,7 +152,8 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool property.GetStatements.Add( new CodeMethodReturnStatement( new CodeMethodInvokeExpression( - new CodeFieldReferenceExpression(null, "resourceLoader"), "GetString", + new CodeFieldReferenceExpression(null, "resourceLoader"), + "GetString", new CodePrimitiveExpression(item.Name)))); targetClass.Members.Add(property); @@ -159,7 +167,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool private string GenerateCodeFromCompileUnit() { - var options = new CodeGeneratorOptions { BracingStyle = "C" }; + var options = new CodeGeneratorOptions {BracingStyle = "C"}; var code = new StringBuilder(); @@ -173,16 +181,16 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool private bool disposed; - ~CodeDomCodeGenerator() - { - Dispose(false); - } - public void Dispose() { Dispose(true); } + ~CodeDomCodeGenerator() + { + Dispose(false); + } + protected virtual void Dispose(bool dispose) { if (disposed) diff --git a/RESW File Code Generator/VSPackage/CustomTool/VisualStudioVersion.cs b/RESW File Code Generator/VSPackage/CustomTool/VisualStudioVersion.cs new file mode 100644 index 0000000..983346a --- /dev/null +++ b/RESW File Code Generator/VSPackage/CustomTool/VisualStudioVersion.cs @@ -0,0 +1,8 @@ +namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool +{ + public enum VisualStudioVersion + { + VS2012, + VS2013 + } +} \ No newline at end of file diff --git a/RESW File Code Generator/VSPackage/VSPackage.csproj b/RESW File Code Generator/VSPackage/VSPackage.csproj index 7a7f712..6f18a61 100644 --- a/RESW File Code Generator/VSPackage/VSPackage.csproj +++ b/RESW File Code Generator/VSPackage/VSPackage.csproj @@ -119,6 +119,7 @@ + diff --git a/RESW File Code Generator/VSPackage/VisualStudio2012Package.cs b/RESW File Code Generator/VSPackage/VisualStudio2012Package.cs index 868ee8b..2c2ec94 100644 --- a/RESW File Code Generator/VSPackage/VisualStudio2012Package.cs +++ b/RESW File Code Generator/VSPackage/VisualStudio2012Package.cs @@ -63,7 +63,6 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage { Debug.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString())); base.Initialize(); - } #endregion diff --git a/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs b/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs index c8474a3..5f60cb0 100644 --- a/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs +++ b/RESW File Code Generator/VSPackage/VisualStudio2013Package.cs @@ -63,7 +63,6 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage { Debug.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString())); base.Initialize(); - } #endregion