From e64ab601d4845686e569b498119636efe5e6a400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20G=C4=99siarz?= <126520293+arturgesiarz@users.noreply.github.com> Date: Wed, 4 Feb 2026 08:36:42 +0100 Subject: [PATCH 1/4] Remove id property --- .../kotlin/com/swmansion/kmpmaps/core/Map.kt | 2 +- .../com/swmansion/kmpmaps/core/MapTypes.kt | 64 ++++++++++++++----- .../kotlin/com/swmansion/kmpmaps/core/Map.kt | 8 +-- .../com/swmansion/kmpmaps/core/MapDelegate.kt | 4 +- .../com/swmansion/kmpmaps/core/Utils.kt | 2 +- .../com/swmansion/kmpmaps/core/Extensions.kt | 8 +-- .../kmpmaps/core/MapEventHandlers.kt | 37 +++++++++-- .../kmpmaps/googlemaps/Extensions.kt | 3 +- .../com/swmansion/kmpmaps/googlemaps/Map.kt | 11 ++-- .../kmpmaps/googlemaps/MapDelegate.kt | 3 +- .../MarkerClusterManagerDelegate.kt | 5 +- 11 files changed, 106 insertions(+), 41 deletions(-) diff --git a/kmp-maps/core/src/androidMain/kotlin/com/swmansion/kmpmaps/core/Map.kt b/kmp-maps/core/src/androidMain/kotlin/com/swmansion/kmpmaps/core/Map.kt index 744c846..2a7a6d1 100644 --- a/kmp-maps/core/src/androidMain/kotlin/com/swmansion/kmpmaps/core/Map.kt +++ b/kmp-maps/core/src/androidMain/kotlin/com/swmansion/kmpmaps/core/Map.kt @@ -172,7 +172,7 @@ public actual fun Map( ) } else { markers.forEach { marker -> - key(marker.id, marker.contentId) { + key(marker.getId(), marker.contentId) { val content = customMarkerContent[marker.contentId] if (content != null) { diff --git a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt index 31220e2..7bd1f55 100644 --- a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt +++ b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt @@ -4,14 +4,14 @@ import androidx.annotation.RestrictTo import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb -import kotlin.uuid.ExperimentalUuidApi -import kotlin.uuid.Uuid +import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.JsonIgnoreUnknownKeys /** * Theme options for map appearance. @@ -89,16 +89,25 @@ public data class MapUISettings( * parameter. */ @Serializable +@JsonIgnoreUnknownKeys +@OptIn(ExperimentalSerializationApi::class) public data class Marker( val coordinates: Coordinates, val title: String? = "No title was provided", val androidMarkerOptions: AndroidMarkerOptions = AndroidMarkerOptions(), val iosMarkerOptions: IosMarkerOptions? = null, val contentId: String? = null, -) { - @OptIn(ExperimentalUuidApi::class) - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - val id: String = Uuid.random().toString() +) + +/** + * Generates a unique identifier for a marker based on its properties. + * + * @return A unique identifier as a string + */ +@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) +public fun Marker.getId(): String { + val result = arrayOf(coordinates, title, contentId).contentDeepHashCode() + return "marker_$result" } /** @@ -116,8 +125,17 @@ public data class Circle( val color: Color? = null, val lineColor: Color? = null, val lineWidth: Float? = null, -) { - @OptIn(ExperimentalUuidApi::class) internal val id: String = Uuid.random().toString() +) + +/** + * Generates a unique identifier for a circle based on its properties. + * + * @return A unique identifier as a string + */ +@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) +public fun Circle.getId(): String { + val result = arrayOf(center, radius, color, lineColor, lineWidth).contentDeepHashCode() + return "circle_$result" } /** @@ -133,8 +151,17 @@ public data class Polygon( val lineWidth: Float, val color: Color? = null, val lineColor: Color? = null, -) { - @OptIn(ExperimentalUuidApi::class) internal val id: String = Uuid.random().toString() +) + +/** + * Generates a unique identifier for a polygon based on its properties. + * + * @return A unique identifier as a string + */ +@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) +public fun Polygon.getId(): String { + val result = arrayOf(coordinates, lineWidth, color, lineColor).contentDeepHashCode() + return "polygon_$result" } /** @@ -148,8 +175,17 @@ public data class Polyline( val coordinates: List, val width: Float, val lineColor: Color? = null, -) { - @OptIn(ExperimentalUuidApi::class) internal val id: String = Uuid.random().toString() +) + +/** + * Generates a unique identifier for a polyline based on its properties. + * + * @return A unique identifier as a string + */ +@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) +public fun Polyline.getId(): String { + val result = arrayOf(coordinates, width, lineColor).contentDeepHashCode() + return "polyline_$result" } /** @@ -184,9 +220,7 @@ public data class CameraPosition( * @property items The list of [Marker] that make up this cluster */ @Serializable -public data class Cluster(val coordinates: Coordinates, val size: Int, val items: List) { - @OptIn(ExperimentalUuidApi::class) internal val id: String = Uuid.random().toString() -} +public data class Cluster(val coordinates: Coordinates, val size: Int, val items: List) /** * Configuration options for marker clustering. diff --git a/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Map.kt b/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Map.kt index 6a1dbd0..e94a493 100644 --- a/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Map.kt +++ b/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Map.kt @@ -152,7 +152,7 @@ public actual fun Map( LaunchedEffect(allMarkers, circles, polygons, polylines, mapDelegate) { val view = mapView ?: return@LaunchedEffect - val activeIds = allMarkers.map { it.id }.toSet() + val activeIds = allMarkers.map { it.getId() }.toSet() mapDelegate?.pruneCache(activeIds) markerMapping.clear() @@ -220,13 +220,13 @@ public actual fun Map( Box(modifier = Modifier.alpha(0f)) { allMarkers.forEach { marker -> val content = customMarkerContent[marker.contentId] - if (content != null && mapDelegate?.getCachedImage(marker.id) == null) { - key(marker.id, marker.contentId) { + if (content != null && mapDelegate?.getCachedImage(marker.getId()) == null) { + key(marker.getId(), marker.contentId) { MarkerSnapshotter( content = { content(marker) }, onSnapshotReady = { bitmap -> val uiImage = bitmap.toUIImage() - if (uiImage != null) mapDelegate?.onBitmapReady(marker.id, uiImage) + if (uiImage != null) mapDelegate?.onBitmapReady(marker.getId(), uiImage) }, ) } diff --git a/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/MapDelegate.kt b/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/MapDelegate.kt index 7df0b9a..1408510 100644 --- a/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/MapDelegate.kt +++ b/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/MapDelegate.kt @@ -305,7 +305,7 @@ internal class MapDelegate( } private fun findAnnotationById(id: String): MKAnnotationProtocol? { - val markerAnn = markerMapping.entries.find { it.value.id == id }?.key + val markerAnn = markerMapping.entries.find { it.value.getId() == id }?.key if (markerAnn != null) return markerAnn return mapView.annotations.filterIsInstance().find { clusterAnn -> @@ -366,7 +366,7 @@ internal class MapDelegate( view.annotation = annotation view.clusteringIdentifier = if (clusterSettings.enabled) "kmp_marker_cluster_group" else null - view.setMarkerImage(imageCache[marker.id]) + view.setMarkerImage(imageCache[marker.getId()]) return view } diff --git a/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Utils.kt b/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Utils.kt index ed19c4f..9b3990d 100644 --- a/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Utils.kt +++ b/kmp-maps/core/src/iosMain/kotlin/com/swmansion/kmpmaps/core/Utils.kt @@ -216,7 +216,7 @@ private fun calculateDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Do @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun generateClusterId(markers: List): String { val size = markers.size - val contentHash = markers.map(Marker::id).sorted().hashCode() + val contentHash = markers.map { it.getId() }.sorted().hashCode() return "cluster_${size}_$contentHash" } diff --git a/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/Extensions.kt b/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/Extensions.kt index 427e048..9bc7199 100644 --- a/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/Extensions.kt +++ b/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/Extensions.kt @@ -47,7 +47,7 @@ internal fun List.toJson(webCustomMarkerContent: Map * @return [JsonObject] containing marker ID, position, title, and metadata. */ internal fun Marker.toJson() = buildJsonObject { - put("id", id) + put("id", getId()) put("position", coordinates.toJson()) put("title", title) put("opacity", 1.0f) @@ -161,7 +161,7 @@ internal fun Color.toHex() = "#%06X".format(0xFFFFFF and toArgb()) * @return [JsonObject] with center, radius, and stroke/fill styles. */ internal fun Circle.toJson() = buildJsonObject { - put("id", id) + put("id", getId()) put("center", center.toJson()) put("radius", radius) @@ -183,7 +183,7 @@ internal fun Circle.toJson() = buildJsonObject { * @return [JsonObject] containing the list of paths and styling properties. */ internal fun Polygon.toJson() = buildJsonObject { - put("id", id) + put("id", getId()) put("paths", JsonArray(coordinates.map(Coordinates::toJson))) put("strokeWeight", lineWidth) @@ -203,7 +203,7 @@ internal fun Polygon.toJson() = buildJsonObject { * @return [JsonObject] containing the path coordinates and line styles. */ internal fun Polyline.toJson() = buildJsonObject { - put("id", id) + put("id", getId()) put("path", JsonArray(coordinates.map(Coordinates::toJson))) put("strokeWeight", width) diff --git a/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/MapEventHandlers.kt b/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/MapEventHandlers.kt index 5c17f12..edf13c1 100644 --- a/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/MapEventHandlers.kt +++ b/kmp-maps/core/src/jvmMain/kotlin/com/swmansion/kmpmaps/core/MapEventHandlers.kt @@ -4,6 +4,7 @@ import com.multiplatform.webview.jsbridge.IJsMessageHandler import com.multiplatform.webview.jsbridge.JsMessage import com.multiplatform.webview.jsbridge.WebViewJsBridge import com.multiplatform.webview.web.WebViewNavigator +import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json /** @@ -49,7 +50,7 @@ internal fun registerMapEvents( jsBridge.registerHandler("onMarkerClick") { params, _ -> val markerId = params - val clickedMarker = markers.find { marker -> marker.id == markerId } + val clickedMarker = markers.find { marker -> marker.getId() == markerId } clickedMarker?.let { onMarkerClick?.invoke(it) } } @@ -66,15 +67,15 @@ internal fun registerMapEvents( jsBridge.registerHandler("onMapLoaded") { _, _ -> onMapLoaded?.invoke() } jsBridge.registerHandler("onCircleClick") { id, _ -> - circles.find { it.id == id }?.let { onCircleClick?.invoke(it) } + circles.find { it.getId() == id }?.let { onCircleClick?.invoke(it) } } jsBridge.registerHandler("onPolygonClick") { id, _ -> - polygons.find { it.id == id }?.let { onPolygonClick?.invoke(it) } + polygons.find { it.getId() == id }?.let { onPolygonClick?.invoke(it) } } jsBridge.registerHandler("onPolylineClick") { id, _ -> - polylines.find { it.id == id }?.let { onPolylineClick?.invoke(it) } + polylines.find { it.getId() == id }?.let { onPolylineClick?.invoke(it) } } jsBridge.registerHandler("onClusterClick") { params, _ -> @@ -83,13 +84,14 @@ internal fun registerMapEvents( } jsBridge.registerHandler("renderCluster") { params, navigator -> - val cluster = Json.decodeFromString(params) + val clusterJS = Json.decodeFromString(params) + val cluster = clusterJS.toCluster() val html = clusterSettings.webClusterContent?.invoke(cluster) if (html != null) { val formattedHtml = html.trimIndent() val escapedHtmlJson = Json.encodeToString(formattedHtml) - navigator?.evaluateJavaScript("applyClusterHtml(${cluster.id}, '$escapedHtmlJson')") + navigator?.evaluateJavaScript("applyClusterHtml(${clusterJS.id}, '$escapedHtmlJson')") } } } @@ -116,3 +118,26 @@ private fun WebViewJsBridge.registerHandler( } ) } + +/** + * Internal Data Transfer Object (DTO) used for deserializing cluster data received from the + * JavaScript Google Maps bridge. + * + * This class mirrors the JavaScript cluster structure, including the [id] generated by the marker + * clusterer, which is required for further communication (e.g., custom rendering via + * [applyClusterHtml]). + */ +@Serializable +private data class ClusterJS( + val id: String, + val coordinates: Coordinates, + val size: Int, + val items: List, +) + +/** + * Converts a [ClusterJS] object to a [Cluster] object. + * + * @return A [Cluster] object containing the same data as the [ClusterJS] object. + */ +private fun ClusterJS.toCluster() = Cluster(coordinates = coordinates, size = size, items = items) diff --git a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Extensions.kt b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Extensions.kt index 70a93ad..bcbb556 100644 --- a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Extensions.kt +++ b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Extensions.kt @@ -29,6 +29,7 @@ import com.swmansion.kmpmaps.core.MapUISettings import com.swmansion.kmpmaps.core.Marker import com.swmansion.kmpmaps.core.Polygon import com.swmansion.kmpmaps.core.Polyline +import com.swmansion.kmpmaps.core.getId import com.swmansion.kmpmaps.core.toAppleMapsColor import kotlin.collections.set import kotlinx.cinterop.ExperimentalForeignApi @@ -71,7 +72,7 @@ internal fun updateGoogleMapsMarkers( ) if (marker.contentId != null && customMarkerContent.containsKey(marker.contentId)) { - val cachedImage = mapDelegate?.getCachedImage(marker.id) + val cachedImage = mapDelegate?.getCachedImage(marker.getId()) if (cachedImage != null) { gmsMarker.setIcon(cachedImage) diff --git a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Map.kt b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Map.kt index 965554f..d5d30fa 100644 --- a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Map.kt +++ b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/Map.kt @@ -35,6 +35,7 @@ import com.swmansion.kmpmaps.core.Marker import com.swmansion.kmpmaps.core.MarkerSnapshotter import com.swmansion.kmpmaps.core.Polygon import com.swmansion.kmpmaps.core.Polyline +import com.swmansion.kmpmaps.core.getId import com.swmansion.kmpmaps.core.toUIImage import com.swmansion.kmpmaps.googlemaps.GoogleMapsInitializer.ensureInitialized import kotlinx.cinterop.BetaInteropApi @@ -167,7 +168,7 @@ public actual fun Map( ) { val view = mapView ?: return@LaunchedEffect - val activeIds = allMarkers.map { it.id }.toSet() + val activeIds = allMarkers.map { it.getId() }.toSet() mapDelegate?.pruneCache(activeIds) val manager = clusterManager @@ -250,15 +251,17 @@ public actual fun Map( Box(modifier = Modifier.alpha(0f)) { allMarkers.forEach { marker -> - if (mapDelegate?.getCachedImage(marker.id) == null) { - key(marker.id) { + if (mapDelegate?.getCachedImage(marker.getId()) == null) { + key(marker.getId()) { MarkerSnapshotter( content = { val content = customMarkerContent[marker.contentId] if (content != null) content(marker) else DefaultPin(marker) }, onSnapshotReady = { bitmap -> - bitmap.toUIImage()?.let { mapDelegate?.onBitmapReady(marker.id, it) } + bitmap.toUIImage()?.let { + mapDelegate?.onBitmapReady(marker.getId(), it) + } }, ) } diff --git a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MapDelegate.kt b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MapDelegate.kt index e69cfef..b9d57d9 100644 --- a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MapDelegate.kt +++ b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MapDelegate.kt @@ -18,6 +18,7 @@ import com.swmansion.kmpmaps.core.Coordinates import com.swmansion.kmpmaps.core.Marker import com.swmansion.kmpmaps.core.Polygon import com.swmansion.kmpmaps.core.Polyline +import com.swmansion.kmpmaps.core.getId import kotlinx.cinterop.CValue import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.ObjCSignatureOverride @@ -162,7 +163,7 @@ internal class MapDelegate( imageCache[id] = image renderingQueue.remove(id) - val gmsMarker = markerMapping.entries.find { it.value.id == id }?.key + val gmsMarker = markerMapping.entries.find { it.value.getId() == id }?.key gmsMarker?.let { it.setIcon(image) it.setTracksViewChanges(false) diff --git a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MarkerClusterManagerDelegate.kt b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MarkerClusterManagerDelegate.kt index e82e6b4..7c38c0c 100644 --- a/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MarkerClusterManagerDelegate.kt +++ b/kmp-maps/google-maps/src/iosMain/kotlin/com/swmansion/kmpmaps/googlemaps/MarkerClusterManagerDelegate.kt @@ -18,6 +18,7 @@ import com.swmansion.kmpmaps.core.Coordinates import com.swmansion.kmpmaps.core.DefaultCluster import com.swmansion.kmpmaps.core.Marker import com.swmansion.kmpmaps.core.generateClusterId +import com.swmansion.kmpmaps.core.getId import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.useContents import platform.UIKit.UIImage @@ -38,14 +39,14 @@ internal class MarkerClusterManagerDelegate( when (userData) { is MarkerClusterItem -> { val marker = userData.marker - val cached = mapDelegate?.getCachedImage(marker.id) + val cached = mapDelegate?.getCachedImage(marker.getId()) if (cached != null) { willRenderMarker.setIcon(cached) } else { val content = customMarkerContent[marker.contentId] if (content != null) { - mapDelegate?.renderingQueue[marker.id] = { content(marker) } + mapDelegate?.renderingQueue[marker.getId()] = { content(marker) } willRenderMarker.setIcon(UIImage()) } } From 3fb187eea60ea8bd6b50b10e6a13706ffeaac4e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20G=C4=99siarz?= <126520293+arturgesiarz@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:09:17 +0100 Subject: [PATCH 2/4] Change getId functions --- .../com/swmansion/kmpmaps/core/MapTypes.kt | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt index 7bd1f55..fd4c5c7 100644 --- a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt +++ b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt @@ -105,10 +105,7 @@ public data class Marker( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Marker.getId(): String { - val result = arrayOf(coordinates, title, contentId).contentDeepHashCode() - return "marker_$result" -} +public fun Marker.getId() = "marker_${hashCode()}" /** * Represents a circle overlay on the map. @@ -133,10 +130,7 @@ public data class Circle( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Circle.getId(): String { - val result = arrayOf(center, radius, color, lineColor, lineWidth).contentDeepHashCode() - return "circle_$result" -} +public fun Circle.getId() = "circle_${hashCode()}" /** * Represents a polygon overlay on the map. @@ -159,10 +153,7 @@ public data class Polygon( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Polygon.getId(): String { - val result = arrayOf(coordinates, lineWidth, color, lineColor).contentDeepHashCode() - return "polygon_$result" -} +public fun Polygon.getId() = "polygon_${hashCode()}" /** * Represents a polyline overlay on the map. @@ -183,10 +174,7 @@ public data class Polyline( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Polyline.getId(): String { - val result = arrayOf(coordinates, width, lineColor).contentDeepHashCode() - return "polyline_$result" -} +public fun Polyline.getId() = "polyline_${hashCode()}" /** * Represents geographical coordinates (latitude and longitude). From 79d101d70b8ff3a2e7400908de52d3e627b3503b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20G=C4=99siarz?= <126520293+arturgesiarz@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:24:04 +0100 Subject: [PATCH 3/4] Add types --- .../kotlin/com/swmansion/kmpmaps/core/MapTypes.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt index fd4c5c7..b8edb99 100644 --- a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt +++ b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt @@ -105,7 +105,7 @@ public data class Marker( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Marker.getId() = "marker_${hashCode()}" +public fun Marker.getId(): String = "marker_${hashCode()}" /** * Represents a circle overlay on the map. @@ -130,7 +130,7 @@ public data class Circle( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Circle.getId() = "circle_${hashCode()}" +public fun Circle.getId(): String = "circle_${hashCode()}" /** * Represents a polygon overlay on the map. @@ -153,7 +153,7 @@ public data class Polygon( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Polygon.getId() = "polygon_${hashCode()}" +public fun Polygon.getId(): String = "polygon_${hashCode()}" /** * Represents a polyline overlay on the map. @@ -174,7 +174,7 @@ public data class Polyline( * @return A unique identifier as a string */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public fun Polyline.getId() = "polyline_${hashCode()}" +public fun Polyline.getId(): String = "polyline_${hashCode()}" /** * Represents geographical coordinates (latitude and longitude). From b44b24bd9e6e94d8884fc694bf7ba21090232073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20G=C4=99siarz?= <126520293+arturgesiarz@users.noreply.github.com> Date: Fri, 6 Feb 2026 15:44:19 +0100 Subject: [PATCH 4/4] Delete comments and add suppress --- .../com/swmansion/kmpmaps/core/MapTypes.kt | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt index b8edb99..c377213 100644 --- a/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt +++ b/kmp-maps/core/src/commonMain/kotlin/com/swmansion/kmpmaps/core/MapTypes.kt @@ -99,11 +99,7 @@ public data class Marker( val contentId: String? = null, ) -/** - * Generates a unique identifier for a marker based on its properties. - * - * @return A unique identifier as a string - */ +/** @suppress */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun Marker.getId(): String = "marker_${hashCode()}" @@ -124,11 +120,7 @@ public data class Circle( val lineWidth: Float? = null, ) -/** - * Generates a unique identifier for a circle based on its properties. - * - * @return A unique identifier as a string - */ +/** @suppress */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun Circle.getId(): String = "circle_${hashCode()}" @@ -147,11 +139,7 @@ public data class Polygon( val lineColor: Color? = null, ) -/** - * Generates a unique identifier for a polygon based on its properties. - * - * @return A unique identifier as a string - */ +/** @suppress */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun Polygon.getId(): String = "polygon_${hashCode()}" @@ -168,11 +156,7 @@ public data class Polyline( val lineColor: Color? = null, ) -/** - * Generates a unique identifier for a polyline based on its properties. - * - * @return A unique identifier as a string - */ +/** @suppress */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun Polyline.getId(): String = "polyline_${hashCode()}"