/**
 * Abstract Java field
 *
 * @author Martin Bravenboer <martin@cs.uu.nl>
 */
module dryad/model/field
imports
  dryad/model/member
  dryad/lib-ext/oo/classes
  
strategies
 
  /**
   * Returns the simple name of this field.
   *
   * @type Field Object -> String
   */
  get-simple-name = instanceof-JavaField;
    classes_get-instance-field(|"simple-name")  
    
  /**
   * Returns the name of this field.
   *
   * @todo Introduce a FieldName?
   * @type Field Object -> ExprName
   */
  get-name = instanceof-JavaField; ?this;
    where(get-declaring-class => class)
    ; !ExprName(<get-fully-qualified-name> class, Id(<get-simple-name> this))

/**
 * Stratego class support for fields.
 */
strategies

  /**
   * Succeeds if the current term is an instance of a field.
   *
   * Subclasses of field implement this strategy.   
   */
  instanceof-JavaField = fail

  /**
   * Every Java field is a Java member.
   */
  instanceof-JavaMember =
    instanceof-JavaField