Class ReferenceIndex

java.lang.Object
com.github._1c_syntax.bsl.languageserver.references.ReferenceIndex

@Component public class ReferenceIndex extends Object
Индекс ссылок на символы в проекте.

Управляет индексацией и поиском ссылок на символы (методы, переменные) во всех документах workspace.

  • Field Details

    • SELF_MEMBER_SCOPE

      public static final String SELF_MEMBER_SCOPE
      Маркер scopeName для вхождений неквалифицированных self-членов (реквизитов/платформенных методов self-типа модуля). По нему buildReference(SymbolOccurrence) реконструирует PlatformMemberSymbol через SelfMemberResolver, а не ищет source-defined символ в дереве. Не пересекается с реальными именами методов (у source-символов scopeName — имя охватывающего метода либо пусто).
      See Also:
  • Constructor Details

  • Method Details

    • getReferencesTo

      public List<Reference> getReferencesTo(SourceDefinedSymbol symbol)
      Получить ссылки на символ.
      Parameters:
      symbol - Символ, для которого необходимо осуществить поиск ссылок.
      Returns:
      Список ссылок на символ.
    • getReference

      public Optional<Reference> getReference(URI uri, Position position)
      Поиск символа по позиции курсора.
      Parameters:
      uri - URI документа, в котором необходимо осуществить поиск.
      position - позиция курсора.
      Returns:
      данные ссылки.
    • getReferencesFrom

      public List<Reference> getReferencesFrom(URI uri)
      Поиск ссылок на символы в документе.
      Parameters:
      uri - URI документа, в котором нужно найти ссылки на другие символы.
      Returns:
      Список ссылок на символы.
    • getReferencesFrom

      public List<Reference> getReferencesFrom(URI uri, SymbolKind kind)
      Поиск ссылок на символы в документе.
      Parameters:
      uri - URI документа, в котором нужно найти ссылки на другие символы.
      Returns:
      Список ссылок на символы.
    • getReferencesFrom

      public List<Reference> getReferencesFrom(SourceDefinedSymbol symbol)
      Поиск ссылок на символы в символе.
      Parameters:
      symbol - Символ, в котором нужно найти ссылки на другие символы.
      Returns:
      Список ссылок на символы.
    • clearReferences

      public void clearReferences(URI uri)
      Очистить ссылки из/на текущий документ.
      Parameters:
      uri - URI документа.
    • replaceReferences

      public void replaceReferences(URI uri, Iterable<SymbolOccurrence> newOccurrences)
      Атомарно заменить все обращения к символам, расположенные в документе, на новый набор.

      В отличие от пары clearReferences + addXxx не оставляет окна, в котором индекс документа пуст: сначала добавляются недостающие вхождения, затем удаляются устаревшие (разность старого и нового наборов). Конкурентные читатели в любой момент видят как минимум пересечение старого и нового наборов — «пропажа» ссылок на существующие символы (и, как следствие, ложные срабатывания диагностик неиспользуемых переменных/методов) исключена.

      Parameters:
      uri - URI документа, чьи вхождения заменяются.
      newOccurrences - Новый набор вхождений (дубликаты допускаются: повторная запись вхождения — идемпотентный no-op).
    • methodCallOccurrence

      protected SymbolOccurrence methodCallOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, String symbolName, Range range)
      Построить вхождение «вызов метода» без записи в индекс.

      Кладётся под каноническим SymbolKind.Method независимо от истинного вида цели (обычный метод или конструктор OneScript-класса) — см. indexedKindOf(SymbolKind).

      Parameters:
      uri - URI документа, откуда произошел вызов.
      mdoRef - Ссылка на объект-метаданных, к которому происходит обращение (например, CommonModule.ОбщийМодуль1).
      moduleType - Тип модуля, к которому происходит обращение (например, ModuleType.CommonModule).
      symbolName - Имя символа, к которому происходит обращение.
      range - Диапазон, в котором происходит обращение к символу.
      Returns:
      построенное вхождение.
    • moduleReferenceOccurrence

      protected SymbolOccurrence moduleReferenceOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, Range range)
      Построить вхождение «ссылка на модуль» без записи в индекс.

      Имя символа вычисляется детерминированно из mdoRef и moduleType (ModuleSymbol.nameOf(String, ModuleType)) и совпадает с ModuleSymbol.getName(), поэтому запись и поиск (getReferencesTo(SourceDefinedSymbol)) симметричны без какой-либо спецобработки.

      Parameters:
      uri - URI документа, откуда произошло обращение к модулю.
      mdoRef - Ссылка на объект-метаданных модуля (например, CommonModule.ОбщийМодуль1).
      moduleType - Тип модуля (например, ModuleType.CommonModule).
      range - Диапазон, в котором происходит обращение к модулю.
      Returns:
      построенное вхождение.
    • variableOccurrence

      protected SymbolOccurrence variableOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, String methodName, String variableName, Range range, OccurrenceType occurrenceType)
      Построить вхождение «обращение к переменной» без записи в индекс. Вид вхождения (OccurrenceType) задаётся явно.
      Parameters:
      uri - URI документа, откуда произошел вызов.
      mdoRef - Ссылка на объект-метаданных, к которому происходит обращение (например, CommonModule.ОбщийМодуль1).
      moduleType - Тип модуля, к которому происходит обращение (например, ModuleType.CommonModule).
      methodName - Имя метода, к которому относится переменная. Пустой, если переменная относится к модулю.
      variableName - Имя переменной, к которой происходит обращение.
      range - Диапазон, в котором происходит обращение к символу.
      occurrenceType - Вид обращения к символу.
      Returns:
      построенное вхождение.
    • selfMemberOccurrence

      protected SymbolOccurrence selfMemberOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, SymbolKind symbolKind, String name, Range range, OccurrenceType occurrenceType)
      Построить вхождение «обращение к неквалифицированному self-члену» (реквизиту/ платформенному методу self-типа модуля) без записи в индекс. Ключ помечается SELF_MEMBER_SCOPE, по которому buildReference(SymbolOccurrence) реконструирует PlatformMemberSymbol через SelfMemberResolver.
      Parameters:
      uri - URI документа, где встречен self-член.
      mdoRef - mdoRef документа (self-тип — это его собственный тип модуля).
      moduleType - тип модуля документа.
      symbolKind - вид: SymbolKind.Method (вызов) / SymbolKind.Property (ссылка).
      name - имя self-члена.
      range - диапазон обращения.
      occurrenceType - вид обращения.
      Returns:
      построенное вхождение.