Class ReferenceIndex
Управляет индексацией и поиском ссылок на символы (методы, переменные) во всех документах workspace.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringМаркерscopeNameдля вхождений неквалифицированных self-членов (реквизитов/платформенных методов self-типа модуля). -
Constructor Summary
ConstructorsConstructorDescriptionReferenceIndex(ServerContextProvider serverContextProvider, com.github._1c_syntax.utils.StringInterner stringInterner, LocationRepository locationRepository, SymbolOccurrenceRepository symbolOccurrenceRepository, SelfMemberResolver selfMemberResolver) -
Method Summary
Modifier and TypeMethodDescriptionvoidclearReferences(URI uri) Очистить ссылки из/на текущий документ.getReference(URI uri, Position position) Поиск символа по позиции курсора.getReferencesFrom(SourceDefinedSymbol symbol) Поиск ссылок на символы в символе.getReferencesFrom(URI uri) Поиск ссылок на символы в документе.getReferencesFrom(URI uri, SymbolKind kind) Поиск ссылок на символы в документе.getReferencesTo(SourceDefinedSymbol symbol) Получить ссылки на символ.protected SymbolOccurrencemethodCallOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, String symbolName, Range range) Построить вхождение «вызов метода» без записи в индекс.protected SymbolOccurrencemoduleReferenceOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, Range range) Построить вхождение «ссылка на модуль» без записи в индекс.voidreplaceReferences(URI uri, Iterable<SymbolOccurrence> newOccurrences) Атомарно заменить все обращения к символам, расположенные в документе, на новый набор.protected SymbolOccurrenceselfMemberOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, SymbolKind symbolKind, String name, Range range, OccurrenceType occurrenceType) Построить вхождение «обращение к неквалифицированному self-члену» (реквизиту/ платформенному методу self-типа модуля) без записи в индекс.protected SymbolOccurrencevariableOccurrence(URI uri, String mdoRef, com.github._1c_syntax.bsl.types.ModuleType moduleType, String methodName, String variableName, Range range, OccurrenceType occurrenceType) Построить вхождение «обращение к переменной» без записи в индекс.
-
Field Details
-
SELF_MEMBER_SCOPE
МаркерscopeNameдля вхождений неквалифицированных self-членов (реквизитов/платформенных методов self-типа модуля). По немуbuildReference(SymbolOccurrence)реконструируетPlatformMemberSymbolчерезSelfMemberResolver, а не ищет source-defined символ в дереве. Не пересекается с реальными именами методов (у source-символов scopeName — имя охватывающего метода либо пусто).- See Also:
-
-
Constructor Details
-
ReferenceIndex
@ConstructorProperties({"serverContextProvider","stringInterner","locationRepository","symbolOccurrenceRepository","selfMemberResolver"}) public ReferenceIndex(ServerContextProvider serverContextProvider, com.github._1c_syntax.utils.StringInterner stringInterner, LocationRepository locationRepository, SymbolOccurrenceRepository symbolOccurrenceRepository, SelfMemberResolver selfMemberResolver)
-
-
Method Details
-
getReferencesTo
Получить ссылки на символ.- Parameters:
symbol- Символ, для которого необходимо осуществить поиск ссылок.- Returns:
- Список ссылок на символ.
-
getReference
-
getReferencesFrom
-
getReferencesFrom
Поиск ссылок на символы в документе.- Parameters:
uri- URI документа, в котором нужно найти ссылки на другие символы.- Returns:
- Список ссылок на символы.
-
getReferencesFrom
Поиск ссылок на символы в символе.- Parameters:
symbol- Символ, в котором нужно найти ссылки на другие символы.- Returns:
- Список ссылок на символы.
-
clearReferences
Очистить ссылки из/на текущий документ.- Parameters:
uri- URI документа.
-
replaceReferences
Атомарно заменить все обращения к символам, расположенные в документе, на новый набор.В отличие от пары
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:
- построенное вхождение.
-