======================================= Global attributes ======================================= [assembly: Single] [module: A, C()] --- (compilation_unit (global_attribute_list (attribute (identifier))) (global_attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list)))) ======================================= Attributes with arguments ======================================= [A(B.C)] class D {} --- (compilation_unit (class_declaration (attribute_list (attribute (identifier) (attribute_argument_list (attribute_argument (member_access_expression (identifier) (identifier)))))) (identifier) (declaration_list))) ======================================= Attributes with qualified name ======================================= [NS.A(B.C)] class D {} --- (compilation_unit (class_declaration (attribute_list (attribute (qualified_name (identifier) (identifier)) (attribute_argument_list (attribute_argument (member_access_expression (identifier) (identifier)))))) (identifier) (declaration_list))) ======================================= Attributes on classes ======================================= [Single] class A { } [One][Two] [Three] class A { } [One] [Two,Three()] class A { } --- (compilation_unit (class_declaration (attribute_list (attribute (identifier))) (identifier) (declaration_list)) (class_declaration (attribute_list (attribute (identifier))) (attribute_list (attribute (identifier))) (attribute_list (attribute (identifier))) (identifier) (declaration_list)) (class_declaration (attribute_list (attribute (identifier))) (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (identifier) (declaration_list))) ======================================= Attributes on structs ======================================= [A,B()][C] struct A { } --- (compilation_unit (struct_declaration (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (attribute_list (attribute (identifier))) (identifier) (declaration_list))) ======================================= Attributes on fields ======================================= class Zzz { [A,B()][C] public int Z; } --- (compilation_unit (class_declaration (identifier) (declaration_list (field_declaration (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (attribute_list (attribute (identifier))) (modifier) (variable_declaration (predefined_type) (variable_declarator (identifier))))))) ======================================= Attributes on methods ======================================= class Methods { [ValidatedContract] int Method1() { return 0; } [method: ValidatedContract] int Method2() { return 0; } [return: ValidatedContract] int Method3() { return 0; } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (attribute_list (attribute (identifier))) (predefined_type) (identifier) (parameter_list) (block (return_statement (integer_literal)))) (method_declaration (attribute_list (attribute_target_specifier) (attribute (identifier))) (predefined_type) (identifier) (parameter_list) (block (return_statement (integer_literal)))) (method_declaration (attribute_list (attribute_target_specifier) (attribute (identifier))) (predefined_type) (identifier) (parameter_list) (block (return_statement (integer_literal))))))) ======================================= Attributes on enums ======================================= [Single] enum A { B, C } [One][Two] [Three] enum A { B, C } [One] [Two,Three()] enum A { B, C } --- (compilation_unit (enum_declaration (attribute_list (attribute (identifier))) (identifier) (enum_member_declaration_list (enum_member_declaration (identifier)) (enum_member_declaration (identifier)))) (enum_declaration (attribute_list (attribute (identifier))) (attribute_list (attribute (identifier))) (attribute_list (attribute (identifier))) (identifier) (enum_member_declaration_list (enum_member_declaration (identifier)) (enum_member_declaration (identifier)))) (enum_declaration (attribute_list (attribute (identifier))) (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (identifier) (enum_member_declaration_list (enum_member_declaration (identifier)) (enum_member_declaration (identifier))))) ======================================= Attributes on events ======================================= class Zzz { [A,B()][C] public event EventHandler SomeEvent { add { } remove { } } } --- (compilation_unit (class_declaration (identifier) (declaration_list (event_declaration (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (attribute_list (attribute (identifier))) (modifier) (identifier) (identifier) (accessor_list (accessor_declaration (block)) (accessor_declaration (block))))))) ======================================= Attributes on event accessors ======================================= class Zzz { public event EventHandler SomeEvent { [A,B()][C] add { } [A,B()][C] remove { } } } --- (compilation_unit (class_declaration (identifier) (declaration_list (event_declaration (modifier) (identifier) (identifier) (accessor_list (accessor_declaration (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (attribute_list (attribute (identifier))) (block)) (accessor_declaration (attribute_list (attribute (identifier)) (attribute (identifier) (attribute_argument_list))) (attribute_list (attribute (identifier))) (block)))))))