started wokring on internal code generator

This commit is contained in:
Christian Resma Helle
2013-08-14 09:22:30 +02:00
parent 95b0946d81
commit 1b8d6f04e9
7 changed files with 61 additions and 7 deletions
@@ -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";
@@ -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);
}
}
}
@@ -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;
}
}
}
@@ -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);
@@ -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;
}
}
}
@@ -129,7 +129,9 @@
<Compile Include="CustomTool\ResourceParser.cs" />
<Compile Include="CustomTool\ReswFileCodeGenerator.cs" />
<Compile Include="CustomTool\ReswFileCSharpCodeGenerator.cs" />
<Compile Include="CustomTool\ReswFileCSharpCodeGeneratorInternal.cs" />
<Compile Include="CustomTool\ReswFileVisualBasicCodeGenerator.cs" />
<Compile Include="CustomTool\ReswFileVisualBasicCodeGeneratorInternal.cs" />
<Compile Include="CustomTool\StringExtension.cs" />
<Compile Include="Guids.cs" />
<Compile Include="Resources.Designer.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
{
/// <summary>