refactor(core): правки по код-ревью (COM-утечки, безопасный shutdown, типобезопасность)
- PartModeler: ResetAsync/Dispose освобождают RCW и чистят реестр эскизов/операций; Editor освобождается после EndEdit (C1) - DocumentTools: сброс реестра при create/open/close — нет устаревших id (C2) - DocumentService: освобождение транзитных IDocuments/IKompasDocument (m9) - KompasSession.Dispose: ограниченное ожидание 5с вместо вечного блока (M3) - PartModeler.ExtrudeAsync: убран dynamic -> конкретные definition-типы; throughAll только для cut (M4) - FeatureTools.extrude_cut: дефолт throughAll=false, без подмены depth (m7) - tests: регрессия на сброс реестра (старый id недействителен) - docs/OPEN_QUESTIONS.md: итоги ревью (исправлено/отложено) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,30 @@
|
||||
|
||||
---
|
||||
|
||||
## Само-ревью кода (ночная сессия) — итоги
|
||||
|
||||
**Исправлено сразу:**
|
||||
- C1/C2 — утечки COM и устаревшие id: `PartModeler` освобождает RCW и сбрасывает реестр
|
||||
(`ResetAsync`/`Dispose`), `DocumentTools` сбрасывает реестр при create/open/close;
|
||||
`DocumentService` освобождает транзитные `IDocuments`/`IKompasDocument`.
|
||||
- M3 — `KompasSession.Dispose`: ограниченное ожидание (5 c) вместо вечного блока.
|
||||
- M4 — `ExtrudeAsync`: убран `dynamic`, конкретные `ksBossExtrusionDefinition`/
|
||||
`ksCutExtrusionDefinition`; `throughAll` разрешён только для выреза.
|
||||
- m7 — `extrude_cut`: дефолт `throughAll=false`, без молчаливой подмены `depth`.
|
||||
- Регрессионный тест: после `ResetAsync` старый id эскиза недействителен.
|
||||
|
||||
**⚠️ Отложено на проработку (из ревью):**
|
||||
- M5 — отмена/насос сообщений: `CancellationToken` не прерывает уже идущий COM-вызов; зависший
|
||||
вызов (модальный диалог КОМПАС) блокирует всю очередь. Возможное решение — диспетчер с насосом
|
||||
сообщений + подавление диалогов. Связано с [конкурентностью MCP].
|
||||
- m6 — `colorBPP=24` для снимка: для GIF (палитра) может не подойти; снимок по умолчанию PNG.
|
||||
- m8 — приведения enum к `short` для `GetPart/NewEntity/GetDefaultEntity`: на v24 работает
|
||||
(тесты зелёные), но стоит сверить точные типы параметров в interop.
|
||||
- m10 — `_app/_kompas` читаются из `IsConnected/Status()` вне STA-потока без `volatile`
|
||||
(доброкачественное устаревшее чтение).
|
||||
- m11 — трансляция `COMException`/HRESULT в понятные сообщения (сейчас понятны только наши
|
||||
`InvalidOperationException`); добавить текст последней ошибки КОМПАС.
|
||||
|
||||
## Журнал решений по ходу
|
||||
(дополняется автоматически во время работы)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user