Class KeywordReferenceFinder

java.lang.Object
com.github._1c_syntax.bsl.languageserver.references.KeywordReferenceFinder
All Implemented Interfaces:
ReferenceFinder

@Component @Order(190) public class KeywordReferenceFinder extends Object implements ReferenceFinder
Поиск ссылок на BSL-keyword'ы (Если, Истина, Цикл…).

Keyword'ы не являются source-defined-символами и не попадают в общий symbol-tree модуля, поэтому для их hover-обработки строится синтетический KeywordSymbol на лету — по позиции курсора находится keyword-токен, по его тексту и AST-контексту использования (Функция/Процедура/Перем для body-keyword'ов вида Знач/Возврат/Экспорт) выбирается описание из GlobalScopeProvider.findKeywordDescription(String, Language, String, FileType). Полученный KeywordSymbol проходит дальше через обычный HoverProvider-flow и попадает в KeywordSymbolMarkupContentBuilder.

Аналогично паттерну AnnotationReferenceFinder: оба создают synthetic-символы on-the-fly без регистрации в symbol-tree.

  • Constructor Details

  • Method Details

    • findReference

      public Optional<Reference> findReference(URI uri, Position position)
      Description copied from interface: ReferenceFinder
      Поиск символа по позиции курсора.
      Specified by:
      findReference in interface ReferenceFinder
      Parameters:
      uri - URI документа, в котором необходимо осуществить поиск.
      position - позиция курсора.
      Returns:
      данные ссылки.
    • findReference

      public Optional<Reference> findReference(URI uri, TerminalNode terminal)
      Поиск символа по уже известному терминалу-идентификатору — без спуска по AST от корня к позиции. Реализация по умолчанию делегирует в ReferenceFinder.findReference(URI, Position) по стартовой позиции терминала (полное поведенческое соответствие позиционному варианту). Finder'ы, чья стоимость — именно этот спуск (findTerminalNodeContainsPosition и аналоги), переопределяют метод на подъём вверх от terminal.

      Терминал уже под рукой — спуск по AST к позиции не нужен, keyword-символ строится прямо от terminal.

      Specified by:
      findReference in interface ReferenceFinder
      Parameters:
      uri - URI документа, в котором необходимо осуществить поиск.
      terminal - терминал-идентификатор под курсором.
      Returns:
      данные ссылки.