// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; namespace ICSharpCode.SharpDevelop.Dom { [Flags] public enum ConversionFlags { /// /// Convert only the name. /// None = 0, /// /// Show the parameter list /// ShowParameterList = 1, /// /// Show names for parameters /// ShowParameterNames = 2, /// /// Show the accessibility (private, public, etc.) /// ShowAccessibility = 4, /// /// Show the definition key word (class, struct, Sub, Function, etc.) /// ShowDefinitionKeyWord = 8, /// /// Show the fully qualified name for the member /// UseFullyQualifiedMemberNames = 0x10, /// /// Show modifiers (virtual, override, etc.) /// ShowModifiers = 0x20, /// /// Show the inheritance declaration /// ShowInheritanceList = 0x40, IncludeHtmlMarkup = 0x80, /// /// Show the return type /// ShowReturnType = 0x100, /// /// Use fully qualified names for return type and parameters. /// UseFullyQualifiedTypeNames = 0x200, /// /// Include opening brace (or equivalent) for methods or classes; /// or semicolon (or equivalent) for field, events. /// For properties, a block indicating if there is a getter/setter is included. /// IncludeBody = 0x400, /// /// Show the list of type parameters on method and class declarations. /// Type arguments for parameter/return types are always shown. /// ShowTypeParameterList = 0x800, StandardConversionFlags = ShowParameterNames | ShowAccessibility | ShowParameterList | ShowReturnType | ShowModifiers | ShowTypeParameterList | ShowDefinitionKeyWord, All = 0xfff, } public interface IAmbience { ConversionFlags ConversionFlags { get; set; } string Convert(IClass c); string ConvertEnd(IClass c); string Convert(IEntity e); string Convert(IField field); string Convert(IProperty property); string Convert(IEvent e); string Convert(IMethod m); string ConvertEnd(IMethod m); string Convert(IParameter param); string Convert(IReturnType returnType); string ConvertAccessibility(ModifierEnum accessibility); string WrapAttribute(string attribute); string WrapComment(string comment); string GetIntrinsicTypeName(string dotNetTypeName); } public abstract class AbstractAmbience : IAmbience { #if DEBUG int ownerThread = System.Threading.Thread.CurrentThread.ManagedThreadId; #endif [System.Diagnostics.Conditional("DEBUG")] protected void CheckThread() { #if DEBUG if (ownerThread != System.Threading.Thread.CurrentThread.ManagedThreadId) throw new InvalidOperationException("Ambience may only be used by the thread that created it"); #endif } ConversionFlags conversionFlags = ConversionFlags.StandardConversionFlags; public ConversionFlags ConversionFlags { get { return conversionFlags; } set { CheckThread(); conversionFlags = value; } } public bool ShowReturnType { get { return (conversionFlags & ConversionFlags.ShowReturnType) == ConversionFlags.ShowReturnType; } } public bool ShowAccessibility { get { return (conversionFlags & ConversionFlags.ShowAccessibility) == ConversionFlags.ShowAccessibility; } } public bool ShowParameterNames { get { return (conversionFlags & ConversionFlags.ShowParameterNames) == ConversionFlags.ShowParameterNames; } } public bool UseFullyQualifiedTypeNames { get { return (conversionFlags & ConversionFlags.UseFullyQualifiedTypeNames) == ConversionFlags.UseFullyQualifiedTypeNames; } } public bool ShowDefinitionKeyWord { get { return (conversionFlags & ConversionFlags.ShowDefinitionKeyWord) == ConversionFlags.ShowDefinitionKeyWord; } } public bool ShowParameterList { get { return (conversionFlags & ConversionFlags.ShowParameterList) == ConversionFlags.ShowParameterList; } } public bool ShowModifiers { get { return (conversionFlags & ConversionFlags.ShowModifiers) == ConversionFlags.ShowModifiers; } } public bool ShowInheritanceList { get { return (conversionFlags & ConversionFlags.ShowInheritanceList) == ConversionFlags.ShowInheritanceList; } } public bool IncludeHtmlMarkup { get { return (conversionFlags & ConversionFlags.IncludeHtmlMarkup) == ConversionFlags.IncludeHtmlMarkup; } } public bool UseFullyQualifiedMemberNames { get { return (conversionFlags & ConversionFlags.UseFullyQualifiedMemberNames) == ConversionFlags.UseFullyQualifiedMemberNames; } } public bool IncludeBody { get { return (conversionFlags & ConversionFlags.IncludeBody) == ConversionFlags.IncludeBody; } } public bool ShowTypeParameterList { get { return (conversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList; } } public abstract string Convert(IClass c); public abstract string ConvertEnd(IClass c); public abstract string Convert(IField c); public abstract string Convert(IProperty property); public abstract string Convert(IEvent e); public abstract string Convert(IMethod m); public abstract string ConvertEnd(IMethod m); public abstract string Convert(IParameter param); public abstract string Convert(IReturnType returnType); public virtual string Convert(IEntity entity) { if (entity == null) throw new ArgumentNullException("entity"); IClass c = entity as IClass; if (c != null) return Convert(c); IMethod m = entity as IMethod; if (m != null) return Convert(m); IField f = entity as IField; if (f != null) return Convert(f); IProperty p = entity as IProperty; if (p != null) return Convert(p); IEvent e = entity as IEvent; if (e != null) return Convert(e); return entity.ToString(); } public abstract string WrapAttribute(string attribute); public abstract string WrapComment(string comment); public abstract string GetIntrinsicTypeName(string dotNetTypeName); public abstract string ConvertAccessibility(ModifierEnum accessibility); } }