Skip to content

Commit 2af58b9

Browse files
authored
Merge branch 'develop' into feature/fixes260116
2 parents c82f929 + f4137ab commit 2af58b9

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

docs/diagnostics/QueryNestedFieldsByDot.md

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,36 @@
99

1010
## Примеры
1111
1. Базовое разыменование ссылочных полей в выборке (во временную таблицу или в результат запроса)
12-
`ЗаказКлиентаТовары.Ссылка.Организация КАК Организация`
12+
```bsl
13+
ЗаказКлиентаТовары.Ссылка.Организация КАК Организация
14+
```
1315
2. Разыменование ссылочных полей в соединениях таблиц
14-
`ВТ_РасчетыСКлиентами КАК ВТ_РасчетыСКлиентами
15-
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДанныеЗаказовКлиента КАК ВТ_ДанныеЗаказовКлиента
16-
ПО ВТ_РасчетыСКлиентами.АналитикаУчетаПоПартнерам.Партнер = ВТ_ДанныеЗаказовКлиента.Партнер`
16+
```bsl
17+
ИЗ
18+
ВТ_РасчетыСКлиентами КАК ВТ_РасчетыСКлиентами
19+
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДанныеЗаказовКлиента КАК ВТ_ДанныеЗаказовКлиента
20+
ПО ВТ_РасчетыСКлиентами.АналитикаУчетаПоПартнерам.Партнер = ВТ_ДанныеЗаказовКлиента.Партнер
21+
```
1722
3. Разыменование ссылочных полей в виртуальных таблицах
18-
`РегистрНакопления.РасчетыСКлиентами.Обороты(
19-
&НачалоПериода,
20-
&КонецПериода,
21-
,
22-
(АналитикаУчетаПоПартнерам.Партнер) В ...`
23+
```bsl
24+
ИЗ
25+
РегистрНакопления.РасчетыСКлиентами.Обороты(
26+
&НачалоПериода,
27+
&КонецПериода,
28+
,
29+
(АналитикаУчетаПоПартнерам.Партнер) В ...
30+
```
2331
4. Конструкция "ВЫРАЗИТЬ" с разыменованием получаемого поля
24-
`ВЫРАЗИТЬ(ВТ_ПланОтгрузок.ДокументПлан КАК Документ.ЗаказКлиента).Валюта.Наценка`
32+
```bsl
33+
ВЫРАЗИТЬ(ВТ_ПланОтгрузок.ДокументПлан КАК Документ.ЗаказКлиента).Валюта.Наценка
34+
```
2535
5. Разыменование ссылочных полей в секции "ГДЕ"
26-
`ГДЕ азКлиентаТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода`
36+
```bsl
37+
ГДЕ
38+
ЗаказКлиентаТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
39+
```
2740

2841
<!-- В данном разделе приводятся примеры, на которые диагностика срабатывает, а также можно привести пример, как можно исправить ситуацию -->
2942

3043
## Источники
31-
Источник: [Разыменование ссылочных полей составного типа в языке запросов] (https://its.1c.ru/db/v8std/content/654/hdoc)
44+
[Разыменование ссылочных полей составного типа в языке запросов (#std654)](https://its.1c.ru/db/v8std/content/654/hdoc)

src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,30 @@ public DocumentContext getDocument(URI uri) {
173173
}
174174
}
175175

176+
/**
177+
* Получить документ по URI без захвата блокировки.
178+
* <p>
179+
* Этот метод предоставляет прямой доступ к хранилищу документов без синхронизации.
180+
* Используйте его только в случаях, когда:
181+
* <ul>
182+
* <li>блокировка уже захвачена вызывающим кодом;</li>
183+
* <li>операция только на чтение и допускается eventual consistency;</li>
184+
* <li>критична производительность и накладные расходы на блокировку недопустимы.</li>
185+
* </ul>
186+
* <p>
187+
* <b>Внимание:</b> использование этого метода без внешней синхронизации может привести
188+
* к состояниям гонки, если другой поток одновременно модифицирует документ или коллекцию.
189+
*
190+
* @param uri нормализованный URI документа
191+
* @return Контекст документа или {@code null}, если документ не найден
192+
* @see #getDocument(URI) безопасная версия с захватом блокировки
193+
* @see #getDocumentLock(URI) получение блокировки для внешней синхронизации
194+
*/
195+
@Nullable
196+
public DocumentContext getDocumentNoLock(URI uri) {
197+
return documents.get(uri);
198+
}
199+
176200
/**
177201
* Получить документ по URI с нормализацией.
178202
* <p>

src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ private SourceDefinedSymbol getFromSymbol(SymbolOccurrence symbolOccurrence) {
314314
var uri = symbolOccurrence.location().uri();
315315
var position = symbolOccurrence.location().getStart();
316316

317-
return Optional.ofNullable(serverContext.getDocument(uri))
317+
return Optional.ofNullable(serverContext.getDocumentNoLock(uri))
318318
.map(DocumentContext::getSymbolTree)
319319
.map(symbolTree -> symbolTree.getSymbolAtPosition(position))
320320
.orElseThrow();

0 commit comments

Comments
 (0)