diff --git a/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs b/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs index 8c3764b..ba2a5f4 100644 --- a/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs +++ b/RESW File Code Generator/VSPackage/CustomTool/CodeDomCodeGenerator.cs @@ -11,14 +11,16 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool public class CodeDomCodeGenerator : CodeGenerator, IDisposable { private readonly string className; + private readonly MemberAttributes? classAccessibility; private readonly CodeNamespace codeNamespace; private readonly CodeCompileUnit compileUnit; private readonly CodeDomProvider provider; - public CodeDomCodeGenerator(IResourceParser resourceParser, string className, string defaultNamespace, CodeDomProvider codeDomProvider = null) + public CodeDomCodeGenerator(IResourceParser resourceParser, string className, string defaultNamespace, CodeDomProvider codeDomProvider = null, MemberAttributes? classAccessibility = null) : base(resourceParser, defaultNamespace) { this.className = className; + this.classAccessibility = classAccessibility; compileUnit = new CodeCompileUnit(); provider = codeDomProvider ?? new CSharpCodeProvider(); codeNamespace = new CodeNamespace(defaultNamespace); @@ -45,7 +47,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool { IsClass = true, IsPartial = true, - Attributes = MemberAttributes.Public | MemberAttributes.Static + Attributes = (classAccessibility.HasValue ? classAccessibility.Value : MemberAttributes.Public) | MemberAttributes.Static }; const string resourceLoaderType = "ResourceLoader"; diff --git a/RESW File Code Generator/VSPackage/CustomTool/CodeGeneratorFactory.cs b/RESW File Code Generator/VSPackage/CustomTool/CodeGeneratorFactory.cs index b1c494b..0a849b1 100644 --- a/RESW File Code Generator/VSPackage/CustomTool/CodeGeneratorFactory.cs +++ b/RESW File Code Generator/VSPackage/CustomTool/CodeGeneratorFactory.cs @@ -1,12 +1,13 @@ -using System.CodeDom.Compiler; +using System.CodeDom; +using System.CodeDom.Compiler; namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool { public class CodeGeneratorFactory { - public ICodeGenerator Create(string className, string defaultNamespace, string inputFileContents, CodeDomProvider codeDomProvider = null) + public ICodeGenerator Create(string className, string defaultNamespace, string inputFileContents, CodeDomProvider codeDomProvider = null, MemberAttributes? classAccessibility = null) { - return new CodeDomCodeGenerator(new ResourceParser(inputFileContents), className, defaultNamespace, codeDomProvider); + return new CodeDomCodeGenerator(new ResourceParser(inputFileContents), className, defaultNamespace, codeDomProvider, classAccessibility); } } } diff --git a/RESW File Code Generator/VSPackage/CustomTool/ReswFileCSharpCodeGeneratorInternal.cs b/RESW File Code Generator/VSPackage/CustomTool/ReswFileCSharpCodeGeneratorInternal.cs new file mode 100644 index 0000000..728ba2f --- /dev/null +++ b/RESW File Code Generator/VSPackage/CustomTool/ReswFileCSharpCodeGeneratorInternal.cs @@ -0,0 +1,22 @@ +using System.CodeDom; +using System.Runtime.InteropServices; +using Microsoft.CSharp; + +namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool +{ + [Guid("151F74CA-404D-4188-B994-D7683C32ACF4")] + [ComVisible(true)] + public class ReswFileCSharpCodeGeneratorInternal : ReswFileCodeGenerator + { + public ReswFileCSharpCodeGeneratorInternal() + : base(new CSharpCodeProvider(), MemberAttributes.Assembly) + { + } + + public override int DefaultExtension(out string pbstrDefaultExtension) + { + pbstrDefaultExtension = ".cs"; + return 0; + } + } +} \ No newline at end of file diff --git a/RESW File Code Generator/VSPackage/CustomTool/ReswFileCodeGenerator.cs b/RESW File Code Generator/VSPackage/CustomTool/ReswFileCodeGenerator.cs index 5f31f1d..b1a7e8c 100644 --- a/RESW File Code Generator/VSPackage/CustomTool/ReswFileCodeGenerator.cs +++ b/RESW File Code Generator/VSPackage/CustomTool/ReswFileCodeGenerator.cs @@ -1,4 +1,5 @@ using System; +using System.CodeDom; using System.CodeDom.Compiler; using System.Runtime.InteropServices; using System.Text; @@ -11,10 +12,12 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool public abstract class ReswFileCodeGenerator : IVsSingleFileGenerator { private readonly CodeDomProvider codeDomProvider; + private readonly MemberAttributes? classAccessibility; - protected ReswFileCodeGenerator(CodeDomProvider codeDomProvider) + protected ReswFileCodeGenerator(CodeDomProvider codeDomProvider, MemberAttributes? classAccessibility = null) { this.codeDomProvider = codeDomProvider; + this.classAccessibility = classAccessibility; } #region IVsSingleFileGenerator Members @@ -32,7 +35,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool { var className = ClassNameExtractor.GetClassName(wszInputFilePath); var factory = new CodeGeneratorFactory(); - var codeGenerator = factory.Create(className, wszDefaultNamespace, bstrInputFileContents, codeDomProvider); + var codeGenerator = factory.Create(className, wszDefaultNamespace, bstrInputFileContents, codeDomProvider, classAccessibility); var code = codeGenerator.GenerateCode(); rgbOutputFileContents[0] = code.ConvertToIntPtr(out pcbOutput); diff --git a/RESW File Code Generator/VSPackage/CustomTool/ReswFileVisualBasicCodeGeneratorInternal.cs b/RESW File Code Generator/VSPackage/CustomTool/ReswFileVisualBasicCodeGeneratorInternal.cs new file mode 100644 index 0000000..d296f6a --- /dev/null +++ b/RESW File Code Generator/VSPackage/CustomTool/ReswFileVisualBasicCodeGeneratorInternal.cs @@ -0,0 +1,22 @@ +using System.CodeDom; +using System.Runtime.InteropServices; +using Microsoft.VisualBasic; + +namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool +{ + [Guid("6C6AC14F-9B11-47C1-BC90-DFBFB89B1CB8")] + [ComVisible(true)] + public class ReswFileVisualBasicCodeGeneratorInternal : ReswFileCodeGenerator + { + public ReswFileVisualBasicCodeGeneratorInternal() + : base(new VBCodeProvider(), MemberAttributes.Assembly) + { + } + + public override int DefaultExtension(out string pbstrDefaultExtension) + { + pbstrDefaultExtension = ".vb"; + return 0; + } + } +} \ 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 b210b53..a03bc30 100644 --- a/RESW File Code Generator/VSPackage/VSPackage.csproj +++ b/RESW File Code Generator/VSPackage/VSPackage.csproj @@ -129,7 +129,9 @@ + + diff --git a/RESW File Code Generator/VSPackage/VSPackagePackage.cs b/RESW File Code Generator/VSPackage/VSPackagePackage.cs index 18a72be..3b3c08a 100644 --- a/RESW File Code Generator/VSPackage/VSPackagePackage.cs +++ b/RESW File Code Generator/VSPackage/VSPackagePackage.cs @@ -29,6 +29,8 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage [ProvideObject(typeof(ReswFileVisualBasicCodeGenerator))] [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGenerator), "ReswFileCodeGenerator", "ResW File Code Generator for C#", "{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}", true)] // csharp [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGenerator), "ReswFileCodeGenerator", "ResW File Code Generator for VB", "{164B10B9-B200-11D0-8C61-00A0C91E29D5}", true)] // visual basic + [ProvideGeneratorAttribute(typeof(ReswFileCSharpCodeGeneratorInternal), "ReswFileCodeGeneratorInternal", "ResW File Code Generator for C#", "{151F74CA-404D-4188-B994-D7683C32ACF4}", true)] // csharp + [ProvideGeneratorAttribute(typeof(ReswFileVisualBasicCodeGeneratorInternal), "ReswFileCodeGeneratorInternal", "ResW File Code Generator for VB", "{6C6AC14F-9B11-47C1-BC90-DFBFB89B1CB8}", true)] // visual basic public sealed class VSPackagePackage : Package { ///