2 // System.CodeDom.Compiler.CodeDomProvider.cs
5 // Daniel Stodden (stodden@in.tum.de)
6 // Marek Safar (marek.safar@seznam.cz)
7 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
8 // Sebastien Pouliot <sebastien@ximian.com>
10 // Copyright (C) 2002,2003,2004,2005 Novell, Inc (http://www.novell.com)
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Collections;
33 using System.Collections.Generic;
34 using System.ComponentModel;
35 using System.Configuration;
37 using System.Runtime.InteropServices;
38 using System.Security.Permissions;
40 #pragma warning disable 618
42 namespace System.CodeDom.Compiler {
46 public abstract class CodeDomProvider : Component
51 protected CodeDomProvider()
58 public virtual string FileExtension {
64 public virtual LanguageOptions LanguageOptions {
66 return LanguageOptions.None;
73 [Obsolete ("ICodeCompiler is obsolete")]
74 public abstract ICodeCompiler CreateCompiler();
76 [Obsolete ("ICodeGenerator is obsolete")]
77 public abstract ICodeGenerator CreateGenerator();
79 public virtual ICodeGenerator CreateGenerator (string fileName)
81 return CreateGenerator();
84 public virtual ICodeGenerator CreateGenerator (TextWriter output)
86 return CreateGenerator();
89 [Obsolete ("ICodeParser is obsolete")]
90 public virtual ICodeParser CreateParser()
95 public virtual TypeConverter GetConverter (Type type)
97 return TypeDescriptor.GetConverter (type);
100 public virtual CompilerResults CompileAssemblyFromDom (CompilerParameters options, params CodeCompileUnit[] compilationUnits)
102 ICodeCompiler cc = CreateCompiler ();
104 throw GetNotImplemented ();
105 return cc.CompileAssemblyFromDomBatch (options, compilationUnits);
108 public virtual CompilerResults CompileAssemblyFromFile (CompilerParameters options, params string[] fileNames)
110 ICodeCompiler cc = CreateCompiler ();
112 throw GetNotImplemented ();
113 return cc.CompileAssemblyFromFileBatch (options, fileNames);
116 public virtual CompilerResults CompileAssemblyFromSource (CompilerParameters options, params string[] sources)
118 ICodeCompiler cc = CreateCompiler ();
120 throw GetNotImplemented ();
121 return cc.CompileAssemblyFromSourceBatch (options, sources);
124 public virtual string CreateEscapedIdentifier (string value)
126 ICodeGenerator cg = CreateGenerator ();
128 throw GetNotImplemented ();
129 return cg.CreateEscapedIdentifier (value);
132 #if CONFIGURATION_DEP
134 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
135 public static CodeDomProvider CreateProvider (string language)
137 CompilerInfo ci = GetCompilerInfo (language);
138 return (ci == null) ? null : ci.CreateProvider ();
141 public static CodeDomProvider CreateProvider (string language, IDictionary<string, string> providerOptions)
143 CompilerInfo ci = GetCompilerInfo (language);
144 return ci == null ? null : ci.CreateProvider (providerOptions);
148 public virtual string CreateValidIdentifier (string value)
150 ICodeGenerator cg = CreateGenerator ();
152 throw GetNotImplemented ();
153 return cg.CreateValidIdentifier (value);
156 public virtual void GenerateCodeFromCompileUnit (CodeCompileUnit compileUnit,
157 TextWriter writer, CodeGeneratorOptions options)
159 ICodeGenerator cg = CreateGenerator ();
161 throw GetNotImplemented ();
162 cg.GenerateCodeFromCompileUnit (compileUnit, writer, options);
165 public virtual void GenerateCodeFromExpression (CodeExpression expression, TextWriter writer, CodeGeneratorOptions options)
167 ICodeGenerator cg = CreateGenerator ();
169 throw GetNotImplemented ();
170 cg.GenerateCodeFromExpression (expression, writer, options);
173 public virtual void GenerateCodeFromMember (CodeTypeMember member, TextWriter writer, CodeGeneratorOptions options)
175 // Documented to always throw an exception (if not overriden)
176 throw GetNotImplemented ();
177 // Note: the pattern is different from other GenerateCodeFrom* because
178 // ICodeGenerator doesn't have a GenerateCodeFromMember member
181 public virtual void GenerateCodeFromNamespace (CodeNamespace codeNamespace, TextWriter writer, CodeGeneratorOptions options)
183 ICodeGenerator cg = CreateGenerator ();
185 throw GetNotImplemented ();
186 cg.GenerateCodeFromNamespace (codeNamespace, writer, options);
189 public virtual void GenerateCodeFromStatement (CodeStatement statement, TextWriter writer, CodeGeneratorOptions options)
191 ICodeGenerator cg = CreateGenerator ();
193 throw GetNotImplemented ();
194 cg.GenerateCodeFromStatement (statement, writer, options);
197 public virtual void GenerateCodeFromType (CodeTypeDeclaration codeType, TextWriter writer, CodeGeneratorOptions options)
199 ICodeGenerator cg = CreateGenerator ();
201 throw GetNotImplemented ();
202 cg.GenerateCodeFromType (codeType, writer, options);
205 #if CONFIGURATION_DEP
207 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
208 public static CompilerInfo[] GetAllCompilerInfo ()
211 return (Config == null) ? null : Config.CompilerInfos;
216 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
217 public static CompilerInfo GetCompilerInfo (string language)
219 if (language == null)
220 throw new ArgumentNullException ("language");
223 CompilerCollection cc = Config.Compilers;
228 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
229 public static string GetLanguageFromExtension (string extension)
231 if (extension == null)
232 throw new ArgumentNullException ("extension");
235 return Config.Compilers.GetLanguageFromExtension (extension);
239 public static CompilerInfo[] GetAllCompilerInfo () { return null; }
240 public static CompilerInfo GetCompilerInfo (string language) { return null; }
241 public static string GetLanguageFromExtension (string extension) { return null; }
244 public virtual string GetTypeOutput (CodeTypeReference type)
246 ICodeGenerator cg = CreateGenerator ();
248 throw GetNotImplemented ();
249 return cg.GetTypeOutput (type);
252 #if CONFIGURATION_DEP
254 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
255 public static bool IsDefinedExtension (string extension)
257 if (extension == null)
258 throw new ArgumentNullException ("extension");
261 return (Config.Compilers.GetCompilerInfoForExtension (extension) != null);
267 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
268 public static bool IsDefinedLanguage (string language)
270 if (language == null)
271 throw new ArgumentNullException ("language");
274 return (Config.Compilers.GetCompilerInfoForLanguage (language) != null);
280 public virtual bool IsValidIdentifier (string value)
282 ICodeGenerator cg = CreateGenerator ();
284 throw GetNotImplemented ();
285 return cg.IsValidIdentifier (value);
288 public virtual CodeCompileUnit Parse (TextReader codeStream)
290 ICodeParser cp = CreateParser ();
292 throw GetNotImplemented ();
293 return cp.Parse (codeStream);
296 public virtual bool Supports (GeneratorSupport supports)
298 ICodeGenerator cg = CreateGenerator ();
300 throw GetNotImplemented ();
301 return cg.Supports (supports);
304 #if CONFIGURATION_DEP
305 static CodeDomConfigurationHandler Config {
306 get { return ConfigurationManager.GetSection ("system.codedom") as CodeDomConfigurationHandler; }
311 // This is used to prevent confusing Moma about methods not implemented.
313 Exception GetNotImplemented ()
315 return new NotImplementedException ();
320 #pragma warning restore 618