public Field[] getFields(AccessLevel accessLevel, AccessLevelRule rule)
        {
            List <Field> output = new List <Field>();

            if (parent != null)
            {
                output.AddRange(parent.getFields(accessLevel, rule));
            }
            foreach (Field fieldsValue in fields.Values)
            {
                if (AccessLevelMethods.canAccess(accessLevel, fieldsValue.modifiers.accessLevel))
                {
                    output.Append(fieldsValue);
                }
            }

            return(output.ToArray());
        }
 public List <FunctionCall> getAvailableCalls(AccessLevel level)
 {
     return(new List <FunctionCall>(
                from f in bodies where AccessLevelMethods.canAccess(level, f.modifiers.accessLevel, AccessLevelRule.@equals) select new FunctionCall(this, f)
                ));
 }