15 using System.CodeDom.Compiler;
16 using System.Diagnostics;
17 using System.Runtime.InteropServices;
21 using VSOLE = Microsoft.VisualStudio.OLE.Interop;
22 using Microsoft.VisualStudio;
23 using Microsoft.VisualStudio.Shell;
24 using Microsoft.VisualStudio.Shell.Interop;
25 using Microsoft.VisualStudio.Designer.Interfaces;
27 namespace SiliconStudio.Paradox.VisualStudio.CodeGenerator
34 private object site = null;
35 private CodeDomProvider codeDomProvider = null;
36 private ServiceProvider serviceProvider = null;
37 private ServiceProvider globalProvider = null;
39 #region IObjectWithSite Members
46 void Microsoft.VisualStudio.OLE.Interop.IObjectWithSite.GetSite(ref Guid riid, out IntPtr ppvSite)
50 throw new COMException(
"object is not sited", VSConstants.E_FAIL);
53 IntPtr pUnknownPointer = Marshal.GetIUnknownForObject(site);
54 IntPtr intPointer = IntPtr.Zero;
55 Marshal.QueryInterface(pUnknownPointer, ref riid, out intPointer);
57 if (intPointer == IntPtr.Zero)
59 throw new COMException(
"site does not support requested interface", VSConstants.E_NOINTERFACE);
69 void Microsoft.VisualStudio.OLE.Interop.IObjectWithSite.SetSite(
object pUnkSite)
72 codeDomProvider = null;
73 serviceProvider = null;
81 protected ServiceProvider SiteServiceProvider
85 if (serviceProvider == null)
87 serviceProvider =
new ServiceProvider(site as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
88 Debug.Assert(serviceProvider != null,
"Unable to get ServiceProvider from site object.");
90 return serviceProvider;
94 protected ServiceProvider GlobalServiceProvider
98 if (globalProvider == null)
100 var siteServiceProvider = this.SiteServiceProvider;
101 if (siteServiceProvider != null)
103 var service = siteServiceProvider.GetService(typeof(IVsHierarchy)) as IVsHierarchy;
106 VSOLE.IServiceProvider oleServiceProvider;
107 ErrorHandler.ThrowOnFailure(service.GetSite(out oleServiceProvider));
108 if (oleServiceProvider != null)
109 this.globalProvider =
new ServiceProvider(oleServiceProvider);
113 return this.globalProvider;
124 return SiteServiceProvider.GetService(serviceGuid);
134 return SiteServiceProvider.GetService(serviceType);
144 if (codeDomProvider == null)
147 IVSMDCodeDomProvider provider = GetService(typeof(SVSMDCodeDomProvider)) as IVSMDCodeDomProvider;
148 if (provider != null)
150 codeDomProvider = provider.CodeDomProvider as CodeDomProvider;
155 codeDomProvider = CodeDomProvider.CreateProvider(
"C#");
158 return codeDomProvider;
167 CodeDomProvider codeDom = GetCodeProvider();
168 Debug.Assert(codeDom != null,
"CodeDomProvider is NULL.");
169 string extension = codeDom.FileExtension;
170 if (extension != null && extension.Length > 0)
172 extension =
"." + extension.TrimStart(
".".ToCharArray());
185 Debug.Assert(p != null,
"Unable to get Project Item.");
198 return GetProjectItem().ContainingProject;
208 return (VSProjectItem)GetProjectItem().Object;
221 return (VSProject)GetProject().Object;
object GetService(Guid serviceGuid)
Method to get a service by its GUID
Base code generator with site implementation
ProjectItem GetProjectItem()
Returns the EnvDTE.ProjectItem object that corresponds to the project item the code generator was cal...
Project GetProject()
Returns the EnvDTE.Project object of the project containing the project item the code generator was c...
VSProject GetVSProject()
Returns the VSLangProj.VSProject object of the project containing the project item the code generator...
object GetService(Type serviceType)
Method to get a service by its Type
EnvDTE.ProjectItem ProjectItem
A managed wrapper for VS's concept of an IVsSingleFileGenerator which is a custom tool invoked at des...
VSProjectItem GetVSProjectItem()
Returns the VSLangProj.VSProjectItem object that corresponds to the project item the code generator w...
override string GetDefaultExtension()
Gets the default extension of the output file from the CodeDomProvider
virtual CodeDomProvider GetCodeProvider()
Returns a CodeDomProvider object for the language of the project containing the project item the gene...
Microsoft.VisualStudio.OLE.Interop VSOLE