Implemented using the filename of the specified .resw file as the generated class name
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
using System.IO;
|
||||
|
||||
namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
|
||||
{
|
||||
public static class ClassNameExtractor
|
||||
{
|
||||
public static string GetClassName(string wszInputFilePath)
|
||||
{
|
||||
if (!File.Exists(wszInputFilePath))
|
||||
throw new FileNotFoundException();
|
||||
|
||||
var fileInfo = new FileInfo(wszInputFilePath);
|
||||
return fileInfo.Name.Replace(fileInfo.Extension, string.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,13 +10,15 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
|
||||
{
|
||||
public class CodeDomCodeGenerator : CodeGenerator
|
||||
{
|
||||
private readonly string className;
|
||||
private readonly CodeNamespace codeNamespace;
|
||||
private readonly CodeCompileUnit compileUnit;
|
||||
private readonly CodeDomProvider provider;
|
||||
|
||||
public CodeDomCodeGenerator(IResourceParser resourceParser, string defaultNamespace, CodeDomProvider codeDomProvider = null)
|
||||
public CodeDomCodeGenerator(IResourceParser resourceParser, string className, string defaultNamespace, CodeDomProvider codeDomProvider = null)
|
||||
: base(resourceParser, defaultNamespace)
|
||||
{
|
||||
this.className = className;
|
||||
compileUnit = new CodeCompileUnit();
|
||||
provider = codeDomProvider ?? new CSharpCodeProvider();
|
||||
codeNamespace = new CodeNamespace(defaultNamespace);
|
||||
@@ -39,7 +41,7 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
|
||||
|
||||
codeNamespace.Imports.Add(new CodeNamespaceImport("Windows.ApplicationModel.Resources"));
|
||||
|
||||
var targetClass = new CodeTypeDeclaration("Resources")
|
||||
var targetClass = new CodeTypeDeclaration(className)
|
||||
{
|
||||
IsClass = true,
|
||||
IsPartial = true,
|
||||
|
||||
@@ -4,9 +4,9 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
|
||||
{
|
||||
public class CodeGeneratorFactory
|
||||
{
|
||||
public ICodeGenerator Create(string defaultNamespace, string inputFileContents, CodeDomProvider codeDomProvider = null)
|
||||
public ICodeGenerator Create(string className, string defaultNamespace, string inputFileContents, CodeDomProvider codeDomProvider = null)
|
||||
{
|
||||
return new CodeDomCodeGenerator(new ResourceParser(inputFileContents), defaultNamespace, codeDomProvider);
|
||||
return new CodeDomCodeGenerator(new ResourceParser(inputFileContents), className, defaultNamespace, codeDomProvider);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.Shell.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<EmbedInteropTypes>False</EmbedInteropTypes>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration.Install" />
|
||||
@@ -52,6 +53,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ClassNameExtractor.cs" />
|
||||
<Compile Include="CodeDomCodeGenerator.cs" />
|
||||
<Compile Include="CodeGenerator.cs" />
|
||||
<Compile Include="CodeGeneratorFactory.cs" />
|
||||
|
||||
@@ -21,16 +21,17 @@ namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.CustomTool
|
||||
public abstract int DefaultExtension(out string pbstrDefaultExtension);
|
||||
|
||||
public virtual int Generate(string wszInputFilePath,
|
||||
string bstrInputFileContents,
|
||||
string wszDefaultNamespace,
|
||||
IntPtr[] rgbOutputFileContents,
|
||||
out uint pcbOutput,
|
||||
IVsGeneratorProgress pGenerateProgress)
|
||||
string bstrInputFileContents,
|
||||
string wszDefaultNamespace,
|
||||
IntPtr[] rgbOutputFileContents,
|
||||
out uint pcbOutput,
|
||||
IVsGeneratorProgress pGenerateProgress)
|
||||
{
|
||||
try
|
||||
{
|
||||
var className = ClassNameExtractor.GetClassName(wszInputFilePath);
|
||||
var factory = new CodeGeneratorFactory();
|
||||
var codeGenerator = factory.Create(wszDefaultNamespace, bstrInputFileContents, codeDomProvider);
|
||||
var codeGenerator = factory.Create(className, wszDefaultNamespace, bstrInputFileContents, codeDomProvider);
|
||||
var code = codeGenerator.GenerateCode();
|
||||
|
||||
var data = Encoding.UTF8.GetBytes(code);
|
||||
|
||||
Reference in New Issue
Block a user