* feat(kotlin): ingest Spring HTTP routes as decoratorRoutes (#3130)
Kotlin RestControllers now emit analyze Route nodes, handler attribution, and folded constant paths on the ingestion decoratorRoutes channel, matching Java Spring without changing Java or Python extractors.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(review): reject abstract/sealed Kotlin RestControllers and keep Java brace parsing
Code review required fail-closed admission for abstract and sealed classes, and Kotlin-owned method=[...] translation so Java extractors do not start emitting routes from bracket arrays.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(kotlin): note ingestion-side Spring decoratorRoutes wiring
The module comment still described Kotlin as group-layer-only. Ingestion now uses the same constant-fold hooks as Java.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(kotlin): keep empty Spring path arrays and trailing commas (#3133)
Empty [] / arrayOf() class or method paths are no prefix, not a skip, matching the group-layer contract. Trailing commas in annotation argument lists no longer fail parseSpringAnnotationArguments.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(kotlin): flatten empty Spring path classification
Match class-level empty [] / arrayOf() handling to the method-level branch so the fail-closed path is not nested.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>