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();
}
}
}