Skip to content

Commit de816fd

Browse files
committed
Update
1 parent 5091311 commit de816fd

File tree

16 files changed

+73
-368
lines changed

16 files changed

+73
-368
lines changed

sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,6 @@ class SentryAndroidOptionsWrapper(private val androidOptions: SentryAndroidOptio
7373
override val sessionReplay: AndroidSentryReplayOptions
7474
get() = androidOptions.sessionReplay
7575

76-
override val sendDefaultPii: Boolean
77-
get() = androidOptions.isSendDefaultPii
78-
7976
override fun applyFromOptions(options: SentryOptions) {
8077
options.toAndroidSentryOptionsCallback().invoke(androidOptions)
8178
}

sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/SentryEvent.apple.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public actual class SentryEvent actual constructor() : SentryBaseEvent() {
2525

2626
public constructor(cocoaSentryEvent: CocoaSentryEvent) : this() {
2727
eventId = SentryId(cocoaSentryEvent.eventId.toString())
28-
level = cocoaSentryEvent.level.toKmpSentryLevel()
28+
level = cocoaSentryEvent.level?.toKmpSentryLevel()
2929
message = cocoaSentryEvent.message?.toKmpMessage()
3030
logger = cocoaSentryEvent.logger
3131
release = cocoaSentryEvent.releaseName

sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryEventExtensions.apple.kt

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,25 @@ package io.sentry.kotlin.multiplatform.extensions
33
import cocoapods.Sentry.SentryId
44
import io.sentry.kotlin.multiplatform.CocoaSentryEvent
55
import io.sentry.kotlin.multiplatform.SentryEvent
6-
import io.sentry.kotlin.multiplatform.util.applyIfChanged
76

8-
/**
9-
* Syncs updated fields from a KMP [SentryEvent] to this [CocoaSentryEvent].
10-
*
11-
* Only the properties modified (e.g., in beforeSend or event processors) are copied.
12-
*
13-
* @param beforeKmpEvent The KMP [SentryEvent] before the changes were applied.
14-
* @param afterKmpEvent The KMP [SentryEvent] after the changes were applied.
15-
* @return The modified [CocoaSentryEvent].
16-
*/
17-
internal fun CocoaSentryEvent.updateFromKmpEventChanges(
18-
beforeKmpEvent: SentryEvent,
19-
afterKmpEvent: SentryEvent
20-
): CocoaSentryEvent {
21-
applyIfChanged(beforeKmpEvent.release, afterKmpEvent.release) { releaseName = it }
22-
applyIfChanged(beforeKmpEvent.dist, afterKmpEvent.dist) { dist = it }
23-
applyIfChanged(beforeKmpEvent.environment, afterKmpEvent.environment) { environment = it }
24-
applyIfChanged(beforeKmpEvent.serverName, afterKmpEvent.serverName) { serverName = it }
25-
applyIfChanged(beforeKmpEvent.platform, afterKmpEvent.platform) {
26-
if (it != null) {
27-
platform = it
28-
}
7+
internal fun CocoaSentryEvent.applyKmpEvent(kmpEvent: SentryEvent): CocoaSentryEvent {
8+
// Native SDKs may have a default behaviour if no release is set.
9+
// Setting a release (even if it's null) will remove this behaviour,
10+
// so we have to check if the values differ first before setting.
11+
if (releaseName != kmpEvent.release) {
12+
releaseName = kmpEvent.release
2913
}
30-
applyIfChanged(beforeKmpEvent.logger, afterKmpEvent.logger) { logger = it }
31-
applyIfChanged(beforeKmpEvent.level, afterKmpEvent.level) {
32-
if (it != null) level = it.toCocoaSentryLevel()
33-
}
34-
applyIfChanged(beforeKmpEvent.message, afterKmpEvent.message) { message = it?.toCocoaMessage() }
35-
applyIfChanged(beforeKmpEvent.fingerprint, afterKmpEvent.fingerprint) { fingerprint = it }
36-
applyIfChanged(beforeKmpEvent.user, afterKmpEvent.user) { user = it?.toCocoaUser() }
37-
applyIfChanged(beforeKmpEvent.breadcrumbs, afterKmpEvent.breadcrumbs) {
38-
breadcrumbs = it.map { it.toCocoaBreadcrumb() }.toMutableList()
39-
}
40-
applyIfChanged(beforeKmpEvent.eventId, afterKmpEvent.eventId) {
41-
eventId = SentryId(it.toString())
42-
}
43-
applyIfChanged(beforeKmpEvent.tags, afterKmpEvent.tags) { tags = it.toMutableMap() }
14+
kmpEvent.level?.let { level = it.toCocoaSentryLevel() }
15+
kmpEvent.platform?.let { platform = it }
16+
message = kmpEvent.message?.toCocoaMessage()
17+
logger = kmpEvent.logger
18+
fingerprint = kmpEvent.fingerprint
19+
environment = kmpEvent.environment
20+
user = kmpEvent.user?.toCocoaUser()
21+
serverName = kmpEvent.serverName
22+
dist = kmpEvent.dist
23+
breadcrumbs = kmpEvent.breadcrumbs.map { it.toCocoaBreadcrumb() }.toMutableList()
24+
tags = kmpEvent.tags.toMutableMap()
25+
eventId = SentryId(kmpEvent.eventId.toString())
4426
return this
4527
}

sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(kmpOptions: SentryOptions)
2323
kmpOptions.environment?.let {
2424
cocoaOptions.environment = it
2525
}
26-
kmpOptions.release?.let {
27-
cocoaOptions.releaseName = it
28-
}
29-
cocoaOptions.sendDefaultPii = kmpOptions.sendDefaultPii
26+
cocoaOptions.releaseName = kmpOptions.release
3027
cocoaOptions.debug = kmpOptions.debug
3128
cocoaOptions.sessionTrackingIntervalMillis = kmpOptions.sessionTrackingIntervalMillis.convert()
3229
cocoaOptions.enableAutoSessionTracking = kmpOptions.enableAutoSessionTracking
@@ -56,14 +53,9 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(kmpOptions: SentryOptions)
5653
if (kmpOptions.beforeSend == null) {
5754
event
5855
} else {
59-
event?.let { cocoaEvent ->
60-
val beforeKmpEvent = SentryEvent(cocoaEvent)
61-
val beforeKmpEventCopy = SentryEvent(cocoaEvent)
62-
kmpOptions.beforeSend
63-
?.invoke(beforeKmpEventCopy)
64-
?.let { afterKmpEvent ->
65-
cocoaEvent.updateFromKmpEventChanges(beforeKmpEvent, afterKmpEvent)
66-
}
56+
event?.let { SentryEvent(it) }?.let { unwrappedEvent ->
57+
val result = kmpOptions.beforeSend?.invoke(unwrappedEvent)
58+
result?.let { event.applyKmpEvent(it) }
6759
}
6860
}
6961
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.sentry.kotlin.multiplatform
2+
3+
import io.sentry.kotlin.multiplatform.extensions.applyKmpEvent
4+
import kotlin.test.Test
5+
import kotlin.test.assertFalse
6+
7+
class ApplyKmpEventTest {
8+
@Test
9+
fun `native release is not set if kmp release has same value`() {
10+
val nativeEvent = FakeSentryEvent()
11+
val kmpEvent = SentryEvent()
12+
13+
nativeEvent.applyKmpEvent(kmpEvent)
14+
15+
assertFalse(nativeEvent.wasReleaseSet)
16+
}
17+
}
18+
19+
// init with a SentryLevel as a workaround for:
20+
// Unable to call non-designated initializer as super constructor
21+
private class FakeSentryEvent : CocoaSentryEvent(Internal.Sentry.kSentryLevelFatal) {
22+
var wasReleaseSet = false
23+
24+
override fun setReleaseName(releaseName: String?) {
25+
super.setReleaseName(releaseName)
26+
wasReleaseSet = true
27+
}
28+
}

sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ open class SentryAppleOptionsWrapper(private val cocoaOptions: CocoaSentryOption
5454
override val diagnosticLevel: SentryLevel
5555
get() = cocoaOptions.diagnosticLevel.toKmpSentryLevel()!!
5656

57-
override val sendDefaultPii: Boolean
58-
get() = cocoaOptions.sendDefaultPii
59-
6057
override fun applyFromOptions(options: SentryOptions) {
6158
options.toCocoaOptionsConfiguration().invoke(cocoaOptions)
6259
}

sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/UpdateFromKmpEventChangesTest.apple.kt

Lines changed: 0 additions & 122 deletions
This file was deleted.

sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryEventExtensions.jvm.kt

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,26 @@ package io.sentry.kotlin.multiplatform.extensions
33
import io.sentry.kotlin.multiplatform.JvmSentryEvent
44
import io.sentry.kotlin.multiplatform.JvmSentryId
55
import io.sentry.kotlin.multiplatform.SentryEvent
6-
import io.sentry.kotlin.multiplatform.util.applyIfChanged
76

8-
/**
9-
* Syncs updated fields from a KMP [SentryEvent] to this [JvmSentryEvent].
10-
*
11-
* Only the properties modified (e.g., in beforeSend or event processors) are copied.
12-
*
13-
* @param beforeKmpEvent The KMP [SentryEvent] before the changes were applied.
14-
* @param afterKmpEvent The KMP [SentryEvent] after the changes were applied.
15-
* @return The modified [JvmSentryEvent].
16-
*/
17-
internal fun JvmSentryEvent.updateFromKmpEventChanges(
18-
beforeKmpEvent: SentryEvent,
19-
afterKmpEvent: SentryEvent
20-
): JvmSentryEvent {
21-
applyIfChanged(beforeKmpEvent.release, afterKmpEvent.release) { release = it }
22-
applyIfChanged(beforeKmpEvent.dist, afterKmpEvent.dist) { dist = it }
23-
applyIfChanged(beforeKmpEvent.environment, afterKmpEvent.environment) { environment = it }
24-
applyIfChanged(beforeKmpEvent.serverName, afterKmpEvent.serverName) { serverName = it }
25-
applyIfChanged(beforeKmpEvent.platform, afterKmpEvent.platform) { platform = it }
26-
applyIfChanged(beforeKmpEvent.logger, afterKmpEvent.logger) { logger = it }
27-
applyIfChanged(beforeKmpEvent.level, afterKmpEvent.level) { level = it?.toJvmSentryLevel() }
28-
applyIfChanged(beforeKmpEvent.message, afterKmpEvent.message) { message = it?.toJvmMessage() }
29-
applyIfChanged(beforeKmpEvent.fingerprint, afterKmpEvent.fingerprint) { fingerprints = it }
30-
applyIfChanged(beforeKmpEvent.user, afterKmpEvent.user) { user = it?.toJvmUser() }
31-
applyIfChanged(beforeKmpEvent.breadcrumbs, afterKmpEvent.breadcrumbs) { breadcrumbs = it.map { it.toJvmBreadcrumb() } }
32-
applyIfChanged(beforeKmpEvent.eventId, afterKmpEvent.eventId) { eventId = JvmSentryId(it.toString()) }
33-
applyIfChanged(beforeKmpEvent.tags, afterKmpEvent.tags) { tags = it }
7+
// TODO(buenaflor): properly test this once we introduce a mocking framework
8+
internal fun JvmSentryEvent.applyKmpEvent(kmpEvent: SentryEvent): JvmSentryEvent {
9+
// Native SDKs may have a default behaviour if no release is set.
10+
// Setting a release (even if it's null) will remove this behaviour,
11+
// so we have to check if the values differ first before setting.
12+
if (release != kmpEvent.release) {
13+
release = kmpEvent.release
14+
}
15+
level = kmpEvent.level?.toJvmSentryLevel()
16+
message = kmpEvent.message?.toJvmMessage()
17+
logger = kmpEvent.logger
18+
fingerprints = kmpEvent.fingerprint
19+
environment = kmpEvent.environment
20+
platform = kmpEvent.platform
21+
user = kmpEvent.user?.toJvmUser()
22+
serverName = kmpEvent.serverName
23+
dist = kmpEvent.dist
24+
breadcrumbs = kmpEvent.breadcrumbs?.map { it.toJvmBreadcrumb() }
25+
eventId = JvmSentryId(kmpEvent.eventId.toString())
26+
tags = kmpEvent.tags
3427
return this
3528
}

sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(kmpOptions: SentryOptions) {
2323
jvmOptions.isAttachStacktrace = kmpOptions.attachStackTrace
2424
jvmOptions.dist = kmpOptions.dist
2525
jvmOptions.environment = kmpOptions.environment
26-
jvmOptions.isSendDefaultPii = kmpOptions.sendDefaultPii
2726
jvmOptions.release = kmpOptions.release
2827
jvmOptions.isDebug = kmpOptions.debug
2928
jvmOptions.sessionTrackingIntervalMillis = kmpOptions.sessionTrackingIntervalMillis
@@ -44,10 +43,8 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(kmpOptions: SentryOptions) {
4443
if (kmpOptions.beforeSend == null) {
4544
jvmSentryEvent
4645
} else {
47-
val beforeKmpEvent = SentryEvent(jvmSentryEvent)
48-
val beforeKmpEventCopy = SentryEvent(jvmSentryEvent)
49-
kmpOptions.beforeSend?.invoke(beforeKmpEventCopy)?.let { afterKmpEvent ->
50-
jvmSentryEvent.updateFromKmpEventChanges(beforeKmpEvent, afterKmpEvent)
46+
kmpOptions.beforeSend?.invoke(SentryEvent(jvmSentryEvent))?.let {
47+
jvmSentryEvent.applyKmpEvent(it)
5148
}
5249
}
5350
}

0 commit comments

Comments
 (0)