Skip to content

Commit d25b04b

Browse files
committed
Remove JVM specific API usage in common code
Adding non-JVM targets will result in compilation failure
1 parent 8852227 commit d25b04b

19 files changed

+138
-41
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,6 @@ local.properties
3838
*.iml
3939
.idea/
4040
captures/
41+
42+
# Kotlin
43+
.kotlin/

build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
22

33
plugins {
4+
alias(libs.plugins.android.application) apply false
5+
alias(libs.plugins.android.library) apply false
6+
alias(libs.plugins.kotlin.android) apply false
7+
alias(libs.plugins.kotlin.jvm) apply false
8+
alias(libs.plugins.kotlin.multiplatform) apply false
9+
410
alias(libs.plugins.ktlint)
511
}
612

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[versions]
22
kotlin = "2.2.0"
3+
kotlinx-atomicfu = "0.29.0"
34
androidGradlePlugin = "8.11.1"
45
mavenPublish = "0.25.3"
56
ktlint = "13.0.0"
@@ -11,6 +12,7 @@ dokka = "1.9.10"
1112
[libraries]
1213
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
1314
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
15+
kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "kotlinx-atomicfu" }
1416
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
1517
truthish = { module = "com.varabyte.truthish:truthish", version.ref = "truthish" }
1618

jvm-utils/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

jvm-utils/build.gradle.kts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
plugins {
2+
id("java-library")
3+
alias(libs.plugins.kotlin.jvm)
4+
}
5+
6+
java {
7+
sourceCompatibility = JavaVersion.VERSION_1_8
8+
targetCompatibility = JavaVersion.VERSION_1_8
9+
}
10+
11+
kotlin {
12+
compilerOptions {
13+
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8
14+
}
15+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package logcat
2+
3+
import java.io.PrintWriter
4+
import java.io.StringWriter
5+
6+
fun Throwable.customJvmStackTraceToString(): String {
7+
val stringWriter = StringWriter(256)
8+
val printWriter = PrintWriter(stringWriter, false)
9+
printStackTrace(printWriter)
10+
printWriter.flush()
11+
return stringWriter.toString()
12+
}
13+
14+
fun Any.jvmOuterClassSimpleName(): String {
15+
val javaClass = this::class.java
16+
val fullClassName = javaClass.name
17+
val outerClassName = fullClassName.substringBefore('$')
18+
val simplerOuterClassName = outerClassName.substringAfterLast('.')
19+
return if (simplerOuterClassName.isEmpty()) {
20+
fullClassName
21+
} else {
22+
simplerOuterClassName.removeSuffix("Kt")
23+
}
24+
}

logcat/build.gradle.kts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
@file:Suppress("UnstableApiUsage")
2+
13
import com.vanniktech.maven.publish.JavadocJar
24
import com.vanniktech.maven.publish.KotlinMultiplatform
35
import com.vanniktech.maven.publish.SonatypeHost
46
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
57

68
plugins {
7-
alias(libs.plugins.android.library)
89
alias(libs.plugins.kotlin.multiplatform)
10+
alias(libs.plugins.android.library)
911
alias(libs.plugins.maven.publish)
1012
alias(libs.plugins.binary.compatibility.validator)
1113
alias(libs.plugins.dokka)
@@ -26,22 +28,38 @@ kotlin {
2628
}
2729
}
2830

31+
compilerOptions {
32+
freeCompilerArgs.add("-Xexpect-actual-classes")
33+
}
34+
2935
sourceSets {
30-
val commonMain by getting {
36+
applyDefaultHierarchyTemplate()
37+
38+
commonMain {
3139
dependencies {
3240
implementation(libs.kotlin.stdlib)
41+
implementation(libs.kotlinx.atomicfu)
3342
}
3443
}
35-
36-
val commonTest by getting {
44+
45+
commonTest {
3746
dependencies {
3847
implementation(libs.kotlin.test)
3948
implementation(libs.truthish)
4049
}
4150
}
42-
43-
val androidMain by getting
44-
val jvmMain by getting
51+
52+
androidMain {
53+
dependencies {
54+
implementation(project(":jvm-utils"))
55+
}
56+
}
57+
58+
jvmMain {
59+
dependencies {
60+
implementation(project(":jvm-utils"))
61+
}
62+
}
4563
}
4664
}
4765

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@file:JvmName("LogcatKt")
2+
3+
package logcat
4+
5+
import kotlin.jvm.JvmName
6+
7+
@PublishedApi
8+
internal actual fun Any.outerClassSimpleNameInternalOnlyDoNotUseKThxBye(): String = jvmOuterClassSimpleName()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@file:JvmName("ThrowablesKt")
2+
3+
package logcat
4+
5+
import kotlin.jvm.JvmName
6+
7+
actual fun Throwable.asLog(): String = customJvmStackTraceToString()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package logcat.internal
2+
3+
import java.util.concurrent.CopyOnWriteArrayList
4+
5+
internal actual fun <T> copyOnWriteArrayList(): MutableList<T> = CopyOnWriteArrayList()

0 commit comments

Comments
 (0)