/// <summary>Walk all the attributes in this template, spitting them out. </summary>
        public virtual void walkAttributes(StringTemplate st)
        {
            if (st == null || st.getAttributes() == null)
            {
                return ;
            }

            ICollection keys = st.getAttributes().Keys;
            saveItemIndex();

            for (IEnumerator iterator = keys.GetEnumerator(); iterator.MoveNext(); )
            {
                String name = (String) iterator.Current;

                if (name.Equals(ASTExpr.REFLECTION_ATTRIBUTES))
                {
                    continue;
                }

                Object value = st.getAttributes()[name];
                incItemIndex();
                indent();
                output.Append("Attribute ");
                output.Append(name);
                output.Append(" values:");
                output.Append(Environment.NewLine);
                indentation++;
                walkAttributeValues(value);
                indentation--;
            }
            restoreItemIndex();
        }