Skip to content

Third attempt at fixing Kotlin 2.2 compat #4613

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ feign = "11.6"
jacoco = "0.8.7"
jackson = "2.18.3"
jetbrainsCompose = "1.6.11"
kotlin = "2.2.0"
kotlin = "1.9.24"
kotlinSpring7 = "2.2.0"
kotlin-compatible-version = "1.9"
ktorClient = "3.0.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import io.gitlab.arturbosch.detekt.Detekt
plugins {
id("com.android.application")
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
// alias(libs.plugins.kotlin.compose)
}

android {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import net.ltgt.gradle.errorprone.errorprone
plugins {
id("com.android.application")
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
// alias(libs.plugins.kotlin.compose)
alias(libs.plugins.errorprone)
alias(libs.plugins.gradle.versions)
alias(libs.plugins.detekt)
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-replay/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
plugins {
id("com.android.library")
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
// alias(libs.plugins.kotlin.compose)
jacoco
alias(libs.plugins.jacoco.android)
alias(libs.plugins.gradle.versions)
Expand Down
4 changes: 2 additions & 2 deletions sentry-compose/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ kotlin {

androidTarget {
publishLibraryVariants("release")
compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget("1.8")) }
compilations.all { kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() }
}
jvm("desktop") {
compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget("1.8")) }
compilations.all { kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() }
}

