/**
 * Abstract class for Java members (field, constructor, method)
 */
module dryad/model/member
strategies

  /**
   * @type Member Object -> Class Object
   */
  get-declaring-class = instanceof-JavaMember;
    classes_get-instance-field(|"declaring-class")
  
  /**
   * @type Member Object -> Member Object
   */
  set-declaring-class(|class) = instanceof-JavaMember;
    classes_set-instance-field(|"declaring-class", class)
    
/**
 * Access Control
 */
strategies

  /**
   * @type Method object -> Access Modifier
   */
  is-private =
    where(get-access => Private())
    
  /**
   * @type Method object -> Access Modifier
   */
  is-public =
    where(get-access => Public())
    
  /**
   * @type Method object -> Access Modifier
   */
  is-protected =
    where(get-access => Protected())

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

  /**
   * Succeeds if the current term is a member.
   * Subclasses of member implement this strategy.   
   */
  instanceof-JavaMember = fail