diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 48483f7438..04eef4fedf 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -1,5 +1,6 @@ plugins { id "java-gradle-plugin" + id "groovy-gradle-plugin" id "java" id "groovy" } @@ -76,6 +77,7 @@ dependencies { implementation libs.com.github.spullara.mustache.java.compiler implementation libs.io.spring.javaformat.spring.javaformat.gradle.plugin implementation libs.io.spring.nohttp.nohttp.gradle + implementation libs.org.jetbrains.kotlin.kotlin.gradle.plugin implementation (libs.net.sourceforge.htmlunit) { exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-client' } diff --git a/buildSrc/src/main/groovy/security-kotlin.gradle b/buildSrc/src/main/groovy/security-kotlin.gradle new file mode 100644 index 0000000000..5b1f3e199a --- /dev/null +++ b/buildSrc/src/main/groovy/security-kotlin.gradle @@ -0,0 +1,17 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'kotlin' +} + +project.plugins.withId("org.jetbrains.kotlin.jvm", (kotlinProject) -> { + project.tasks.withType(KotlinCompile).configureEach { + kotlinOptions { + languageVersion = '2.2' + apiVersion = '2.2' + freeCompilerArgs = ["-Xjsr305=strict", "-Xsuppress-version-warnings"] + jvmTarget = '17' + + } + } +}) diff --git a/config/spring-security-config.gradle b/config/spring-security-config.gradle index 322f77af47..6eeda65d66 100644 --- a/config/spring-security-config.gradle +++ b/config/spring-security-config.gradle @@ -4,7 +4,7 @@ import trang.RncToXsd apply plugin: 'io.spring.convention.spring-module' apply plugin: 'trang' -apply plugin: 'kotlin' +apply plugin: 'security-kotlin' configurations { opensaml5 { @@ -153,15 +153,6 @@ tasks.named('sourcesJar', Jar).configure { } } -tasks.withType(KotlinCompile).configureEach { - kotlinOptions { - languageVersion = "1.7" - apiVersion = "1.7" - freeCompilerArgs = ["-Xjsr305=strict", "-Xsuppress-version-warnings"] - jvmTarget = "17" - } -} - configure(project.tasks.withType(Test)) { doFirst { systemProperties['springSecurityVersion'] = version diff --git a/config/src/test/kotlin/org/springframework/security/config/web/server/ServerX509DslTests.kt b/config/src/test/kotlin/org/springframework/security/config/web/server/ServerX509DslTests.kt index 8685fc22fe..e82ec296e6 100644 --- a/config/src/test/kotlin/org/springframework/security/config/web/server/ServerX509DslTests.kt +++ b/config/src/test/kotlin/org/springframework/security/config/web/server/ServerX509DslTests.kt @@ -205,7 +205,7 @@ class ServerX509DslTests { @Nullable httpHandlerBuilder: WebHttpHandlerBuilder?, @Nullable connector: ClientHttpConnector?) { val filter = SetSslInfoWebFilter(certificate) - httpHandlerBuilder!!.filters { filters: MutableList -> filters.add(0, filter) } + httpHandlerBuilder!!.filters { filters: MutableList -> filters.add(0, filter) } } } diff --git a/core/spring-security-core.gradle b/core/spring-security-core.gradle index 358ad5775b..a81cc81d60 100644 --- a/core/spring-security-core.gradle +++ b/core/spring-security-core.gradle @@ -1,9 +1,7 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - import java.util.concurrent.Callable apply plugin: 'io.spring.convention.spring-module' -apply plugin: 'kotlin' +apply plugin: 'security-kotlin' dependencies { management platform(project(":spring-security-dependencies")) @@ -66,12 +64,3 @@ Callable springVersion() { return (Callable) { project.configurations.compileClasspath.resolvedConfiguration.resolvedArtifacts .find { it.name == 'spring-core' }.moduleVersion.id.version } } - -tasks.withType(KotlinCompile).configureEach { - kotlinOptions { - languageVersion = "1.7" - apiVersion = "1.7" - freeCompilerArgs = ["-Xjsr305=strict", "-Xsuppress-version-warnings"] - jvmTarget = "17" - } -} diff --git a/docs/spring-security-docs.gradle b/docs/spring-security-docs.gradle index 23e8d0db91..75ed6b018a 100644 --- a/docs/spring-security-docs.gradle +++ b/docs/spring-security-docs.gradle @@ -1,10 +1,8 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { id 'org.antora' version '1.0.0' id 'io.spring.antora.generate-antora-yml' version '0.0.1' id 'io.spring.convention.repository' - id 'kotlin' + id 'security-kotlin' } apply plugin: 'io.spring.convention.docs' @@ -100,12 +98,3 @@ def resolvedVersions(Configuration configuration) { test { useJUnitPlatform() } - -tasks.withType(KotlinCompile).configureEach { - kotlinOptions { - languageVersion = "1.7" - apiVersion = "1.7" - freeCompilerArgs = ["-Xjsr305=strict", "-Xsuppress-version-warnings"] - jvmTarget = "17" - } -} diff --git a/docs/src/test/kotlin/org/springframework/security/kt/docs/features/integrations/rest/configurationwebclient/ServerWebClientHttpInterfaceIntegrationConfiguration.kt b/docs/src/test/kotlin/org/springframework/security/kt/docs/features/integrations/rest/configurationwebclient/ServerWebClientHttpInterfaceIntegrationConfiguration.kt index 89fa67348e..dd9472dab5 100644 --- a/docs/src/test/kotlin/org/springframework/security/kt/docs/features/integrations/rest/configurationwebclient/ServerWebClientHttpInterfaceIntegrationConfiguration.kt +++ b/docs/src/test/kotlin/org/springframework/security/kt/docs/features/integrations/rest/configurationwebclient/ServerWebClientHttpInterfaceIntegrationConfiguration.kt @@ -54,11 +54,11 @@ class ServerWebClientHttpInterfaceIntegrationConfiguration { @Bean fun groupConfigurer(server: MockWebServer): WebClientHttpServiceGroupConfigurer { - return WebClientHttpServiceGroupConfigurer { groups: HttpServiceGroupConfigurer.Groups? -> + return WebClientHttpServiceGroupConfigurer { groups: HttpServiceGroupConfigurer.Groups -> val baseUrl = server.url("").toString() groups!! - .forEachClient(ClientCallback { group: HttpServiceGroup?, builder: WebClient.Builder? -> - builder!! + .forEachClient(ClientCallback { group: HttpServiceGroup, builder: WebClient.Builder -> + builder .baseUrl(baseUrl) .defaultHeader("Accept", "application/vnd.github.v3+json") }) diff --git a/docs/src/test/kotlin/org/springframework/security/kt/docs/reactive/authentication/reactivex509/X509ConfigurationTests.kt b/docs/src/test/kotlin/org/springframework/security/kt/docs/reactive/authentication/reactivex509/X509ConfigurationTests.kt index 4802660f06..3c8f779f2f 100644 --- a/docs/src/test/kotlin/org/springframework/security/kt/docs/reactive/authentication/reactivex509/X509ConfigurationTests.kt +++ b/docs/src/test/kotlin/org/springframework/security/kt/docs/reactive/authentication/reactivex509/X509ConfigurationTests.kt @@ -28,6 +28,7 @@ import org.springframework.security.test.web.reactive.server.WebTestClientBuilde import org.springframework.security.web.authentication.preauth.x509.X509TestUtils import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.test.web.reactive.server.WebTestClientConfigurer +import org.springframework.util.Assert import org.springframework.web.server.ServerWebExchange import org.springframework.web.server.WebFilter import org.springframework.web.server.WebFilterChain @@ -108,18 +109,19 @@ class X509ConfigurationTests { companion object { private fun x509(certificate: X509Certificate): WebTestClientConfigurer { - return WebTestClientConfigurer { builder: WebTestClient.Builder, httpHandlerBuilder: WebHttpHandlerBuilder, connector: ClientHttpConnector? -> + return WebTestClientConfigurer { builder: WebTestClient.Builder, httpHandlerBuilder: WebHttpHandlerBuilder?, connector: ClientHttpConnector? -> val sslInfo: SslInfo = object : SslInfo { override fun getSessionId(): String { return "sessionId" } - override fun getPeerCertificates(): Array { + override fun getPeerCertificates(): Array { return arrayOf(certificate) } } - httpHandlerBuilder.filters(Consumer { filters: MutableList -> + Assert.notNull(httpHandlerBuilder, "httpHandlerBuilder should not be null") + httpHandlerBuilder!!.filters(Consumer { filters: MutableList -> filters.add( 0, SslInfoOverrideWebFilter(sslInfo) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index acd27bc3f4..ea4397a39b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ org-apache-maven-resolver = "1.9.23" org-aspectj = "1.9.24" org-bouncycastle = "1.80" org-eclipse-jetty = "11.0.25" -org-jetbrains-kotlin = "1.9.25" +org-jetbrains-kotlin = "2.2.0" org-jetbrains-kotlinx = "1.10.2" org-mockito = "5.17.0" org-opensaml = "4.3.2" @@ -67,7 +67,7 @@ org-hamcrest = "org.hamcrest:hamcrest:2.2" org-hibernate-orm-hibernate-core = "org.hibernate.orm:hibernate-core:7.0.1.Final" org-hsqldb = "org.hsqldb:hsqldb:2.7.4" org-jetbrains-kotlin-kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "org-jetbrains-kotlin" } -org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.25" +org-jetbrains-kotlin-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.0" org-jetbrains-kotlinx-kotlinx-coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version.ref = "org-jetbrains-kotlinx" } org-junit-junit-bom = "org.junit:junit-bom:5.12.2" org-mockito-mockito-bom = { module = "org.mockito:mockito-bom", version.ref = "org-mockito" }