private function interfaceMethod() {
    static $visibility_keyword_types = [T_PUBLIC, T_PROTECTED, T_PRIVATE];
    $node = new InterfaceMethodNode();
    $this->matchDocComment($node);
    $is_static = $this->tryMatch(T_STATIC, $node, 'static');
    while (in_array($this->currentType, $visibility_keyword_types)) {
      if ($node->getVisibility()) {
        throw new ParserException(
          $this->filename,
          $this->iterator->getLineNumber(),
          $this->iterator->getColumnNumber(),
          "can only have one visibility modifier on interface method."
        );
      }
      $this->mustMatch($this->currentType, $node, 'visibility');
    }
    !$is_static && $this->tryMatch(T_STATIC, $node, 'static');
    $this->mustMatch(T_FUNCTION, $node);
    $this->tryMatch('&', $node, 'reference');
    $this->mustMatch(T_STRING, $node, 'name');
    $this->parameterList($node);
    $this->endStatement($node);
    return $node;
  }