sourceSets.all {
Expand Down
2 changes: 1 addition & 1 deletion sentry-samples/sentry-samples-android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.gradle.internal.extensions.stdlib.capitalized
plugins {
id("com.android.application")
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
// alias(libs.plugins.kotlin.compose)
}

android {
Expand Down
7 changes: 6 additions & 1 deletion sentry-samples/sentry-samples-spring-7/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,12 @@ tasks.withType<Test>().configureEach { useJUnitPlatform() }

tasks.withType<KotlinCompile>().configureEach {
kotlin {
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
explicitApi()
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check")
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ public class SecurityConfiguration {
@SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"})
@Bean
public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception {
http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic();

return http.build();
return http.csrf((csrf) -> csrf.disable())
.authorizeHttpRequests((r) -> r.anyRequest().authenticated())
.httpBasic((h) -> {})
.build();
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,14 @@ configure<JavaPluginExtension> {
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
kotlin {
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
explicitApi()
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check")
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
}
}

Expand All @@ -42,6 +46,7 @@ dependencies {
implementation(libs.springboot4.starter.web)
implementation(libs.springboot4.starter.webflux)
implementation(libs.springboot4.starter.websocket)
implementation(libs.springboot4.starter.restclient)
implementation(Config.Libs.aspectj)
implementation(Config.Libs.kotlinReflect)
implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ public class SecurityConfiguration {
@SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"})
@Bean
public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception {
http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic();

return http.build();
return http.csrf((csrf) -> csrf.disable())
.authorizeHttpRequests((r) -> r.anyRequest().authenticated())
.httpBasic((h) -> {})
.build();
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.quartz.SimpleTrigger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.boot.restclient.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,15 @@ configure<JavaPluginExtension> {
targetCompatibility = JavaVersion.VERSION_17
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}

tasks.withType<KotlinCompile>().configureEach {
kotlin {
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
explicitApi()
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check")
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
}
}

Expand All @@ -46,6 +47,7 @@ dependencies {
implementation(libs.springboot4.starter.web)
implementation(libs.springboot4.starter.webflux)
implementation(libs.springboot4.starter.websocket)
implementation(libs.springboot4.starter.restclient)
implementation(Config.Libs.aspectj)
implementation(Config.Libs.kotlinReflect)
implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ public class SecurityConfiguration {
@SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"})
@Bean
public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception {
http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic();

return http.build();
return http.csrf((csrf) -> csrf.disable())
.authorizeHttpRequests((r) -> r.anyRequest().authenticated())
.httpBasic((h) -> {})
.build();
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.quartz.SimpleTrigger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.boot.restclient.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,13 @@ configure<SourceSetContainer> { test { java.srcDir("src/test/java") } }

tasks.withType<KotlinCompile>().configureEach {
kotlin {
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
explicitApi()
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check")
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
}
}

Expand Down
12 changes: 7 additions & 5 deletions sentry-samples/sentry-samples-spring-boot-4/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ configure<JavaPluginExtension> {
targetCompatibility = JavaVersion.VERSION_17
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}

tasks.withType<KotlinCompile>().configureEach {
kotlin {
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
explicitApi()
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check")
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
}
}

Expand All @@ -45,6 +46,7 @@ dependencies {
implementation(libs.springboot4.starter.web)
implementation(libs.springboot4.starter.webflux)
implementation(libs.springboot4.starter.websocket)
implementation(libs.springboot4.starter.restclient)
implementation(Config.Libs.aspectj)
implementation(Config.Libs.kotlinReflect)
implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ public class SecurityConfiguration {
@SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"})
@Bean
public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception {
http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic();

return http.build();
return http.csrf((csrf) -> csrf.disable())
.authorizeHttpRequests((r) -> r.anyRequest().authenticated())
.httpBasic((h) -> {})
.build();
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import org.quartz.SimpleTrigger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.boot.restclient.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ fun toRequestUrl(uri: URI): StringBuffer? {
url.append(':').append(port)
}

if (uri?.isNotBlank()) {
if (uri.isNotBlank()) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Null URI Handling Error

A NullPointerException can occur because the null-safe call uri?.isNotBlank() was changed to uri.isNotBlank(). The uri variable is assigned from URI.rawPath, which can return null when the URI has no path component, removing the necessary null check.

Fix in Cursor Fix in Web

url.append(uri)
}
return url
Expand Down
10 changes: 6 additions & 4 deletions sentry-spring-7/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ dependencies {
// tests
testImplementation(projects.sentryTestSupport)
testImplementation(projects.sentryGraphql)
testImplementation(kotlin(Config.kotlinStdLib, "2.2.0"))
testImplementation(kotlin(Config.kotlinStdLib))
testImplementation(libs.awaitility.kotlin.spring7)
testImplementation(libs.context.propagation)
testImplementation(libs.graphql.java24)
testImplementation(kotlin(Config.kotlinTestJunit, "2.2.0"))
testImplementation(libs.kotlin.test.junit)
testImplementation(libs.mockito.kotlin.spring7)
testImplementation(libs.mockito.inline)
testImplementation(libs.springboot4.starter.aop)
Expand All @@ -70,6 +70,8 @@ dependencies {
testImplementation(libs.springboot4.starter.test)
testImplementation(libs.springboot4.starter.web)
testImplementation(libs.springboot4.starter.webflux)
testImplementation(libs.springboot4.starter.restclient)
testImplementation(libs.springboot4.starter.webclient)
testImplementation(projects.sentryReactor)
}

Expand Down Expand Up @@ -129,8 +131,8 @@ tasks.jar {
kotlin {
explicitApi()
compilerOptions {
// skip metadata version check, as androidx.sqlite:sqlite is compiled against a newer version of
// Kotlin
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
freeCompilerArgs.add("-Xskip-metadata-version-check")
}
}
12 changes: 7 additions & 5 deletions sentry-spring-boot-4/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ plugins {
id("io.sentry.javadoc")
// alias(libs.plugins.kotlin.jvm)
jacoco
alias(libs.plugins.kotlin.jvm.spring7)
alias(libs.plugins.kotlin.spring7)
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlin.spring)
alias(libs.plugins.errorprone)
alias(libs.plugins.gradle.versions)
alias(libs.plugins.buildconfig)
Expand All @@ -23,7 +23,7 @@ configure<JavaPluginExtension> {
tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
languageVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_1)
languageVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9)
freeCompilerArgs.add("-Xjsr305=strict")
}
}
Expand Down Expand Up @@ -94,6 +94,8 @@ dependencies {
testImplementation(libs.springboot4.starter.test)
testImplementation(libs.springboot4.starter.web)
testImplementation(libs.springboot4.starter.webflux)
testImplementation(libs.springboot4.starter.restclient)
testImplementation(libs.springboot4.starter.webclient)
}

configure<SourceSetContainer> { test { java.srcDir("src/test/java") } }
Expand Down Expand Up @@ -152,8 +154,8 @@ tasks.jar {
kotlin {
explicitApi()
compilerOptions {
// skip metadata version check, as androidx.sqlite:sqlite is compiled against a newer version of
// Kotlin
// skip metadata version check, as Spring 7 / Spring Boot 4 is
// compiled against a newer version of Kotlin
freeCompilerArgs.add("-Xskip-metadata-version-check")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import io.sentry.opentelemetry.agent.AgentMarker
import io.sentry.protocol.SentryTransaction
import io.sentry.protocol.User
import io.sentry.quartz.SentryJobListener
import io.sentry.spring.boot4.BuildConfig
import io.sentry.spring.jakarta.ContextTagsEventProcessor
import io.sentry.spring.jakarta.HttpServletRequestSentryUserProvider
import io.sentry.spring.jakarta.SentryExceptionResolver
Expand Down Expand Up @@ -58,15 +59,15 @@ import org.quartz.core.QuartzScheduler
import org.slf4j.MDC
import org.springframework.aop.support.NameMatchMethodPointcut
import org.springframework.boot.autoconfigure.AutoConfigurations
import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration
import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
import org.springframework.boot.context.annotation.UserConfigurations
import org.springframework.boot.info.GitProperties
import org.springframework.boot.quartz.autoconfigure.QuartzAutoConfiguration
import org.springframework.boot.quartz.autoconfigure.SchedulerFactoryBeanCustomizer
import org.springframework.boot.test.context.FilteredClassLoader
import org.springframework.boot.test.context.assertj.ApplicationContextAssert
import org.springframework.boot.test.context.runner.WebApplicationContextRunner
import org.springframework.boot.web.servlet.FilterRegistrationBean
import org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration
import org.springframework.context.ApplicationContext
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
Expand Down Expand Up @@ -317,7 +318,7 @@ class SentryAutoConfigurationTest {
assertThat(event.sdk).isNotNull
val sdk = event.sdk!!
assertThat(sdk.version).isEqualTo(BuildConfig.VERSION_NAME)
assertThat(sdk.name).isEqualTo(BuildConfig.SENTRY_SPRING_BOOT_JAKARTA_SDK_NAME)
assertThat(sdk.name).isEqualTo(BuildConfig.SENTRY_SPRING_BOOT_4_SDK_NAME)
assertThat(sdk.packageSet).anyMatch { pkg ->
pkg.name == "maven:io.sentry:sentry-spring-boot-starter-jakarta" &&
pkg.version == BuildConfig.VERSION_NAME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import org.mockito.kotlin.doAnswer
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import org.springframework.boot.web.client.RestTemplateBuilder
import org.springframework.boot.restclient.RestTemplateBuilder
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
Expand All @@ -43,8 +43,8 @@ class SentrySpanRestTemplateCustomizerTest {
val scopes = mock<IScopes>()
val restTemplate =
RestTemplateBuilder()
.setConnectTimeout(Duration.ofSeconds(2))
.setReadTimeout(Duration.ofSeconds(2))
.connectTimeout(Duration.ofSeconds(2))
.readTimeout(Duration.ofSeconds(2))
.build()
var mockServer = MockWebServer()
val transaction: SentryTracer
Expand Down
Loading
Loading