Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
7d947fb9e3 | |||
0b241ea7e2 | |||
25cb516d0f | |||
099c3fad26 | |||
28ab658dd2 | |||
529508bf74 | |||
758bc31a85 | |||
c154fc7610 | |||
ee93e0b5b3 |
@ -1,3 +1,4 @@
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.*
|
||||
import ru.landgrafhomyak.kotlin.kmp_gradle_build_helper.plugin.xomrk
|
||||
@ -14,7 +15,7 @@ buildscript {
|
||||
}
|
||||
|
||||
group = "ru.landgrafhomyak.utility"
|
||||
version = "0.4"
|
||||
version = "0.5"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@ -24,8 +25,72 @@ xomrk {
|
||||
kotlin {
|
||||
setCompatibilityWithKotlin(KotlinVersion.KOTLIN_2_0)
|
||||
optInContracts()
|
||||
noWarnExpectActual()
|
||||
warningsAsErrors()
|
||||
|
||||
defineAllMultiplatformTargets()
|
||||
|
||||
jvmToolchain(8)
|
||||
jvm {
|
||||
withJava()
|
||||
|
||||
compilations.configureEach {
|
||||
compileJavaTaskProvider?.configure {
|
||||
targetCompatibility = "1.8"
|
||||
}
|
||||
compileTaskProvider.configure {
|
||||
compilerOptions {
|
||||
jvmTarget = JvmTarget.JVM_1_8
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.named { t -> t == "${this@jvm.name}Test" }.configureEach {
|
||||
this as Test
|
||||
useTestNG()
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
// if use kotlin("stdlib") gitea ui brokes at paragraph with dependency versions
|
||||
val kotlinStdlibDependency = "org.jetbrains.kotlin:kotlin-stdlib:${this@kotlin.coreLibrariesVersion}"
|
||||
|
||||
val commonMain by getting {
|
||||
dependencies {
|
||||
compileOnly(kotlinStdlibDependency)
|
||||
}
|
||||
}
|
||||
val jvmMain by getting {
|
||||
dependsOn(commonMain)
|
||||
dependencies {
|
||||
compileOnly(kotlinStdlibDependency)
|
||||
}
|
||||
}
|
||||
|
||||
val nonJvmMain by creating {
|
||||
dependsOn(commonMain)
|
||||
dependencies {
|
||||
implementation(kotlinStdlibDependency)
|
||||
}
|
||||
}
|
||||
|
||||
jvmTest {
|
||||
dependencies {
|
||||
implementation("org.testng:testng:7.5.1")
|
||||
}
|
||||
}
|
||||
|
||||
configureEach {
|
||||
when {
|
||||
// commonMain !in dependsOn -> return@configureEach
|
||||
!name.endsWith("Main") -> return@configureEach
|
||||
this@configureEach === commonMain -> return@configureEach
|
||||
this@configureEach === jvmMain -> return@configureEach
|
||||
this@configureEach === nonJvmMain -> return@configureEach
|
||||
}
|
||||
dependsOn(nonJvmMain)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
publishing {
|
||||
|
@ -1 +1,6 @@
|
||||
kotlin.code.style=official
|
||||
kotlin.stdlib.default.dependency=false
|
||||
kotlin.mpp.applyDefaultHierarchyTemplate=false
|
||||
kotlin.native.enableKlibsCrossCompilation=true
|
||||
# compileOnly dependencies from commonMain still throw warning
|
||||
kotlin.suppressGradlePluginWarnings=IncorrectCompileOnlyDependencyWarning
|
||||
kotlin.js.stdlib.dom.api.included=false
|
@ -0,0 +1,7 @@
|
||||
package ru.landgrafhomyak.utility.highlevel_try_finally
|
||||
|
||||
@PublishedApi
|
||||
internal expect object ExceptionsKt {
|
||||
@PublishedApi
|
||||
internal fun addSuppressed(e1: Throwable?, e2: Throwable?)
|
||||
}
|
@ -12,7 +12,7 @@ class TryFinallyChainScope @PublishedApi internal constructor() {
|
||||
this._actualException?.let { e -> throw e }
|
||||
}
|
||||
|
||||
inline fun action(fn: () -> Unit) {
|
||||
inline fun action(fn: () -> Unit): TryFinallyChainScope {
|
||||
contract {
|
||||
callsInPlace(fn, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
@ -21,5 +21,6 @@ class TryFinallyChainScope @PublishedApi internal constructor() {
|
||||
onError = { err -> this._actualException?.addSuppressed(err) ?: run { this._actualException = err } },
|
||||
action = fn
|
||||
)
|
||||
return this
|
||||
}
|
||||
}
|
@ -86,7 +86,7 @@ inline fun <R> safeAutoClose3e(
|
||||
try {
|
||||
onError(e1)
|
||||
} catch (e2: Throwable) {
|
||||
e1.addSuppressed(e2)
|
||||
ExceptionsKt.addSuppressed(e1, e2)
|
||||
}
|
||||
throw e1
|
||||
} finally {
|
||||
|
@ -0,0 +1,12 @@
|
||||
package ru.landgrafhomyak.utility.highlevel_try_finally
|
||||
|
||||
@PublishedApi
|
||||
internal actual object ExceptionsKt {
|
||||
@PublishedApi
|
||||
@JvmStatic
|
||||
internal actual fun addSuppressed(e1: Throwable?, e2: Throwable?) {
|
||||
if (e1 == null) throw NullPointerException("e1")
|
||||
if (e2 == null) throw NullPointerException("e2")
|
||||
(java.lang.Throwable::addSuppressed)(e1 as java.lang.Throwable, e2)
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package ru.landgrafhomyak.utility.highlevel_try_finally.tests
|
||||
|
||||
import org.testng.annotations.Test
|
||||
import ru.landgrafhomyak.utility.highlevel_try_finally.safeAutoClose1
|
||||
|
||||
@Test
|
||||
class KotlinStdlibDependencyTest {
|
||||
@Test
|
||||
fun testNoKotlinStdlib() {
|
||||
try {
|
||||
if (KotlinVersion.CURRENT.major != -1)
|
||||
throw AssertionError("Kotlin stdlib still in runtime classpath")
|
||||
} catch (_: LinkageError) {
|
||||
}
|
||||
}
|
||||
|
||||
private class CustomTestException : RuntimeException()
|
||||
private object CustomUnit
|
||||
|
||||
private fun throw7throwFn() {
|
||||
safeAutoClose1(finally = { throw CustomTestException() }, action = { throw CustomTestException() })
|
||||
}
|
||||
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
private inline fun throw7throwIn() {
|
||||
safeAutoClose1(finally = { throw CustomTestException() }, action = { throw CustomTestException() })
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = ["testNoKotlinStdlib"])
|
||||
fun testAutoCloseFn() {
|
||||
try {
|
||||
throw7throwFn()
|
||||
} catch (_: CustomTestException) {
|
||||
} catch (le: LinkageError) {
|
||||
throw AssertionError("safeAutoClose still has dependency on kotlin stdlib", le)
|
||||
}
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = ["testNoKotlinStdlib"])
|
||||
fun testAutoCloseIn() {
|
||||
try {
|
||||
throw7throwIn()
|
||||
} catch (_: CustomTestException) {
|
||||
} catch (le: LinkageError) {
|
||||
throw AssertionError("safeAutoClose still has dependency on kotlin stdlib", le)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package ru.landgrafhomyak.utility.highlevel_try_finally
|
||||
|
||||
import kotlin.addSuppressed as kotlinAddSuppressed
|
||||
|
||||
@PublishedApi
|
||||
internal actual object ExceptionsKt {
|
||||
@PublishedApi
|
||||
internal actual fun addSuppressed(e1: Throwable?, e2: Throwable?) {
|
||||
e1!!.kotlinAddSuppressed(e2!!)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user