<?xml version="1.0"?>
<clause number="24.3.1" title="Compilation of an attribute">
  <paragraph>The compilation of an attribute with attribute class T, <non_terminal where="24.2">positional-argument-list</non_terminal> P and <non_terminal where="24.2">named-argument-list</non_terminal> N, consists of the following steps: <list><list_item> Follow the compile-time processing steps for compiling an <non_terminal where="14.5.10.1">object-creation-expression</non_terminal> of the form new T(P). These steps either result in a compile-time error, or determine an instance constructor on T that can be invoked at run-time. Call this instance constructor C. </list_item><list_item> If C does not have public accessibility, then a compile-time error occurs. </list_item><list_item> For each <non_terminal where="24.2">named-argument</non_terminal> Arg in N: </list_item><list><list_item> Let Name be the identifier of the <non_terminal where="24.2">named-argument</non_terminal> Arg. </list_item><list_item> Name must identify a non-static read-write public field or property on T. If T has no such field or property, then a compile-time error occurs. </list_item></list><list_item> Keep the following information for run-time instantiation of the attribute: the attribute class T, the instance constructor C on T, the <non_terminal where="24.2">positional-argument-list</non_terminal> P and the <non_terminal where="24.2">named-argument-list</non_terminal> N. </list_item></list></paragraph>
</clause>
