diff --git a/gradle/libraries.toml b/gradle/libraries.toml index 52a9f842333..be2f32c0198 100644 --- a/gradle/libraries.toml +++ b/gradle/libraries.toml @@ -24,7 +24,7 @@ guava = "31.1-jre" javaPoet = "1.13.0" jetbrains-annotations = "24.0.1" junit = "4.13.2" -kotlin-plugin-min = "1.8.0" +kotlin-plugin-min = "1.9.0" kotlin-plugin = "2.0.0-RC3" kotlin-plugin-max = "2.0.0-RC3" kotlin-stdlib = "2.0.0-RC3" diff --git a/libraries/apollo-api/api/apollo-api.api b/libraries/apollo-api/api/apollo-api.api index 81b34533310..5a7173abbca 100644 --- a/libraries/apollo-api/api/apollo-api.api +++ b/libraries/apollo-api/api/apollo-api.api @@ -630,9 +630,6 @@ public final class com/apollographql/apollo3/api/FileUpload { } public abstract interface class com/apollographql/apollo3/api/Fragment : com/apollographql/apollo3/api/Executable { - public abstract fun adapter ()Lcom/apollographql/apollo3/api/Adapter; - public abstract fun rootField ()Lcom/apollographql/apollo3/api/CompiledField; - public abstract fun serializeVariables (Lcom/apollographql/apollo3/api/json/JsonWriter;Lcom/apollographql/apollo3/api/CustomScalarAdapters;Z)V } public abstract interface class com/apollographql/apollo3/api/Fragment$Data : com/apollographql/apollo3/api/Executable$Data { @@ -773,12 +770,9 @@ public final class com/apollographql/apollo3/api/ObjectType$Builder { } public abstract interface class com/apollographql/apollo3/api/Operation : com/apollographql/apollo3/api/Executable { - public abstract fun adapter ()Lcom/apollographql/apollo3/api/Adapter; public abstract fun document ()Ljava/lang/String; public abstract fun id ()Ljava/lang/String; public abstract fun name ()Ljava/lang/String; - public abstract fun rootField ()Lcom/apollographql/apollo3/api/CompiledField; - public abstract fun serializeVariables (Lcom/apollographql/apollo3/api/json/JsonWriter;Lcom/apollographql/apollo3/api/CustomScalarAdapters;Z)V } public abstract interface class com/apollographql/apollo3/api/Operation$Data : com/apollographql/apollo3/api/Executable$Data { diff --git a/libraries/apollo-api/api/apollo-api.klib.api b/libraries/apollo-api/api/apollo-api.klib.api index 16655d532af..1cce1b1b440 100644 --- a/libraries/apollo-api/api/apollo-api.klib.api +++ b/libraries/apollo-api/api/apollo-api.klib.api @@ -51,21 +51,15 @@ abstract interface <#A: com.apollographql.apollo3.api/Executable.Data> com.apoll } } abstract interface <#A: com.apollographql.apollo3.api/Fragment.Data> com.apollographql.apollo3.api/Fragment : com.apollographql.apollo3.api/Executable<#A> { // com.apollographql.apollo3.api/Fragment|null[0] - abstract fun adapter(): com.apollographql.apollo3.api/Adapter<#A> // com.apollographql.apollo3.api/Fragment.adapter|adapter(){}[0] - abstract fun rootField(): com.apollographql.apollo3.api/CompiledField // com.apollographql.apollo3.api/Fragment.rootField|rootField(){}[0] - abstract fun serializeVariables(com.apollographql.apollo3.api.json/JsonWriter, com.apollographql.apollo3.api/CustomScalarAdapters, kotlin/Boolean) // com.apollographql.apollo3.api/Fragment.serializeVariables|serializeVariables(com.apollographql.apollo3.api.json.JsonWriter;com.apollographql.apollo3.api.CustomScalarAdapters;kotlin.Boolean){}[0] abstract interface Data : com.apollographql.apollo3.api/Executable.Data // com.apollographql.apollo3.api/Fragment.Data|null[0] } abstract interface <#A: com.apollographql.apollo3.api/Mutation.Data> com.apollographql.apollo3.api/Mutation : com.apollographql.apollo3.api/Operation<#A> { // com.apollographql.apollo3.api/Mutation|null[0] abstract interface Data : com.apollographql.apollo3.api/Operation.Data // com.apollographql.apollo3.api/Mutation.Data|null[0] } abstract interface <#A: com.apollographql.apollo3.api/Operation.Data> com.apollographql.apollo3.api/Operation : com.apollographql.apollo3.api/Executable<#A> { // com.apollographql.apollo3.api/Operation|null[0] - abstract fun adapter(): com.apollographql.apollo3.api/Adapter<#A> // com.apollographql.apollo3.api/Operation.adapter|adapter(){}[0] abstract fun document(): kotlin/String // com.apollographql.apollo3.api/Operation.document|document(){}[0] abstract fun id(): kotlin/String // com.apollographql.apollo3.api/Operation.id|id(){}[0] abstract fun name(): kotlin/String // com.apollographql.apollo3.api/Operation.name|name(){}[0] - abstract fun rootField(): com.apollographql.apollo3.api/CompiledField // com.apollographql.apollo3.api/Operation.rootField|rootField(){}[0] - abstract fun serializeVariables(com.apollographql.apollo3.api.json/JsonWriter, com.apollographql.apollo3.api/CustomScalarAdapters, kotlin/Boolean) // com.apollographql.apollo3.api/Operation.serializeVariables|serializeVariables(com.apollographql.apollo3.api.json.JsonWriter;com.apollographql.apollo3.api.CustomScalarAdapters;kotlin.Boolean){}[0] abstract interface Data : com.apollographql.apollo3.api/Executable.Data // com.apollographql.apollo3.api/Operation.Data|null[0] } abstract interface <#A: com.apollographql.apollo3.api/Query.Data> com.apollographql.apollo3.api/Query : com.apollographql.apollo3.api/Operation<#A> { // com.apollographql.apollo3.api/Query|null[0] diff --git a/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Fragment.kt b/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Fragment.kt index 4cbe9dc7536..31a49a04e1d 100644 --- a/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Fragment.kt +++ b/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Fragment.kt @@ -1,21 +1,11 @@ package com.apollographql.apollo3.api -import com.apollographql.apollo3.api.json.JsonWriter -import okio.IOException - /** * Base interface for a fragment implementation. * Fragments do not have variables per the GraphQL spec but they are inferred from arguments and used when reading the cache * See https://github.com/graphql/graphql-spec/issues/204 for a proposal to add fragment arguments */ interface Fragment : Executable { - @Throws(IOException::class) - override fun serializeVariables(writer: JsonWriter, customScalarAdapters: CustomScalarAdapters, withDefaultValues: Boolean) - - override fun adapter(): Adapter - - override fun rootField(): CompiledField - /** * Marker interface for generated models of this fragment */ diff --git a/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Operation.kt b/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Operation.kt index e3323d2cfae..48f8fa44cdf 100644 --- a/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Operation.kt +++ b/libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo3/api/Operation.kt @@ -1,7 +1,5 @@ package com.apollographql.apollo3.api -import com.apollographql.apollo3.api.json.JsonWriter -import okio.IOException import kotlin.js.JsName /** @@ -29,13 +27,6 @@ interface Operation : Executable { @JsName("operationId") fun id(): String - override fun adapter(): Adapter - - @Throws(IOException::class) - override fun serializeVariables(writer: JsonWriter, customScalarAdapters: CustomScalarAdapters, withDefaultValues: Boolean) - - override fun rootField(): CompiledField - /** * Marker interface for generated models built from data returned by the server in response to this operation. */ diff --git a/libraries/apollo-compiler/src/test/kotlin/com/apollographql/apollo3/compiler/KotlinCompiler.kt b/libraries/apollo-compiler/src/test/kotlin/com/apollographql/apollo3/compiler/KotlinCompiler.kt index d4deb182e1c..0e7c96493fd 100644 --- a/libraries/apollo-compiler/src/test/kotlin/com/apollographql/apollo3/compiler/KotlinCompiler.kt +++ b/libraries/apollo-compiler/src/test/kotlin/com/apollographql/apollo3/compiler/KotlinCompiler.kt @@ -19,7 +19,7 @@ object KotlinCompiler { val result = KotlinCompilation().apply { sources = kotlinFiles - kotlincArguments = kotlincArguments + "-opt-in=kotlin.RequiresOptIn" + kotlincArguments = kotlincArguments + "-opt-in=kotlin.RequiresOptIn" + "-Xskip-prerelease-check" inheritClassPath = true verbose = false messageOutputStream = okio.blackholeSink().buffer().outputStream() diff --git a/libraries/apollo-gradle-plugin/testProjects/kotlin-android-plugin-version/build.gradle.kts b/libraries/apollo-gradle-plugin/testProjects/kotlin-android-plugin-version/build.gradle.kts index 3313c789fd6..8cc9c002a0f 100644 --- a/libraries/apollo-gradle-plugin/testProjects/kotlin-android-plugin-version/build.gradle.kts +++ b/libraries/apollo-gradle-plugin/testProjects/kotlin-android-plugin-version/build.gradle.kts @@ -1,4 +1,3 @@ -import com.android.build.gradle.BaseExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -41,5 +40,6 @@ tasks.withType().configureEach { // Required for Kotlin < 1.6.10 // See https://kotlinlang.org/docs/whatsnew1620.html#compatibility-changes-in-the-xjvm-default-modes freeCompilerArgs += "-Xjvm-default=all" + freeCompilerArgs += "-Xskip-prerelease-check" } } diff --git a/libraries/apollo-testing-support/api/apollo-testing-support.klib.api b/libraries/apollo-testing-support/api/apollo-testing-support.klib.api index b785281cad3..5a104b1a83f 100644 --- a/libraries/apollo-testing-support/api/apollo-testing-support.klib.api +++ b/libraries/apollo-testing-support/api/apollo-testing-support.klib.api @@ -23,6 +23,3 @@ final fun com.apollographql.apollo3.testing/cwd(): kotlin/String // com.apollogr // Targets: [js] final val com.apollographql.apollo3.testing/HostFileSystem // com.apollographql.apollo3.testing/HostFileSystem|{}HostFileSystem[0] final fun (): okio/FileSystem // com.apollographql.apollo3.testing/HostFileSystem.|(){}[0] -// Targets: [wasmJs] -final val com.apollographql.apollo3.testing.internal/empty // com.apollographql.apollo3.testing.internal/empty|{}empty[0] - final fun (): kotlin.js/JsAny // com.apollographql.apollo3.testing.internal/empty.|(){}[0] diff --git a/libraries/apollo-testing-support/src/appleMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt b/libraries/apollo-testing-support/src/appleMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.apple.kt similarity index 100% rename from libraries/apollo-testing-support/src/appleMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt rename to libraries/apollo-testing-support/src/appleMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.apple.kt diff --git a/libraries/apollo-testing-support/src/jsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt b/libraries/apollo-testing-support/src/jsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.js.kt similarity index 69% rename from libraries/apollo-testing-support/src/jsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt rename to libraries/apollo-testing-support/src/jsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.js.kt index 4a0989b2997..ee4088d438a 100644 --- a/libraries/apollo-testing-support/src/jsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt +++ b/libraries/apollo-testing-support/src/jsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.js.kt @@ -6,12 +6,17 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.promise import kotlin.coroutines.CoroutineContext -import kotlin.js.Promise -// https://youtrack.jetbrains.com/issue/KT-21846/ -@Suppress("ACTUAL_WITHOUT_EXPECT", "ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE", "INCOMPATIBLE_MATCHING") @ApolloInternal -actual typealias ApolloTestResult = Promise +actual typealias ApolloTestResult = JsPromiseInterfaceForTesting + +// https://youtrack.jetbrains.com/issue/KT-60561 +@ApolloInternal +@JsName("Promise") +external class JsPromiseInterfaceForTesting { + fun then(onFulfilled: ((Unit) -> Unit), onRejected: ((Throwable) -> Unit)): JsPromiseInterfaceForTesting + fun then(onFulfilled: ((Unit) -> Unit)): JsPromiseInterfaceForTesting +} @ApolloInternal @OptIn(DelicateCoroutinesApi::class) @@ -40,5 +45,5 @@ actual fun runTest( after() } } - } + }.unsafeCast() } diff --git a/libraries/apollo-testing-support/src/jvmMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt b/libraries/apollo-testing-support/src/jvmMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.jvm.kt similarity index 100% rename from libraries/apollo-testing-support/src/jvmMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.kt rename to libraries/apollo-testing-support/src/jvmMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.jvm.kt diff --git a/libraries/apollo-testing-support/src/wasmJsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.wasmJs.kt b/libraries/apollo-testing-support/src/wasmJsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.wasmJs.kt index fef3e688e59..f6501b60de9 100644 --- a/libraries/apollo-testing-support/src/wasmJsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.wasmJs.kt +++ b/libraries/apollo-testing-support/src/wasmJsMain/kotlin/com/apollographql/apollo3/testing/internal/runTest.wasmJs.kt @@ -2,19 +2,24 @@ package com.apollographql.apollo3.testing.internal import com.apollographql.apollo3.annotations.ApolloInternal import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.promise import kotlin.coroutines.CoroutineContext -import kotlin.js.Promise -@Suppress("ACTUAL_WITHOUT_EXPECT", "ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE", "INCOMPATIBLE_MATCHING") @ApolloInternal -actual typealias ApolloTestResult = Promise +actual typealias ApolloTestResult = JsPromiseInterfaceForTesting -/** - * Utility method that executes the given [block] with optional [before] and [after] blocks. - * - * When [skipDelays] is `true`, the block is executed in [kotlinx.coroutines.test.runTest], otherwise in `runBlocking`. - */ +// https://youtrack.jetbrains.com/issue/KT-60561 @ApolloInternal +@JsName("Promise") +external class JsPromiseInterfaceForTesting: JsAny { + fun then(onFulfilled: ((JsAny) -> Unit), onRejected: ((JsAny) -> Unit)): JsPromiseInterfaceForTesting + fun then(onFulfilled: ((JsAny) -> Unit)): JsPromiseInterfaceForTesting +} + +@ApolloInternal +@OptIn(DelicateCoroutinesApi::class) actual fun runTest( skipDelays: Boolean, context: CoroutineContext, @@ -22,7 +27,23 @@ actual fun runTest( after: suspend CoroutineScope.() -> Unit, block: suspend CoroutineScope.() -> Unit, ): ApolloTestResult { - return Promise.resolve(empty) + return if (skipDelays) { + kotlinx.coroutines.test.runTest(context) { + before() + try { + block() + } finally { + after() + } + } + } else { + GlobalScope.promise(context = context) { + before() + try { + block() + } finally { + after() + } + } + }.unsafeCast() } - -val empty: JsAny = js("({})")