Files
reswcodegen/RESW File Code Generator/VSPackage/CustomTool/ReswFileCodeGenerator.cs
T

54 lines
2.0 KiB
C#
Raw Normal View History

using System;
2013-08-14 09:22:30 +02:00
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualStudio.Shell.Interop;
namespace ChristianHelle.DeveloperTools.CodeGenerators.Resw.VSPackage.CustomTool
{
[ComVisible(true)]
public abstract class ReswFileCodeGenerator : IVsSingleFileGenerator
{
private readonly CodeDomProvider codeDomProvider;
2013-08-14 09:22:30 +02:00
private readonly MemberAttributes? classAccessibility;
2013-08-14 09:22:30 +02:00
protected ReswFileCodeGenerator(CodeDomProvider codeDomProvider, MemberAttributes? classAccessibility = null)
{
this.codeDomProvider = codeDomProvider;
2013-08-14 09:22:30 +02:00
this.classAccessibility = classAccessibility;
}
#region IVsSingleFileGenerator Members
public abstract int DefaultExtension(out string pbstrDefaultExtension);
public virtual int Generate(string wszInputFilePath,
string bstrInputFileContents,
string wszDefaultNamespace,
IntPtr[] rgbOutputFileContents,
out uint pcbOutput,
IVsGeneratorProgress pGenerateProgress)
{
try
{
var className = ClassNameExtractor.GetClassName(wszInputFilePath);
var factory = new CodeGeneratorFactory();
2013-08-14 09:22:30 +02:00
var codeGenerator = factory.Create(className, wszDefaultNamespace, bstrInputFileContents, codeDomProvider, classAccessibility);
var code = codeGenerator.GenerateCode();
2013-05-28 00:12:08 +02:00
rgbOutputFileContents[0] = code.ConvertToIntPtr(out pcbOutput);
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Unable to generate code");
throw;
}
return 0;
}
#endregion
}
}