using System; using dnlib.DotNet; namespace Confuser.Core.Project.Patterns { /// /// A function that indicate the visibility of members. /// public class IsPublicFunction : PatternFunction { internal const string FnName = "is-public"; /// public override string Name { get { return FnName; } } /// public override int ArgumentCount { get { return 0; } } /// public override object Evaluate(IDnlibDef definition) { var member = definition as IMemberDef; if (member == null) return false; var declType = ((IMemberDef)definition).DeclaringType; while (declType != null) { if (!declType.IsPublic) return false; declType = declType.DeclaringType; } if (member is MethodDef) return ((MethodDef)member).IsPublic; if (member is FieldDef) return ((FieldDef)member).IsPublic; if (member is PropertyDef) return ((PropertyDef)member).IsPublic(); if (member is EventDef) return ((EventDef)member).IsPublic(); if (member is TypeDef) return ((TypeDef)member).IsPublic || ((TypeDef)member).IsNestedPublic; throw new NotSupportedException(); } } }