anchor.diff:  nameAndTypeArguments
       : ( memberName | typeName | 'subtype' ) 
         ( (typeArguments) => typeArguments )?
  +      ARRAY*
       ;
   
   elementSelector
  
positive.code:     
  fragment SPREAD :;
  fragment LBRACKET :;
  BRACKETS
      : '['
      ( ( { input.LA(1) == ']' && input.LA(2) == '.' }? => '].' { $type = SPREAD; } )
       | { $type = LBRACKET; } )
      ;    
  
  CHARLITERAL
  
negative.code:     ;
  
  abbreviation
      : ARRAY | '?' | LBRACKET dimension ']'
      ;
  
  
  typeNameWithArguments
      : typeName typeArguments?
  