From 955c53826ff144f3c2fb8ec6f337bd248cee788d Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Tue, 13 Aug 2024 14:10:52 +0100 Subject: [PATCH 1/6] Helper methods and extensions to improve kotlin interop. Based on kmongo-property but provides both infix and nested helpers. Adds a new package `org.mongodb.mongodb-driver-kotlin-extensions`. Its both kotlin drivers and bson kotlin implementations agnostic. So can be used with any combination of `bson-kotlin`, `bson-kotlinx`, `mongodb-driver-kotlin-sync` and `mongodb-driver-kotlin-coroutine`. Initial Filters extensions support, with both inflix and nested helpers eg: ``` import com.mongodb.kotlin.client.model.Filters.eq // infix Person::name.eq(person.name) // nested val bson = eq(Person::name, person.name) ``` Also adds path based support which works with vairous annotations on the data class: `@SerialName("_id")`, `@BsonId`, `@BsonProperty("_id")`: ``` (Restaurant::reviews / Review::score).path() == "reviews.rating" ``` JAVA-5308 JAVA-5484 --- config/spotbugs/exclude.xml | 6 + driver-kotlin-extensions/build.gradle.kts | 158 +++ .../kotlin/client/model/Filters/Filters.kt | 1142 +++++++++++++++++ .../mongodb/kotlin/client/model/Properties.kt | 121 ++ .../kotlin/client/property/KPropertyPath.kt | 185 +++ .../kotlin/kotlin/internal/OnlyInputTypes.kt | 27 + .../kotlin/client/model/ExtensionsApiTest.kt | 65 + .../client/model/Filters/FiltersTest.kt | 631 +++++++++ .../kotlin/client/model/KPropertiesTest.kt | 138 ++ settings.gradle | 1 + 10 files changed, 2474 insertions(+) create mode 100644 driver-kotlin-extensions/build.gradle.kts create mode 100644 driver-kotlin-extensions/src/main/kotlin/com/mongodb/kotlin/client/model/Filters/Filters.kt create mode 100644 driver-kotlin-extensions/src/main/kotlin/com/mongodb/kotlin/client/model/Properties.kt create mode 100644 driver-kotlin-extensions/src/main/kotlin/com/mongodb/kotlin/client/property/KPropertyPath.kt create mode 100644 driver-kotlin-extensions/src/main/kotlin/kotlin/internal/OnlyInputTypes.kt create mode 100644 driver-kotlin-extensions/src/test/kotlin/com/mongodb/kotlin/client/model/ExtensionsApiTest.kt create mode 100644 driver-kotlin-extensions/src/test/kotlin/com/mongodb/kotlin/client/model/Filters/FiltersTest.kt create mode 100644 driver-kotlin-extensions/src/test/kotlin/com/mongodb/kotlin/client/model/KPropertiesTest.kt diff --git a/config/spotbugs/exclude.xml b/config/spotbugs/exclude.xml index fedf0c72566..f5522c8f271 100644 --- a/config/spotbugs/exclude.xml +++ b/config/spotbugs/exclude.xml @@ -223,6 +223,12 @@ + + + + + +