Merge pull request '0.10.1 - 2025-02-23' (!82) from dev into master
Reviewed-on: #82
This commit is contained in:
commit
a89b2830cf
.github/workflows
CHANGELOG.mdREADME.mdbuild.gradle.ktsdataforge-data/src/commonMain/kotlin/space/kscience/dataforge/data
dataforge-io
dataforge-meta
README.md
gradle.propertiesapi
src
commonMain/kotlin/space/kscience/dataforge/meta
commonTest/kotlin/space/kscience/dataforge/meta
37
.github/workflows/build.yml
vendored
37
.github/workflows/build.yml
vendored
@ -13,29 +13,14 @@ jobs:
|
||||
runs-on: ${{matrix.os}}
|
||||
timeout-minutes: 40
|
||||
steps:
|
||||
- name: Checkout the repo
|
||||
uses: actions/checkout@v2
|
||||
- name: Set up JDK
|
||||
uses: DeLaGuardo/setup-graalvm@4.0
|
||||
with:
|
||||
graalvm: 21.2.0
|
||||
java: java17
|
||||
arch: amd64
|
||||
- name: Cache gradle
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
- name: Cache konan
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.konan
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
- name: Build
|
||||
run: ./gradlew build --build-cache --no-daemon --stacktrace
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
||||
|
17
CHANGELOG.md
17
CHANGELOG.md
@ -14,6 +14,23 @@
|
||||
|
||||
### Security
|
||||
|
||||
## 0.10.1 - 2025-02-23
|
||||
|
||||
### Added
|
||||
|
||||
- Relax requirements for `withDefault` and `view`. Now they could be used with `MutableMetaProvider`
|
||||
- Add `MutableMetaProvider` to `MutableMeta` converter `asMutableMeta`.
|
||||
|
||||
### Changed
|
||||
|
||||
- Implementation of `Meta::withDefault`
|
||||
- `scheme` extension limited to `MutableMeta` to avoid resolution ambiguity with `Scheme`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Incorrect work of `MetaWithDefault::getValue`
|
||||
- Incorrect work of scheme delegate
|
||||
|
||||
## 0.10.0 - 2025-01-19
|
||||
|
||||
### Added
|
||||
|
@ -106,6 +106,7 @@ In this section, we will try to cover DataForge main ideas in the form of questi
|
||||
> **Maturity**: PROTOTYPE
|
||||
|
||||
### [dataforge-workspace](dataforge-workspace)
|
||||
> A framework for pull-based data processing
|
||||
>
|
||||
> **Maturity**: EXPERIMENTAL
|
||||
|
||||
|
@ -9,7 +9,7 @@ plugins {
|
||||
|
||||
allprojects {
|
||||
group = "space.kscience"
|
||||
version = "0.10.0"
|
||||
version = "0.10.1"
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
@ -77,6 +77,7 @@ public class FilteredDataTree<T>(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(DFInternal::class)
|
||||
public fun <T> DataTree<T>.filterData(
|
||||
predicate: DataFilter,
|
||||
): FilteredDataTree<T> = FilteredDataTree(this, predicate, Name.EMPTY)
|
||||
): DataTree<T> = FilteredDataTree(this, predicate, Name.EMPTY)
|
@ -15,7 +15,7 @@ IO module
|
||||
|
||||
## Artifact:
|
||||
|
||||
The Maven coordinates of this project are `space.kscience:dataforge-io:0.10.0`.
|
||||
The Maven coordinates of this project are `space.kscience:dataforge-io:0.10.1`.
|
||||
|
||||
**Gradle Kotlin DSL:**
|
||||
```kotlin
|
||||
@ -25,6 +25,6 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("space.kscience:dataforge-io:0.10.0")
|
||||
implementation("space.kscience:dataforge-io:0.10.1")
|
||||
}
|
||||
```
|
||||
|
@ -4,8 +4,6 @@ plugins {
|
||||
|
||||
description = "IO module"
|
||||
|
||||
val ioVersion = "0.6.0"
|
||||
|
||||
kscience {
|
||||
jvm()
|
||||
js()
|
||||
@ -17,8 +15,8 @@ kscience {
|
||||
}
|
||||
dependencies {
|
||||
api(projects.dataforgeContext)
|
||||
api("org.jetbrains.kotlinx:kotlinx-io-core:$ioVersion")
|
||||
api("org.jetbrains.kotlinx:kotlinx-io-bytestring:$ioVersion")
|
||||
api(spclibs.kotlinx.io.core)
|
||||
api(spclibs.kotlinx.io.bytestring)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ Meta definition and basic operations on meta
|
||||
|
||||
## Artifact:
|
||||
|
||||
The Maven coordinates of this project are `space.kscience:dataforge-meta:0.10.0`.
|
||||
The Maven coordinates of this project are `space.kscience:dataforge-meta:0.10.1`.
|
||||
|
||||
**Gradle Kotlin DSL:**
|
||||
```kotlin
|
||||
@ -23,6 +23,6 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("space.kscience:dataforge-meta:0.10.0")
|
||||
implementation("space.kscience:dataforge-meta:0.10.1")
|
||||
}
|
||||
```
|
||||
|
@ -313,7 +313,7 @@ public final class space/kscience/dataforge/meta/MetaKt {
|
||||
public static final fun iterator (Lspace/kscience/dataforge/meta/Meta;)Ljava/util/Iterator;
|
||||
public static final fun nodeSequence (Lspace/kscience/dataforge/meta/Meta;)Lkotlin/sequences/Sequence;
|
||||
public static final fun valueSequence (Lspace/kscience/dataforge/meta/Meta;)Lkotlin/sequences/Sequence;
|
||||
public static final fun withDefault (Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/meta/MetaProvider;)Lspace/kscience/dataforge/meta/Meta;
|
||||
public static final fun withDefault (Lspace/kscience/dataforge/meta/MetaProvider;Lspace/kscience/dataforge/meta/MetaProvider;)Lspace/kscience/dataforge/meta/Meta;
|
||||
}
|
||||
|
||||
public abstract interface class space/kscience/dataforge/meta/MetaProvider : space/kscience/dataforge/meta/ValueProvider {
|
||||
@ -502,7 +502,8 @@ public final class space/kscience/dataforge/meta/MutableMetaKt {
|
||||
public static synthetic fun setIndexed$default (Lspace/kscience/dataforge/meta/MutableMetaProvider;Lspace/kscience/dataforge/names/Name;Ljava/lang/Iterable;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
|
||||
public static final fun toMutableMeta (Lspace/kscience/dataforge/meta/Meta;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun update (Lspace/kscience/dataforge/meta/MutableMetaProvider;Lspace/kscience/dataforge/meta/Meta;)V
|
||||
public static final fun withDefault (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/MetaProvider;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun withDefault (Lspace/kscience/dataforge/meta/MutableMetaProvider;Lspace/kscience/dataforge/meta/MetaProvider;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun withDefaults (Lspace/kscience/dataforge/meta/MutableMetaProvider;[Lspace/kscience/dataforge/meta/MetaProvider;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
}
|
||||
|
||||
public abstract interface class space/kscience/dataforge/meta/MutableMetaProvider : space/kscience/dataforge/meta/MetaProvider, space/kscience/dataforge/meta/MutableValueProvider {
|
||||
@ -521,8 +522,9 @@ public final class space/kscience/dataforge/meta/MutableMetaSerializer : kotlinx
|
||||
}
|
||||
|
||||
public final class space/kscience/dataforge/meta/MutableMetaViewKt {
|
||||
public static final fun view (Lspace/kscience/dataforge/meta/MutableMeta;Ljava/lang/String;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun view (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun asMutableMeta (Lspace/kscience/dataforge/meta/MutableMetaProvider;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun view (Lspace/kscience/dataforge/meta/MutableMetaProvider;Ljava/lang/String;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
public static final fun view (Lspace/kscience/dataforge/meta/MutableMetaProvider;Lspace/kscience/dataforge/names/Name;)Lspace/kscience/dataforge/meta/MutableMeta;
|
||||
}
|
||||
|
||||
public abstract interface class space/kscience/dataforge/meta/MutableTypedMeta : space/kscience/dataforge/meta/MutableMeta, space/kscience/dataforge/meta/TypedMeta {
|
||||
@ -625,9 +627,9 @@ public final class space/kscience/dataforge/meta/SchemeKt {
|
||||
public static final fun listOfScheme (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static synthetic fun listOfScheme$default (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static synthetic fun listOfScheme$default (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static final fun scheme (Lspace/kscience/dataforge/meta/MutableMetaProvider;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static final fun scheme (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static final fun scheme (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static synthetic fun scheme$default (Lspace/kscience/dataforge/meta/MutableMetaProvider;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static synthetic fun scheme$default (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static synthetic fun scheme$default (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;ILjava/lang/Object;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static final fun schemeOrNull (Lspace/kscience/dataforge/meta/MutableMeta;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||
public static final fun schemeOrNull (Lspace/kscience/dataforge/meta/Scheme;Lspace/kscience/dataforge/meta/SchemeSpec;Lspace/kscience/dataforge/names/Name;)Lkotlin/properties/ReadWriteProperty;
|
||||
|
@ -249,11 +249,26 @@ public inline fun <reified E : Enum<E>> Meta?.enum(): E? = this?.value?.let {
|
||||
public val Meta?.stringList: List<String>? get() = this?.value?.list?.map { it.string }
|
||||
|
||||
/**
|
||||
* Create a provider that uses given provider for default values if those are not found in this provider
|
||||
* Create a provider that uses a given provider for default values if those are not found in this provider
|
||||
*/
|
||||
public fun Meta.withDefault(default: MetaProvider?): Meta = if (default == null) {
|
||||
public fun MetaProvider.withDefault(default: MetaProvider?): Meta = if (default == null && this is Meta) {
|
||||
this
|
||||
} else {
|
||||
//TODO optimize
|
||||
toMutableMeta().withDefault(default)
|
||||
object : Meta {
|
||||
override val value: Value?
|
||||
get() = this@withDefault.getValue(Name.EMPTY) ?: default?.getValue(Name.EMPTY)
|
||||
|
||||
override val items: Map<NameToken, Meta>
|
||||
get() = buildMap {
|
||||
default?.get(Name.EMPTY)?.items?.let { putAll(it) }
|
||||
this@withDefault.get(Name.EMPTY)?.items?.let { putAll(it) }
|
||||
}
|
||||
|
||||
override fun toString(): String = Meta.toString(this)
|
||||
|
||||
override fun equals(other: Any?): Boolean = Meta.equals(this, other as? Meta)
|
||||
|
||||
override fun hashCode(): Int = Meta.hashCode(this)
|
||||
|
||||
}
|
||||
}
|
@ -37,7 +37,7 @@ public interface MutableMeta : Meta, MutableMetaProvider {
|
||||
override val items: Map<NameToken, MutableMeta>
|
||||
|
||||
/**
|
||||
* Get or set value of this node
|
||||
* Get or set the value of this node
|
||||
*/
|
||||
override var value: Value?
|
||||
|
||||
@ -437,8 +437,8 @@ public inline fun Meta.copy(modification: MutableMeta.() -> Unit = {}): Meta = M
|
||||
}
|
||||
|
||||
private class MutableMetaWithDefault(
|
||||
val source: MutableMeta, val default: MetaProvider, val rootName: Name,
|
||||
) : MutableMeta by source {
|
||||
val source: MutableMetaProvider, val default: MetaProvider, val rootName: Name,
|
||||
) : MutableMeta {
|
||||
override val items: Map<NameToken, MutableMeta>
|
||||
get() {
|
||||
val sourceKeys: Collection<NameToken> = source[rootName]?.items?.keys ?: emptyList()
|
||||
@ -457,15 +457,37 @@ private class MutableMetaWithDefault(
|
||||
|
||||
override fun get(name: Name): MutableMeta = MutableMetaWithDefault(source, default, rootName + name)
|
||||
|
||||
override fun set(name: Name, node: Meta?) {
|
||||
source[name] = node
|
||||
}
|
||||
|
||||
override fun setValue(name: Name, value: Value?) {
|
||||
source.setValue(name, value)
|
||||
}
|
||||
|
||||
override fun getOrCreate(name: Name): MutableMeta =
|
||||
MutableMetaWithDefault(source, default, rootName + name)
|
||||
|
||||
override fun toString(): String = Meta.toString(this)
|
||||
override fun equals(other: Any?): Boolean = Meta.equals(this, other as? Meta)
|
||||
override fun hashCode(): Int = Meta.hashCode(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a mutable item provider that uses given provider for default values if those are not found in this provider.
|
||||
* Create a mutable item provider that uses a given provider for default values if those are not found in this provider.
|
||||
* Changes are propagated only to this provider.
|
||||
*/
|
||||
public fun MutableMeta.withDefault(default: MetaProvider?): MutableMeta = if (default == null) {
|
||||
this
|
||||
} else MutableMetaWithDefault(this, default, Name.EMPTY)
|
||||
public fun MutableMetaProvider.withDefault(
|
||||
default: MetaProvider?
|
||||
): MutableMeta = if (default == null) {
|
||||
(this as? MutableMeta) ?: asMutableMeta()
|
||||
} else {
|
||||
MutableMetaWithDefault(this, default, Name.EMPTY)
|
||||
}
|
||||
|
||||
/**
|
||||
* Use multiple default providers. Providers are queried in order of appearance. The first non-null value is returned
|
||||
*/
|
||||
public fun MutableMetaProvider.withDefaults(vararg defaults: MetaProvider): MutableMeta = withDefault { name ->
|
||||
defaults.firstNotNullOfOrNull { it[name] }
|
||||
}
|
@ -9,7 +9,7 @@ import space.kscience.dataforge.names.plus
|
||||
* A [Meta] child proxy that creates required nodes on value write
|
||||
*/
|
||||
private class MutableMetaView(
|
||||
val origin: MutableMeta,
|
||||
val origin: MutableMetaProvider,
|
||||
val path: Name
|
||||
) : MutableMeta {
|
||||
|
||||
@ -42,6 +42,11 @@ private class MutableMetaView(
|
||||
* The difference between this method and regular [getOrCreate] is that [getOrCreate] always creates and attaches node
|
||||
* even if it is empty.
|
||||
*/
|
||||
public fun MutableMeta.view(name: Name): MutableMeta = MutableMetaView(this, name)
|
||||
public fun MutableMetaProvider.view(name: Name): MutableMeta = MutableMetaView(this, name)
|
||||
|
||||
public fun MutableMeta.view(name: String): MutableMeta = view(name.parseAsName())
|
||||
public fun MutableMetaProvider.view(name: String): MutableMeta = view(name.parseAsName())
|
||||
|
||||
/**
|
||||
* Create a view of root node, thus effectively representing [MutableMetaProvider] as [MutableMeta]
|
||||
*/
|
||||
public fun MutableMetaProvider.asMutableMeta(): MutableMeta = view(Name.EMPTY)
|
@ -219,15 +219,15 @@ public fun <T : Scheme> Configurable.updateWith(
|
||||
|
||||
|
||||
/**
|
||||
* A delegate that uses a [MetaReader] to wrap a child of this provider
|
||||
* A delegate that uses a [SchemeSpec] to wrap a child of this provider
|
||||
*/
|
||||
public fun <T : Scheme> MutableMetaProvider.scheme(
|
||||
public fun <T : Scheme> MutableMeta.scheme(
|
||||
spec: SchemeSpec<T>,
|
||||
key: Name? = null,
|
||||
): ReadWriteProperty<Any?, T> = object : ReadWriteProperty<Any?, T> {
|
||||
override fun getValue(thisRef: Any?, property: KProperty<*>): T {
|
||||
val name = key ?: property.name.asName()
|
||||
val node = get(name) ?: MutableMeta().also { set(name, it) }
|
||||
val node = getOrCreate(name)
|
||||
return spec.write(node)
|
||||
}
|
||||
|
||||
@ -243,7 +243,7 @@ public fun <T : Scheme> Scheme.scheme(
|
||||
): ReadWriteProperty<Any?, T> = meta.scheme(spec, key)
|
||||
|
||||
/**
|
||||
* A delegate that uses a [MetaReader] to wrap a child of this provider.
|
||||
* A delegate that uses a [SchemeSpec] to wrap a child of this provider.
|
||||
* Returns null if meta with given name does not exist.
|
||||
*/
|
||||
public fun <T : Scheme> MutableMeta.schemeOrNull(
|
||||
|
@ -6,7 +6,7 @@ package space.kscience.dataforge.meta
|
||||
public fun Value.isNull(): Boolean = this == Null
|
||||
|
||||
/**
|
||||
* Check if value is list.
|
||||
* Check if the value is a list.
|
||||
*/
|
||||
public fun Value.isList(): Boolean = this.type == ValueType.LIST
|
||||
|
||||
|
@ -3,9 +3,9 @@ package space.kscience.dataforge.meta
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class MutableMetaTest{
|
||||
class MutableMetaTest {
|
||||
@Test
|
||||
fun remove(){
|
||||
fun remove() {
|
||||
val meta = MutableMeta {
|
||||
"aNode" put {
|
||||
"innerNode" put {
|
||||
@ -19,4 +19,26 @@ class MutableMetaTest{
|
||||
meta.remove("aNode.c")
|
||||
assertEquals(meta["aNode.c"], null)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun withDefault() {
|
||||
val metaWithDefault = MutableMeta().withDefault(
|
||||
Meta {
|
||||
"a" put {
|
||||
value = 22.asValue()
|
||||
"b" put true
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
assertEquals(22, metaWithDefault["a"].int)
|
||||
assertEquals(true, metaWithDefault.getValue("a.b")?.boolean)
|
||||
|
||||
metaWithDefault["a.b"] = "false"
|
||||
|
||||
assertEquals(false, metaWithDefault["a.b"]?.boolean)
|
||||
assertEquals(false, metaWithDefault.getValue("a.b")?.boolean)
|
||||
assertEquals(22, metaWithDefault.getValue("a")?.int)
|
||||
|
||||
}
|
||||
}
|
@ -26,18 +26,17 @@ internal class TestScheme : Scheme() {
|
||||
companion object : SchemeSpec<TestScheme>(::TestScheme)
|
||||
}
|
||||
|
||||
private class SchemeWithInit: Scheme(){
|
||||
private class SchemeWithInit : Scheme() {
|
||||
init {
|
||||
set("initial", "initialValue")
|
||||
}
|
||||
|
||||
var initial by string()
|
||||
|
||||
companion object: SchemeSpec<SchemeWithInit>(::SchemeWithInit)
|
||||
companion object : SchemeSpec<SchemeWithInit>(::SchemeWithInit)
|
||||
}
|
||||
|
||||
|
||||
|
||||
class SpecificationTest {
|
||||
|
||||
// @Test
|
||||
@ -126,11 +125,11 @@ class SpecificationTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testListSubscription(){
|
||||
fun testListSubscription() {
|
||||
val scheme = TestScheme.empty()
|
||||
var value: Value? = null
|
||||
scheme.v = ListValue(0.0,0.0,0.0)
|
||||
scheme.useProperty(TestScheme::v){
|
||||
scheme.v = ListValue(0.0, 0.0, 0.0)
|
||||
scheme.useProperty(TestScheme::v) {
|
||||
value = it
|
||||
}
|
||||
scheme.v = ListValue(1.0, 2.0, 3.0)
|
||||
@ -138,17 +137,17 @@ class SpecificationTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSubScheme(){
|
||||
fun testSubScheme() {
|
||||
val scheme = TestScheme.empty()
|
||||
|
||||
scheme.sub.subValue = "aaa"
|
||||
|
||||
assertEquals("aaa",scheme.sub.subValue)
|
||||
assertEquals("aaa", scheme.sub.subValue)
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun testSchemeWithInit(){
|
||||
fun testSchemeWithInit() {
|
||||
val scheme = SchemeWithInit()
|
||||
assertEquals("initialValue", scheme.initial)
|
||||
scheme.initial = "none"
|
||||
|
@ -6,5 +6,6 @@ org.gradle.jvmargs=-Xmx4096m
|
||||
kotlin.mpp.stability.nowarn=true
|
||||
kotlin.native.ignoreDisabledTargets=true
|
||||
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
|
||||
kotlin.native.enableKlibsCrossCompilation=true
|
||||
|
||||
toolsVersion=0.16.1-kotlin-2.1.0
|
Loading…
x
Reference in New Issue
Block a user