/// <summary>
 /// Adds compiler feature abstraction to all attribute annotations of a class member declaration
 /// </summary>
 /// <param name="member">The member declaration</param>
 private static void AddCompilerAbstractionToAttributes(ClassMemberDeclaration member)
 {
     foreach (ConditionalAttributeAnnotation annotation in member.AttributeAnnotations)
     {
         AddCompilerAbstraction(annotation);
     }
 }
 public override void TypeCheck()
 {
     foreach (var ClassMemberDeclaration in ClassMemberDeclarations)
     {
         ClassMemberDeclaration.TypeCheck();
     }
 }
 public override void ResolveNames(LexicalScope ls)
 {
     ls.SymbolTable.Add(GetName(), this);
     LexicalScope = new LexicalScope(ls);
     foreach (var ClassMemberDeclaration in ClassMemberDeclarations)
     {
         ClassMemberDeclaration.ResolveNames(LexicalScope);
     }
 }
        public override void GenCode(ref string output)
        {
            output += Environment.NewLine + ".class";

            foreach (var modifier in ClassModifiers)
            {
                output += $" {modifier.ToString().ToLower()}";
            }
            output += $" {this.Identifier.Name}" + Environment.NewLine + "{";

            foreach (var ClassMemberDeclaration in ClassMemberDeclarations)
            {
                ClassMemberDeclaration.GenCode(ref output);
            }

            output += Environment.NewLine + "}";
        }