package edu.neu.ccs.demeterf;

/** Represents a containment class for Fields 
 *    We encode seperate argument paths with inner classes that extend
 *    <code>Fields.any</code>.
 */
public class Fields {
    public static Fields.any any = new Fields.any();
    /** Base Field class that represents the pending traversal of any field.
     *   <p>During traversal, {@link edu.neu.ccs.demeterf.FC Function Classes}
     *   implement <tt>update<tt> methods that motify traversal arguments. The second
     *   parameter to these methods should be a subclass of <tt>Fields.any</tt> that
     *   represents the field about to be traversed. 
     *   </p>
     *   
     *   We use the encoding that a class <tt>C</tt> with field <tt>F</tt> should
     *   contain an inner <tt>public static class</tt> with the same name as the
     *   field name:
     *   <style type='text/css'>                                                                    
     *     .def{ color: #000000; }                                                                 
     *     .grade{                                                                                 
     *       border: solid #FF0000 1px;                                                           
     *       background-color: #FFFF60;                                                           
     *     }                                                                                       
     *     .gcom{ font-weight: bold; background-color: #FFC0C0; }                                  
     *     .com{ font-style: italic; color: #880000; }                                             
     *     .keyw{ font-weight: bold; color: #000088; }                                             
     *     .num{ color: #00AA00; }                                                                 
     *     .func{ color: #BB7733; }                                                                
     *     .str{ color: #CC00AB; }                                                                 
     *     .prim{ color: #0000FF; }                                                                
     *   </style>                                                                                   
     *   <blockquote><code><pre>                                                                              
     *   <span class="com">// Class definition for C</span><span class="def">                                                                        
     *   </span><span class="keyw">public</span><span class="def"> </span><span class="keyw">class</span><span class="def"> C{                                                       
     *      </span><span class="com">// Single Field... F</span><span class="def">         
     *      </span><span class="prim">String</span><span class="def"> F;                   
     *                                                                                     
     *      </span><span class="com">// Constructor</span><span class="def">               
     *      </span><span class="keyw">public</span><span class="def"> </span><span class="func">C</span><span class="def">(</span><span class="prim">String</span><span class="def"> F){ </span><span class="keyw">this</span><span class="def">.F = F; }                      
     *                                                                                     
     *      </span><span class="com">// Field class definition</span><span class="def">    
     *      </span><span class="keyw">public</span><span class="def"> </span><span class="keyw">static</span><span class="def"> </span><span class="keyw">class</span><span class="def"> F </span><span class="keyw">extends</span><span class="def"> Fields.any{}             
     *   }</span>
     *   </pre></code></blockquote>
     *   
     *   <p>See {@link edu.neu.ccs.demeterf.examples.NewUpdate NewUpdate} for an example of
     *   how the field definition can be used during traversal.</p>
     */
    public static class any{}
}