From 18a2c4228a54c65ce4749d335b671daec34f0ab7 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Fri, 31 May 2024 23:11:21 -0600 Subject: [PATCH 01/20] Add module-info.java --- okio/build.gradle.kts | 16 +++++++++++++++- okio/src/jvmMain/java/module-info.java | 6 ++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 okio/src/jvmMain/java/module-info.java diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index eea0f82119..fd7ed3a442 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -6,6 +6,7 @@ import kotlinx.validation.ApiValidationExtension import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithTests import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType import org.jetbrains.kotlin.gradle.plugin.mpp.TestExecutable +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") @@ -189,14 +190,27 @@ kotlin { } tasks { + val compileModuleInfo by registering(JavaCompile::class) { + classpath = objects.fileCollection() + .from(configurations.named("jvmCompileClasspath")) + val compileKotlinJvm = named("compileKotlinJvm") + dependsOn(compileKotlinJvm) + options.compilerArgumentProviders.plusAssign(CommandLineArgumentProvider { + listOf("--patch-module", "okio=${compileKotlinJvm.get().destinationDirectory.get().asFile.absolutePath}") + }) + destinationDirectory = layout.buildDirectory.dir("classes/java/moduleInfo") + options.release = 11 + source(layout.projectDirectory.dir("src/jvmMain/java")) + } + val jvmJar by getting(Jar::class) { // BundleTaskConvention() crashes unless there's a 'main' source set. sourceSets.create(SourceSet.MAIN_SOURCE_SET_NAME) + from(compileModuleInfo) val bndConvention = BundleTaskConvention(this) bndConvention.setBnd( """ Export-Package: okio - Automatic-Module-Name: okio Bundle-SymbolicName: com.squareup.okio """, ) diff --git a/okio/src/jvmMain/java/module-info.java b/okio/src/jvmMain/java/module-info.java new file mode 100644 index 0000000000..dca77cb28b --- /dev/null +++ b/okio/src/jvmMain/java/module-info.java @@ -0,0 +1,6 @@ +module okio { + requires java.logging; + requires kotlin.stdlib; + + exports okio; +} From bffc4da1d05d0463d9e0c996941bbb543d0104d4 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Fri, 31 May 2024 23:25:17 -0600 Subject: [PATCH 02/20] Try kotlin-multiplatform withJava approach --- okio/build.gradle.kts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index fd7ed3a442..0793455d82 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -187,26 +187,23 @@ kotlin { } } } + + jvm { + withJava() + } } tasks { - val compileModuleInfo by registering(JavaCompile::class) { - classpath = objects.fileCollection() - .from(configurations.named("jvmCompileClasspath")) + named("compileJava") { val compileKotlinJvm = named("compileKotlinJvm") dependsOn(compileKotlinJvm) options.compilerArgumentProviders.plusAssign(CommandLineArgumentProvider { listOf("--patch-module", "okio=${compileKotlinJvm.get().destinationDirectory.get().asFile.absolutePath}") }) - destinationDirectory = layout.buildDirectory.dir("classes/java/moduleInfo") - options.release = 11 - source(layout.projectDirectory.dir("src/jvmMain/java")) + options.release.set(11) } val jvmJar by getting(Jar::class) { - // BundleTaskConvention() crashes unless there's a 'main' source set. - sourceSets.create(SourceSet.MAIN_SOURCE_SET_NAME) - from(compileModuleInfo) val bndConvention = BundleTaskConvention(this) bndConvention.setBnd( """ From 8924329ef26c4cd1201e5ac3b005ca11627913c1 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Fri, 31 May 2024 23:51:26 -0600 Subject: [PATCH 03/20] Move module-info.class file to versions directory --- okio/build.gradle.kts | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 0793455d82..e78b540773 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -187,28 +187,37 @@ kotlin { } } } - - jvm { - withJava() - } } tasks { - named("compileJava") { + val compileModuleInfo by registering(JavaCompile::class) { + classpath = objects.fileCollection() + .from(configurations.named("jvmCompileClasspath")) val compileKotlinJvm = named("compileKotlinJvm") dependsOn(compileKotlinJvm) - options.compilerArgumentProviders.plusAssign(CommandLineArgumentProvider { - listOf("--patch-module", "okio=${compileKotlinJvm.get().destinationDirectory.get().asFile.absolutePath}") - }) - options.release.set(11) + options.compilerArgumentProviders.plusAssign( + CommandLineArgumentProvider { + listOf("--patch-module", "okio=${compileKotlinJvm.get().destinationDirectory.get().asFile.absolutePath}") + }, + ) + destinationDirectory = layout.buildDirectory.dir("classes/java/moduleInfo") + options.release = 9 + source(layout.projectDirectory.dir("src/jvmMain/java")) } val jvmJar by getting(Jar::class) { + // BundleTaskConvention() crashes unless there's a 'main' source set. + sourceSets.create(SourceSet.MAIN_SOURCE_SET_NAME) + from(compileModuleInfo) { + into("META-INF/versions/9") + } val bndConvention = BundleTaskConvention(this) bndConvention.setBnd( """ Export-Package: okio + Multi-Release: true Bundle-SymbolicName: com.squareup.okio + -fixupmessages: ^Classes found in the wrong directory: \\{META-INF/versions/9/module-info.class=module-info}${'$'} """, ) // Call the convention when the task has finished to modify the jar to contain OSGi metadata. From b251c4db76a58718e439c15ac3ed5e7c45888a79 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Sat, 1 Jun 2024 12:46:35 -0600 Subject: [PATCH 04/20] Use sourceSets --- okio/build.gradle.kts | 14 ++++++++------ okio/src/jvmMain/{java => java9}/module-info.java | 0 2 files changed, 8 insertions(+), 6 deletions(-) rename okio/src/jvmMain/{java => java9}/module-info.java (100%) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index e78b540773..6faaef604b 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -189,10 +189,14 @@ kotlin { } } +val java9 by sourceSets.creating { + java.srcDir("src/jvmMain/java9") + compileClasspath = objects.fileCollection() + .from(configurations.named("jvmCompileClasspath")) +} + tasks { - val compileModuleInfo by registering(JavaCompile::class) { - classpath = objects.fileCollection() - .from(configurations.named("jvmCompileClasspath")) + val compileJava9Java by getting(JavaCompile::class) { val compileKotlinJvm = named("compileKotlinJvm") dependsOn(compileKotlinJvm) options.compilerArgumentProviders.plusAssign( @@ -200,15 +204,13 @@ tasks { listOf("--patch-module", "okio=${compileKotlinJvm.get().destinationDirectory.get().asFile.absolutePath}") }, ) - destinationDirectory = layout.buildDirectory.dir("classes/java/moduleInfo") options.release = 9 - source(layout.projectDirectory.dir("src/jvmMain/java")) } val jvmJar by getting(Jar::class) { // BundleTaskConvention() crashes unless there's a 'main' source set. sourceSets.create(SourceSet.MAIN_SOURCE_SET_NAME) - from(compileModuleInfo) { + from(compileJava9Java) { into("META-INF/versions/9") } val bndConvention = BundleTaskConvention(this) diff --git a/okio/src/jvmMain/java/module-info.java b/okio/src/jvmMain/java9/module-info.java similarity index 100% rename from okio/src/jvmMain/java/module-info.java rename to okio/src/jvmMain/java9/module-info.java From be952922d303d7c00abd417a9ff94f819c8e593e Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Sat, 1 Jun 2024 13:03:54 -0600 Subject: [PATCH 05/20] Simplify task inputs --- okio/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 6faaef604b..f85deb6ec0 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -198,10 +198,11 @@ val java9 by sourceSets.creating { tasks { val compileJava9Java by getting(JavaCompile::class) { val compileKotlinJvm = named("compileKotlinJvm") + .flatMap { it.destinationDirectory }.map { it.asFile.absolutePath } dependsOn(compileKotlinJvm) options.compilerArgumentProviders.plusAssign( CommandLineArgumentProvider { - listOf("--patch-module", "okio=${compileKotlinJvm.get().destinationDirectory.get().asFile.absolutePath}") + listOf("--patch-module", "okio=${compileKotlinJvm.get()}") }, ) options.release = 9 From f46b19be0ae5d41d8037bd7a65a445837985da1b Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Sun, 2 Jun 2024 12:50:11 -0600 Subject: [PATCH 06/20] Derive dependsOn from inputs --- okio/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index f85deb6ec0..a0ce6b9bb2 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -199,7 +199,7 @@ tasks { val compileJava9Java by getting(JavaCompile::class) { val compileKotlinJvm = named("compileKotlinJvm") .flatMap { it.destinationDirectory }.map { it.asFile.absolutePath } - dependsOn(compileKotlinJvm) + inputs.dir(compileKotlinJvm) options.compilerArgumentProviders.plusAssign( CommandLineArgumentProvider { listOf("--patch-module", "okio=${compileKotlinJvm.get()}") From 42cd517b3b12aaed630f3d885909aed8dc22e94a Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 09:05:40 -0600 Subject: [PATCH 07/20] Add integration test --- gradle/libs.versions.toml | 3 ++- okio/build.gradle.kts | 27 +++++++++++++++++++ .../src/integrationTest/java/module-info.java | 4 +++ .../okio/test/integration/ModuleTest.java | 19 +++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 okio/src/integrationTest/java/module-info.java create mode 100644 okio/src/integrationTest/java/okio/test/integration/ModuleTest.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 86f8a71769..8895216827 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] jmh = "1.37" ktlint = "0.48.2" +junit = "4.13.2" [libraries] android-gradle-plugin = { module = "com.android.tools.build:gradle", version = "7.4.2" } @@ -18,7 +19,7 @@ dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.20" spotless = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.25.0" } bnd = { module = "biz.aQute.bnd:biz.aQute.bnd.gradle", version = "6.4.0" } vanniktech-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } -test-junit = { module = "junit:junit", version = "4.13.2" } +test-junit = { module = "junit:junit", version.ref = "junit" } test-assertj = { module = "org.assertj:assertj-core", version = "3.25.3" } test-assertk = "com.willowtreeapps.assertk:assertk:0.28.1" test-jimfs = "com.google.jimfs:jimfs:1.3.0" diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index a0ce6b9bb2..976a2f1f06 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -14,6 +14,7 @@ plugins { id("com.vanniktech.maven.publish.base") id("build-support") id("binary-compatibility-validator") + `jvm-test-suite` } /* @@ -195,6 +196,24 @@ val java9 by sourceSets.creating { .from(configurations.named("jvmCompileClasspath")) } +testing { + suites { + register("integrationTest") { + useJUnit(libs.versions.junit) + dependencies { + implementation(project()) + } + targets.configureEach { + testTask.configure { + onlyIf { + !javaLauncher.get().metadata.javaRuntimeVersion.startsWith("1.8") + } + } + } + } + } +} + tasks { val compileJava9Java by getting(JavaCompile::class) { val compileKotlinJvm = named("compileKotlinJvm") @@ -228,6 +247,14 @@ tasks { bndConvention.buildBundle() } } + + val compileIntegrationTestJava by getting(JavaCompile::class) { + options.release = 9 + } + + check { + dependsOn(dependsOn(testing.suites.named("integrationTest"))) + } } configure { diff --git a/okio/src/integrationTest/java/module-info.java b/okio/src/integrationTest/java/module-info.java new file mode 100644 index 0000000000..67f08ae51f --- /dev/null +++ b/okio/src/integrationTest/java/module-info.java @@ -0,0 +1,4 @@ +open module okio.test.integration { + requires okio; + requires junit; +} diff --git a/okio/src/integrationTest/java/okio/test/integration/ModuleTest.java b/okio/src/integrationTest/java/okio/test/integration/ModuleTest.java new file mode 100644 index 0000000000..e542eaf756 --- /dev/null +++ b/okio/src/integrationTest/java/okio/test/integration/ModuleTest.java @@ -0,0 +1,19 @@ +package okio.test.integration; + +import okio.FileSystem; +import org.junit.Test; +import static org.junit.Assert.*; + +public class ModuleTest { + @Test + public void test() { + // test okio.test.integration is modular + assertTrue(ModuleTest.class.getModule().isNamed()); + assertEquals(ModuleTest.class.getModule().getName(), "okio.test.integration"); + assertFalse(ModuleTest.class.getModule().getDescriptor().isAutomatic()); + // test okio is modular + assertTrue(FileSystem.class.getModule().isNamed()); + assertEquals(FileSystem.class.getModule().getName(), "okio"); + assertFalse(FileSystem.class.getModule().getDescriptor().isAutomatic()); + } +} From 35d8e20a674e02e21a251afdfdcc02d60a5447d8 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 09:37:54 -0600 Subject: [PATCH 08/20] Use multiplatform's withJava feature --- okio/build.gradle.kts | 6 ++++-- .../java/module-info.java | 0 .../java/okio/test/integration/ModuleTest.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) rename okio/src/{integrationTest => jvmIntegrationTest}/java/module-info.java (100%) rename okio/src/{integrationTest => jvmIntegrationTest}/java/okio/test/integration/ModuleTest.java (95%) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 976a2f1f06..cf33100f09 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -188,6 +188,10 @@ kotlin { } } } + + jvm { + withJava() + } } val java9 by sourceSets.creating { @@ -228,8 +232,6 @@ tasks { } val jvmJar by getting(Jar::class) { - // BundleTaskConvention() crashes unless there's a 'main' source set. - sourceSets.create(SourceSet.MAIN_SOURCE_SET_NAME) from(compileJava9Java) { into("META-INF/versions/9") } diff --git a/okio/src/integrationTest/java/module-info.java b/okio/src/jvmIntegrationTest/java/module-info.java similarity index 100% rename from okio/src/integrationTest/java/module-info.java rename to okio/src/jvmIntegrationTest/java/module-info.java diff --git a/okio/src/integrationTest/java/okio/test/integration/ModuleTest.java b/okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java similarity index 95% rename from okio/src/integrationTest/java/okio/test/integration/ModuleTest.java rename to okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java index e542eaf756..0c7668521d 100644 --- a/okio/src/integrationTest/java/okio/test/integration/ModuleTest.java +++ b/okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java @@ -2,11 +2,12 @@ import okio.FileSystem; import org.junit.Test; + import static org.junit.Assert.*; public class ModuleTest { @Test - public void test() { + public void testModule() { // test okio.test.integration is modular assertTrue(ModuleTest.class.getModule().isNamed()); assertEquals(ModuleTest.class.getModule().getName(), "okio.test.integration"); From 62309641df5ef4e3e013088e574eb898664ab719 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 16:02:55 -0600 Subject: [PATCH 09/20] Fix nested dependsOn --- okio/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index c1582126e3..6340e88660 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -256,7 +256,7 @@ tasks { } check { - dependsOn(dependsOn(testing.suites.named("integrationTest"))) + dependsOn(testing.suites.named("integrationTest")) } } From d9363fdb02d5cb138b2ac6db2c23bec303fd08a1 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 16:10:14 -0600 Subject: [PATCH 10/20] Remove no longer necessary fixupmessages --- okio/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 6340e88660..c50f65c722 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -241,7 +241,6 @@ tasks { Export-Package: okio Multi-Release: true Bundle-SymbolicName: com.squareup.okio - -fixupmessages: ^Classes found in the wrong directory: \\{META-INF/versions/9/module-info.class=module-info}${'$'} """, ) // Call the extension when the task has finished to modify the jar to contain OSGi metadata. From 3524cf21c28a352a70d561fa9a0bb38f38d587a9 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 16:50:31 -0600 Subject: [PATCH 11/20] Simplify module compilation --- okio/build.gradle.kts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index c50f65c722..90aeea0e5f 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -196,8 +196,10 @@ kotlin { val java9 by sourceSets.creating { java.srcDir("src/jvmMain/java9") - compileClasspath = objects.fileCollection() - .from(configurations.named("jvmCompileClasspath")) +} + +configurations.named("java9CompileClasspath") { + extendsFrom(configurations["jvmCompileClasspath"]) } testing { @@ -220,14 +222,11 @@ testing { tasks { val compileJava9Java by getting(JavaCompile::class) { - val compileKotlinJvm = named("compileKotlinJvm") - .flatMap { it.destinationDirectory }.map { it.asFile.absolutePath } - inputs.dir(compileKotlinJvm) - options.compilerArgumentProviders.plusAssign( - CommandLineArgumentProvider { - listOf("--patch-module", "okio=${compileKotlinJvm.get()}") - }, - ) + dependsOn("compileKotlinJvm") + // https://kotlinlang.org/docs/gradle-configure-project.html#configure-with-java-modules-jpms-enabled + options.compilerArgumentProviders.add(CommandLineArgumentProvider { + listOf("--patch-module", "okio=${sourceSets["main"].output.asPath}") + }) options.release = 9 } From b7ecd7387d607efbe409eb95a68da6c85776977c Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 17:38:02 -0600 Subject: [PATCH 12/20] Avoid task configuration --- okio/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 90aeea0e5f..f36dc83318 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -221,7 +221,7 @@ testing { } tasks { - val compileJava9Java by getting(JavaCompile::class) { + val compileJava9Java = named("compileJava9Java") { dependsOn("compileKotlinJvm") // https://kotlinlang.org/docs/gradle-configure-project.html#configure-with-java-modules-jpms-enabled options.compilerArgumentProviders.add(CommandLineArgumentProvider { @@ -230,7 +230,7 @@ tasks { options.release = 9 } - val jvmJar by getting(Jar::class) { + named("jvmJar") { from(compileJava9Java) { into("META-INF/versions/9") } @@ -249,7 +249,7 @@ tasks { } } - val compileIntegrationTestJava by getting(JavaCompile::class) { + named("compileIntegrationTestJava") { options.release = 9 } From c3a31b30cfa17c3b033effe41a052c75513ef802 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 22:53:42 -0600 Subject: [PATCH 13/20] Avoid jul.Logger on java > 8 --- okio/src/jvmMain/java/okio/internal/Logger.java | 14 ++++++++++++++ okio/src/jvmMain/java9/module-info.java | 1 - okio/src/jvmMain/java9/okio/internal/Logger.java | 14 ++++++++++++++ okio/src/jvmMain/kotlin/okio/JvmOkio.kt | 7 +++---- 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 okio/src/jvmMain/java/okio/internal/Logger.java create mode 100644 okio/src/jvmMain/java9/okio/internal/Logger.java diff --git a/okio/src/jvmMain/java/okio/internal/Logger.java b/okio/src/jvmMain/java/okio/internal/Logger.java new file mode 100644 index 0000000000..c15cb37a7a --- /dev/null +++ b/okio/src/jvmMain/java/okio/internal/Logger.java @@ -0,0 +1,14 @@ +package okio.internal; + +public class Logger { + private final java.util.logging.Logger logger; + private Logger(String name) { + this.logger = java.util.logging.Logger.getLogger(name); + } + public static Logger getLogger(String name) { + return new Logger(name); + } + public void warn(String msg, Throwable e) { + logger.log(java.util.logging.Level.WARNING, msg, e); + } +} diff --git a/okio/src/jvmMain/java9/module-info.java b/okio/src/jvmMain/java9/module-info.java index dca77cb28b..51817ab2e2 100644 --- a/okio/src/jvmMain/java9/module-info.java +++ b/okio/src/jvmMain/java9/module-info.java @@ -1,5 +1,4 @@ module okio { - requires java.logging; requires kotlin.stdlib; exports okio; diff --git a/okio/src/jvmMain/java9/okio/internal/Logger.java b/okio/src/jvmMain/java9/okio/internal/Logger.java new file mode 100644 index 0000000000..a9c2ecab75 --- /dev/null +++ b/okio/src/jvmMain/java9/okio/internal/Logger.java @@ -0,0 +1,14 @@ +package okio.internal; + +public class Logger { + private final System.Logger logger; + private Logger(String name) { + this.logger = System.getLogger(name); + } + public static Logger getLogger(String name) { + return new Logger(name); + } + public void warn(String msg, Throwable e) { + logger.log(System.Logger.Level.WARNING, msg, e); + } +} diff --git a/okio/src/jvmMain/kotlin/okio/JvmOkio.kt b/okio/src/jvmMain/kotlin/okio/JvmOkio.kt index 44a046f261..66f0f0be18 100644 --- a/okio/src/jvmMain/kotlin/okio/JvmOkio.kt +++ b/okio/src/jvmMain/kotlin/okio/JvmOkio.kt @@ -32,11 +32,10 @@ import java.nio.file.Files import java.nio.file.OpenOption import java.nio.file.Path as NioPath import java.security.MessageDigest -import java.util.logging.Level -import java.util.logging.Logger import javax.crypto.Cipher import javax.crypto.Mac import okio.internal.ResourceFileSystem +import okio.internal.Logger /** Returns a sink that writes to `out`. */ fun OutputStream.sink(): Sink = OutputStreamSink(this, Timeout()) @@ -154,12 +153,12 @@ private class SocketAsyncTimeout(private val socket: Socket) : AsyncTimeout() { try { socket.close() } catch (e: Exception) { - logger.log(Level.WARNING, "Failed to close timed out socket $socket", e) + logger.warn("Failed to close timed out socket $socket", e) } catch (e: AssertionError) { if (e.isAndroidGetsocknameError) { // Catch this exception due to a Firmware issue up to android 4.2.2 // https://code.google.com/p/android/issues/detail?id=54072 - logger.log(Level.WARNING, "Failed to close timed out socket $socket", e) + logger.warn("Failed to close timed out socket $socket", e) } else { throw e } From 510a2b421f4a103ac250a7108c26b0f6cc2c4121 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 23:02:28 -0600 Subject: [PATCH 14/20] Convert loggers to kotlin --- .../java9 => jvmJava9/java}/module-info.java | 0 okio/src/jvmJava9/kotlin/okio/internal/Logger.kt | 6 ++++++ okio/src/jvmMain/java/okio/internal/Logger.java | 14 -------------- okio/src/jvmMain/java9/okio/internal/Logger.java | 14 -------------- okio/src/jvmMain/kotlin/okio/JvmOkio.kt | 4 ++-- okio/src/jvmMain/kotlin/okio/internal/Logger.kt | 6 ++++++ 6 files changed, 14 insertions(+), 30 deletions(-) rename okio/src/{jvmMain/java9 => jvmJava9/java}/module-info.java (100%) create mode 100644 okio/src/jvmJava9/kotlin/okio/internal/Logger.kt delete mode 100644 okio/src/jvmMain/java/okio/internal/Logger.java delete mode 100644 okio/src/jvmMain/java9/okio/internal/Logger.java create mode 100644 okio/src/jvmMain/kotlin/okio/internal/Logger.kt diff --git a/okio/src/jvmMain/java9/module-info.java b/okio/src/jvmJava9/java/module-info.java similarity index 100% rename from okio/src/jvmMain/java9/module-info.java rename to okio/src/jvmJava9/java/module-info.java diff --git a/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt b/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt new file mode 100644 index 0000000000..19b3129cde --- /dev/null +++ b/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt @@ -0,0 +1,6 @@ +package okio.internal + +class Logger(name: String) { + private val logger: System.Logger = System.getLogger(name) + fun warn(msg: String, e: Throwable): Unit = logger.log(System.Logger.Level.WARNING, msg, e) +} diff --git a/okio/src/jvmMain/java/okio/internal/Logger.java b/okio/src/jvmMain/java/okio/internal/Logger.java deleted file mode 100644 index c15cb37a7a..0000000000 --- a/okio/src/jvmMain/java/okio/internal/Logger.java +++ /dev/null @@ -1,14 +0,0 @@ -package okio.internal; - -public class Logger { - private final java.util.logging.Logger logger; - private Logger(String name) { - this.logger = java.util.logging.Logger.getLogger(name); - } - public static Logger getLogger(String name) { - return new Logger(name); - } - public void warn(String msg, Throwable e) { - logger.log(java.util.logging.Level.WARNING, msg, e); - } -} diff --git a/okio/src/jvmMain/java9/okio/internal/Logger.java b/okio/src/jvmMain/java9/okio/internal/Logger.java deleted file mode 100644 index a9c2ecab75..0000000000 --- a/okio/src/jvmMain/java9/okio/internal/Logger.java +++ /dev/null @@ -1,14 +0,0 @@ -package okio.internal; - -public class Logger { - private final System.Logger logger; - private Logger(String name) { - this.logger = System.getLogger(name); - } - public static Logger getLogger(String name) { - return new Logger(name); - } - public void warn(String msg, Throwable e) { - logger.log(System.Logger.Level.WARNING, msg, e); - } -} diff --git a/okio/src/jvmMain/kotlin/okio/JvmOkio.kt b/okio/src/jvmMain/kotlin/okio/JvmOkio.kt index 66f0f0be18..e06aa495e0 100644 --- a/okio/src/jvmMain/kotlin/okio/JvmOkio.kt +++ b/okio/src/jvmMain/kotlin/okio/JvmOkio.kt @@ -34,8 +34,8 @@ import java.nio.file.Path as NioPath import java.security.MessageDigest import javax.crypto.Cipher import javax.crypto.Mac -import okio.internal.ResourceFileSystem import okio.internal.Logger +import okio.internal.ResourceFileSystem /** Returns a sink that writes to `out`. */ fun OutputStream.sink(): Sink = OutputStreamSink(this, Timeout()) @@ -138,7 +138,7 @@ fun Socket.source(): Source { return timeout.source(source) } -private val logger = Logger.getLogger("okio.Okio") +private val logger = Logger("okio.Okio") private class SocketAsyncTimeout(private val socket: Socket) : AsyncTimeout() { override fun newTimeoutException(cause: IOException?): IOException { diff --git a/okio/src/jvmMain/kotlin/okio/internal/Logger.kt b/okio/src/jvmMain/kotlin/okio/internal/Logger.kt new file mode 100644 index 0000000000..571919a294 --- /dev/null +++ b/okio/src/jvmMain/kotlin/okio/internal/Logger.kt @@ -0,0 +1,6 @@ +package okio.internal + +class Logger(name: String) { + private val logger: java.util.logging.Logger = java.util.logging.Logger.getLogger(name) + fun warn(msg: String, e: Throwable): Unit = logger.log(java.util.logging.Level.WARNING, msg, e) +} From 5ee60c7d8e0ad2826a429422cd187ff647425caf Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 23:03:56 -0600 Subject: [PATCH 15/20] Simplify sourceSet --- okio/build.gradle.kts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index f36dc83318..8a0ae60b0e 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -194,9 +194,7 @@ kotlin { } } -val java9 by sourceSets.creating { - java.srcDir("src/jvmMain/java9") -} +val java9 by sourceSets.creating configurations.named("java9CompileClasspath") { extendsFrom(configurations["jvmCompileClasspath"]) From 2ab80d813b82efccbd6267eedc93bdf7598db92d Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 23:11:18 -0600 Subject: [PATCH 16/20] Make loggers kotlin-internal --- okio/src/jvmJava9/kotlin/okio/internal/Logger.kt | 2 +- okio/src/jvmMain/kotlin/okio/internal/Logger.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt b/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt index 19b3129cde..1ca12eb4bf 100644 --- a/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt +++ b/okio/src/jvmJava9/kotlin/okio/internal/Logger.kt @@ -1,6 +1,6 @@ package okio.internal -class Logger(name: String) { +internal class Logger internal constructor(name: String) { private val logger: System.Logger = System.getLogger(name) fun warn(msg: String, e: Throwable): Unit = logger.log(System.Logger.Level.WARNING, msg, e) } diff --git a/okio/src/jvmMain/kotlin/okio/internal/Logger.kt b/okio/src/jvmMain/kotlin/okio/internal/Logger.kt index 571919a294..c3cf7af372 100644 --- a/okio/src/jvmMain/kotlin/okio/internal/Logger.kt +++ b/okio/src/jvmMain/kotlin/okio/internal/Logger.kt @@ -1,6 +1,6 @@ package okio.internal -class Logger(name: String) { +internal class Logger internal constructor(name: String) { private val logger: java.util.logging.Logger = java.util.logging.Logger.getLogger(name) fun warn(msg: String, e: Throwable): Unit = logger.log(java.util.logging.Level.WARNING, msg, e) } From d44d3a401e9d52b209a2a92a3d6eedf3db3bc389 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 23:37:11 -0600 Subject: [PATCH 17/20] Rewrite module test in kotlin --- okio/build.gradle.kts | 8 ++++++- .../jvmIntegrationTest/java/module-info.java | 1 + .../okio/test/integration/ModuleTest.java | 20 ------------------ .../okio/test/integration/ModuleTest.kt | 21 +++++++++++++++++++ 4 files changed, 29 insertions(+), 21 deletions(-) delete mode 100644 okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java create mode 100644 okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 8a0ae60b0e..9d7d49689e 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -251,8 +251,14 @@ tasks { options.release = 9 } + val integrationTest = named("integrationTest") { + jvmArgumentProviders.add(CommandLineArgumentProvider { + listOf("--patch-module", "okio.test.integration=${sourceSets["integrationTest"].output.asPath}") + }) + } + check { - dependsOn(testing.suites.named("integrationTest")) + dependsOn(integrationTest) } } diff --git a/okio/src/jvmIntegrationTest/java/module-info.java b/okio/src/jvmIntegrationTest/java/module-info.java index 67f08ae51f..26fa87c2fa 100644 --- a/okio/src/jvmIntegrationTest/java/module-info.java +++ b/okio/src/jvmIntegrationTest/java/module-info.java @@ -1,4 +1,5 @@ open module okio.test.integration { requires okio; requires junit; + requires kotlin.stdlib; } diff --git a/okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java b/okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java deleted file mode 100644 index 0c7668521d..0000000000 --- a/okio/src/jvmIntegrationTest/java/okio/test/integration/ModuleTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package okio.test.integration; - -import okio.FileSystem; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class ModuleTest { - @Test - public void testModule() { - // test okio.test.integration is modular - assertTrue(ModuleTest.class.getModule().isNamed()); - assertEquals(ModuleTest.class.getModule().getName(), "okio.test.integration"); - assertFalse(ModuleTest.class.getModule().getDescriptor().isAutomatic()); - // test okio is modular - assertTrue(FileSystem.class.getModule().isNamed()); - assertEquals(FileSystem.class.getModule().getName(), "okio"); - assertFalse(FileSystem.class.getModule().getDescriptor().isAutomatic()); - } -} diff --git a/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt b/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt new file mode 100644 index 0000000000..4124f3e61d --- /dev/null +++ b/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt @@ -0,0 +1,21 @@ +package okio.test.integration + +import okio.FileSystem +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class ModuleTest { + @Test + fun testModule() { + // test okio.test.integration is modular + assertTrue(ModuleTest::class.java.module.isNamed) + assertEquals(ModuleTest::class.java.module.name, "okio.test.integration") + assertFalse(ModuleTest::class.java.module.descriptor.isAutomatic) + // test okio is modular + assertTrue(FileSystem::class.java.module.isNamed) + assertEquals(FileSystem::class.java.module.name, "okio") + assertFalse(FileSystem::class.java.module.descriptor.isAutomatic) + } +} From 7913508168561a02f05203717c131c7ac687350a Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Mon, 3 Jun 2024 23:55:16 -0600 Subject: [PATCH 18/20] Update modular tests to be more reasonable --- .../kotlin/okio/test/integration/ModuleTest.kt | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt b/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt index 4124f3e61d..2fd2c99c84 100644 --- a/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt +++ b/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt @@ -1,7 +1,5 @@ package okio.test.integration -import okio.FileSystem -import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test @@ -9,13 +7,10 @@ import org.junit.Test class ModuleTest { @Test fun testModule() { - // test okio.test.integration is modular - assertTrue(ModuleTest::class.java.module.isNamed) - assertEquals(ModuleTest::class.java.module.name, "okio.test.integration") - assertFalse(ModuleTest::class.java.module.descriptor.isAutomatic) - // test okio is modular - assertTrue(FileSystem::class.java.module.isNamed) - assertEquals(FileSystem::class.java.module.name, "okio") - assertFalse(FileSystem::class.java.module.descriptor.isAutomatic) + // assert okio is modular + val okioModule = ModuleLayer.boot().modules().single { it.name == "okio" } + assertFalse(okioModule.descriptor.isAutomatic) + assertTrue(okioModule.isExported("okio")) + assertFalse(okioModule.isExported("okio.internal")) } } From 0e2fe7b229c879ff2039a6173248422ff97eedce Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Tue, 4 Jun 2024 12:40:51 -0600 Subject: [PATCH 19/20] Update jar to not include compilation results --- okio/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 9d7d49689e..7142b4978b 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -229,7 +229,7 @@ tasks { } named("jvmJar") { - from(compileJava9Java) { + from(compileJava9Java.flatMap { it.destinationDirectory }) { into("META-INF/versions/9") } val bndExtension = BundleTaskExtension(this) From 8ae775bbe1f3aee7f0b17c14786cf1c5e6459556 Mon Sep 17 00:00:00 2001 From: Clayton Walker Date: Wed, 5 Jun 2024 20:45:47 -0600 Subject: [PATCH 20/20] Ensure mr-jar contains new logger class --- okio/build.gradle.kts | 6 ++++++ .../kotlin/okio/test/integration/ModuleTest.kt | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/okio/build.gradle.kts b/okio/build.gradle.kts index 7142b4978b..1eff78e107 100644 --- a/okio/build.gradle.kts +++ b/okio/build.gradle.kts @@ -228,10 +228,16 @@ tasks { options.release = 9 } + val compileJava9KotlinJvm = named("compileJava9KotlinJvm") + named("jvmJar") { from(compileJava9Java.flatMap { it.destinationDirectory }) { into("META-INF/versions/9") } + from(compileJava9KotlinJvm.flatMap { it.destinationDirectory }) { + into("META-INF/versions/9") + exclude("META-INF") + } val bndExtension = BundleTaskExtension(this) bndExtension.setBnd( """ diff --git a/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt b/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt index 2fd2c99c84..36fca082e0 100644 --- a/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt +++ b/okio/src/jvmIntegrationTest/kotlin/okio/test/integration/ModuleTest.kt @@ -1,6 +1,7 @@ package okio.test.integration import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue import org.junit.Test @@ -13,4 +14,10 @@ class ModuleTest { assertTrue(okioModule.isExported("okio")) assertFalse(okioModule.isExported("okio.internal")) } + + @Test + fun testLoggerClassIsPresent() { + val logger = Class.forName("okio.internal.Logger") + assertNotNull(logger.getResource("/META-INF/versions/9/okio/internal/Logger.class")) + } }