fix: устранение ложных reliability-замечаний Sonar (S2583/S2637) - #3963
Conversation
Метод вызывается Jackson при десериализации и может получить null (JSON `"ignoredAuthors": null`), поэтому защитная проверка `authors == null` корректна. Из-за @NullMarked на пакете Sonar считал параметр non-null и помечал проверку как недостижимую (java:S2583). Помечаем параметр @nullable, отражая реальный контракт. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Метод возвращает null, когда парная скобка не найдена, и вызывающий код уже проверяет результат на null. Из-за @NullMarked на пакете Sonar считал возврат non-null и помечал `return null` как нарушение контракта (java:S2637). Помечаем возврат @nullable, отражая реальное поведение. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughTwo Java methods receive explicit JSpecify nullability annotations. ChangesNullability Annotations
Estimated Code Review Effort🎯 1 (Trivial) | ⏱️ ~3 minutes Suggested Reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR refines nullability contracts to match existing runtime behavior and reduce false reliability findings without changing logic.
Changes:
- Marks
findMatchingBracketas nullable because it returnsnullwhen no matching bracket is found. - Marks
DiagnosticsOptions.setIgnoredAuthorsinput as nullable because Jackson may passnullfor the property.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
src/main/java/com/github/_1c_syntax/bsl/languageserver/documenthighlight/BracketDocumentHighlightSupplier.java |
Adds @Nullable to the private bracket matching helper return type. |
src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java |
Adds @Nullable to the Jackson setter parameter for ignored authors. |
Что и зачем
Quality gate на
developпадал по единственному условию —new_reliability_rating= C (порог A). Причина — 38 reliability-замечаний в новом коде, почти все из которых ложные срабатывания или намеренные паттерны (Spring DI прототип-бинов, ANTLR-nullability при@NullMarked).Этот PR устраняет две позиции, где в коде действительно стоит уточнить контракт nullability (а не править логику):
DiagnosticsOptions.setIgnoredAuthors(java:S2583) —@JsonSetter, вызывается Jackson и реально может получитьnull("ignoredAuthors": null). Проверкаauthors == nullкорректна; из-за@NullMarkedSonar считал её недостижимой. Параметр помечен@Nullable.BracketDocumentHighlightSupplier.findMatchingBracket(java:S2637) — приватный хелпер возвращаетnull, когда пара не найдена; вызывающий код уже проверяет результат. Возврат помечен@Nullable.Обе правки — только аннотации, без изменения поведения (NullAway в сборке не используется).
Остальные замечания
Прочие reliability-замечания в новом коде разобраны индивидуально и являются ложными срабатываниями либо намеренными паттернами, которые нельзя чинить правкой кода без вреда дизайну:
DocumentContext,LanguageServerConfiguration) в одноаргументный конструктор. Потребители — либо классы, создаваемые черезnewвручную (*Computer), либо сами prototype-бины (диагностики). Не синглтоны → реальной проблемы нет.@Lazyдля кэша; разрыв цикла через@Qualifier/@Lazy; документированный обход циклической зависимости).cfg/expression tree и ParseTree-коде — ANTLR может вернутьnullдаже там, где сигнатура этого не заявляет; защитные проверки оставлены.Они закрываются в SonarCloud как False Positive / Won't Fix (вне этого PR).
🤖 Generated with Claude Code
Summary by CodeRabbit