Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ApolloStore.close() and NormalizedCache.close() #6299

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions gradle/libraries.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ androidx-activity = "androidx.activity:activity-ktx:1.7.2"
androidx-annotation = { group = "androidx.annotation", name = "annotation", version = "1.7.1" }
androidx-core = "androidx.core:core-ktx:1.12.0"
androidx-espresso-idlingresource = { group = "androidx.test.espresso", name = "espresso-idling-resource", version = "3.5.1" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version = "3.5.1" }
androidx-lint-rules = "androidx.lint:lint-gradle:1.0.0-alpha01"
androidx-lint-gradle-plugin = { module = "com.android.lint:com.android.lint.gradle.plugin", version.ref = "android-plugin" }
androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.3.1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,6 @@ annotation class ApolloDeprecatedSince(val version: Version) {
v4_0_0,
v4_0_1,
v4_0_2,
v4_1_1,
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,11 +104,12 @@ public final class com/apollographql/apollo/cache/normalized/api/MemoryCacheFact
public synthetic fun create ()Lcom/apollographql/apollo/cache/normalized/api/NormalizedCache;
}

public abstract class com/apollographql/apollo/cache/normalized/api/NormalizedCache : com/apollographql/apollo/cache/normalized/api/ReadOnlyNormalizedCache {
public abstract class com/apollographql/apollo/cache/normalized/api/NormalizedCache : com/apollographql/apollo/cache/normalized/api/ReadOnlyNormalizedCache, java/io/Closeable {
public static final field Companion Lcom/apollographql/apollo/cache/normalized/api/NormalizedCache$Companion;
public fun <init> ()V
public final fun chain (Lcom/apollographql/apollo/cache/normalized/api/NormalizedCache;)Lcom/apollographql/apollo/cache/normalized/api/NormalizedCache;
public abstract fun clearAll ()V
public fun close ()V
public final fun getNextCache ()Lcom/apollographql/apollo/cache/normalized/api/NormalizedCache;
public abstract fun merge (Lcom/apollographql/apollo/cache/normalized/api/Record;Lcom/apollographql/apollo/cache/normalized/api/CacheHeaders;)Ljava/util/Set;
public abstract fun merge (Ljava/util/Collection;Lcom/apollographql/apollo/cache/normalized/api/CacheHeaders;)Ljava/util/Set;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ abstract class com.apollographql.apollo.cache.normalized.api/CacheKeyResolver :
open fun listOfCacheKeysForField(com.apollographql.apollo.api/CompiledField, com.apollographql.apollo.api/Executable.Variables): kotlin.collections/List<com.apollographql.apollo.cache.normalized.api/CacheKey?>? // com.apollographql.apollo.cache.normalized.api/CacheKeyResolver.listOfCacheKeysForField|listOfCacheKeysForField(com.apollographql.apollo.api.CompiledField;com.apollographql.apollo.api.Executable.Variables){}[0]
}

abstract class com.apollographql.apollo.cache.normalized.api/NormalizedCache : com.apollographql.apollo.cache.normalized.api/ReadOnlyNormalizedCache { // com.apollographql.apollo.cache.normalized.api/NormalizedCache|null[0]
abstract class com.apollographql.apollo.cache.normalized.api/NormalizedCache : com.apollographql.apollo.cache.normalized.api/ReadOnlyNormalizedCache, okio/Closeable { // com.apollographql.apollo.cache.normalized.api/NormalizedCache|null[0]
constructor <init>() // com.apollographql.apollo.cache.normalized.api/NormalizedCache.<init>|<init>(){}[0]

final var nextCache // com.apollographql.apollo.cache.normalized.api/NormalizedCache.nextCache|{}nextCache[0]
Expand All @@ -40,6 +40,7 @@ abstract class com.apollographql.apollo.cache.normalized.api/NormalizedCache : c
abstract fun remove(com.apollographql.apollo.cache.normalized.api/CacheKey, kotlin/Boolean): kotlin/Boolean // com.apollographql.apollo.cache.normalized.api/NormalizedCache.remove|remove(com.apollographql.apollo.cache.normalized.api.CacheKey;kotlin.Boolean){}[0]
abstract fun remove(kotlin/String): kotlin/Int // com.apollographql.apollo.cache.normalized.api/NormalizedCache.remove|remove(kotlin.String){}[0]
final fun chain(com.apollographql.apollo.cache.normalized.api/NormalizedCache): com.apollographql.apollo.cache.normalized.api/NormalizedCache // com.apollographql.apollo.cache.normalized.api/NormalizedCache.chain|chain(com.apollographql.apollo.cache.normalized.api.NormalizedCache){}[0]
open fun close() // com.apollographql.apollo.cache.normalized.api/NormalizedCache.close|close(){}[0]

final object Companion { // com.apollographql.apollo.cache.normalized.api/NormalizedCache.Companion|null[0]
final fun patternToRegex(kotlin/String): kotlin.text/Regex // com.apollographql.apollo.cache.normalized.api/NormalizedCache.Companion.patternToRegex|patternToRegex(kotlin.String){}[0]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.apollographql.apollo.cache.normalized.api

import okio.Closeable
import kotlin.jvm.JvmStatic
import kotlin.jvm.JvmSuppressWildcards
import kotlin.reflect.KClass
Expand All @@ -17,7 +18,7 @@ import kotlin.reflect.KClass
*
* A [NormalizedCache] can choose to store records in any manner.
*/
abstract class NormalizedCache : ReadOnlyNormalizedCache {
abstract class NormalizedCache : ReadOnlyNormalizedCache, Closeable {
var nextCache: NormalizedCache? = null
private set

Expand Down Expand Up @@ -146,5 +147,12 @@ abstract class NormalizedCache : ReadOnlyNormalizedCache {

private val specialChars = "()^$.*?+{}"
}

/**
* Closes resources associated with the cache if any.
* This function must not call `nextCache.close()`, this is done by the caller.
Comment on lines +152 to +153
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's very easy to forget calling nextCache.close() so I went with this but no strong opinion there.

*/
override fun close() {
}
Comment on lines +151 to +156
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I went with SqlNormalizedCache.close() and not SqlNormalizedCacheFactory.close() because I think it makes more sense? Ultimately, SqlNormalizedCacheFactory may be turned into a plain Kotlin function like we have () -> OkHttpClient for lazy initialization, we could have () -> NormalizedCache, this is the same pattern.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's more intuitive than a closeable factory 👍

Now if a driver is passed, or a factory is re-used, apolloStore.close() must be called with caution. Should we call that out, maybe in the KDoc of the SqlNormalizedCacheFactory(driver: SqlDriver) constructor?

}

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ public final class com/apollographql/apollo/cache/normalized/sql/ApolloInitializ
}

public final class com/apollographql/apollo/cache/normalized/sql/SqlNormalizedCache : com/apollographql/apollo/cache/normalized/api/NormalizedCache {
public fun <init> (Lapp/cash/sqldelight/db/SqlDriver;)V
public fun clearAll ()V
public fun close ()V
public fun dump ()Ljava/util/Map;
public fun loadRecord (Ljava/lang/String;Lcom/apollographql/apollo/cache/normalized/api/CacheHeaders;)Lcom/apollographql/apollo/cache/normalized/api/Record;
public fun loadRecords (Ljava/util/Collection;Lcom/apollographql/apollo/cache/normalized/api/CacheHeaders;)Ljava/util/Collection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

// Library unique name: <com.apollographql.apollo:apollo-normalized-cache-sqlite>
final class com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache : com.apollographql.apollo.cache.normalized.api/NormalizedCache { // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache|null[0]
constructor <init>(app.cash.sqldelight.db/SqlDriver) // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache.<init>|<init>(app.cash.sqldelight.db.SqlDriver){}[0]

final fun clearAll() // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache.clearAll|clearAll(){}[0]
final fun close() // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache.close|close(){}[0]
final fun dump(): kotlin.collections/Map<kotlin.reflect/KClass<*>, kotlin.collections/Map<kotlin/String, com.apollographql.apollo.cache.normalized.api/Record>> // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache.dump|dump(){}[0]
final fun loadRecord(kotlin/String, com.apollographql.apollo.cache.normalized.api/CacheHeaders): com.apollographql.apollo.cache.normalized.api/Record? // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache.loadRecord|loadRecord(kotlin.String;com.apollographql.apollo.cache.normalized.api.CacheHeaders){}[0]
final fun loadRecords(kotlin.collections/Collection<kotlin/String>, com.apollographql.apollo.cache.normalized.api/CacheHeaders): kotlin.collections/Collection<com.apollographql.apollo.cache.normalized.api/Record> // com.apollographql.apollo.cache.normalized.sql/SqlNormalizedCache.loadRecords|loadRecords(kotlin.collections.Collection<kotlin.String>;com.apollographql.apollo.cache.normalized.api.CacheHeaders){}[0]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
public final class com/apollographql/apollo/cache/normalized/sql/SqlNormalizedCache : com/apollographql/apollo/cache/normalized/api/NormalizedCache {
public fun <init> (Lapp/cash/sqldelight/db/SqlDriver;)V
public fun clearAll ()V
public fun close ()V
public fun dump ()Ljava/util/Map;
public fun loadRecord (Ljava/lang/String;Lcom/apollographql/apollo/cache/normalized/api/CacheHeaders;)Lcom/apollographql/apollo/cache/normalized/api/Record;
public fun loadRecords (Ljava/util/Collection;Lcom/apollographql/apollo/cache/normalized/api/CacheHeaders;)Ljava/util/Collection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import androidx.sqlite.db.SupportSQLiteOpenHelper
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
import com.apollographql.apollo.cache.normalized.api.NormalizedCacheFactory
import com.apollographql.apollo.cache.normalized.sql.internal.createDriver
import com.apollographql.apollo.cache.normalized.sql.internal.createRecordDatabase
import com.apollographql.apollo.cache.normalized.sql.internal.getSchema
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
import app.cash.sqldelight.db.SqlDriver
Expand Down Expand Up @@ -52,7 +51,7 @@ actual class SqlNormalizedCacheFactory actual constructor(
actual constructor(name: String?): this(createDriver(name, null, getSchema()))

actual override fun create(): NormalizedCache {
return SqlNormalizedCache(createRecordDatabase(driver))
return SqlNormalizedCache(driver)
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import app.cash.sqldelight.db.SqlDriver
import com.apollographql.apollo.cache.normalized.api.NormalizedCache
import com.apollographql.apollo.cache.normalized.api.NormalizedCacheFactory
import com.apollographql.apollo.cache.normalized.sql.internal.createDriver
import com.apollographql.apollo.cache.normalized.sql.internal.createRecordDatabase
import com.apollographql.apollo.cache.normalized.sql.internal.getSchema

actual class SqlNormalizedCacheFactory actual constructor(
Expand All @@ -22,8 +21,6 @@ actual class SqlNormalizedCacheFactory actual constructor(
constructor() : this("apollo.db")

actual override fun create(): NormalizedCache {
return SqlNormalizedCache(
recordDatabase = createRecordDatabase(driver)
)
return SqlNormalizedCache(driver)
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
package com.apollographql.apollo.cache.normalized.sql

import app.cash.sqldelight.db.SqlDriver
import com.apollographql.apollo.cache.normalized.api.ApolloCacheHeaders
import com.apollographql.apollo.cache.normalized.api.ApolloCacheHeaders.EVICT_AFTER_READ
import com.apollographql.apollo.cache.normalized.api.CacheHeaders
import com.apollographql.apollo.cache.normalized.api.CacheKey
import com.apollographql.apollo.cache.normalized.api.NormalizedCache
import com.apollographql.apollo.cache.normalized.api.Record
import com.apollographql.apollo.cache.normalized.sql.internal.JsonRecordDatabase
import com.apollographql.apollo.cache.normalized.sql.internal.RecordDatabase
import com.apollographql.apollo.cache.normalized.sql.internal.checkDatabase
import com.apollographql.apollo.cache.normalized.sql.internal.json.JsonDatabase
import com.apollographql.apollo.exception.apolloExceptionHandler
import kotlin.reflect.KClass

class SqlNormalizedCache internal constructor(
private val recordDatabase: RecordDatabase,
private val driver: SqlDriver,
doChecks: Boolean
) : NormalizedCache() {

constructor(driver: SqlDriver): this(driver, true)

private val recordDatabase: RecordDatabase

init {
if (doChecks) {
checkDatabase(driver)
}
recordDatabase = JsonRecordDatabase(JsonDatabase(driver).jsonQueries)
}

override fun loadRecord(key: String, cacheHeaders: CacheHeaders): Record? {
if (cacheHeaders.hasHeader(ApolloCacheHeaders.MEMORY_CACHE_ONLY)) {
return null
Expand Down Expand Up @@ -212,4 +228,8 @@ class SqlNormalizedCache internal constructor(
recordDatabase.select(chunkedKeys)
}
}

override fun close() {
driver.close()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import app.cash.sqldelight.db.use

internal fun createRecordDatabase(driver: SqlDriver): RecordDatabase {
internal fun checkDatabase(driver: SqlDriver) {
maybeCreateOrMigrateSchema(driver, getSchema())

val tableNames = mutableListOf<String>()
Expand Down Expand Up @@ -39,8 +39,6 @@ internal fun createRecordDatabase(driver: SqlDriver): RecordDatabase {
check(tableNames.isEmpty() || tableNames.contains(expectedTableName)) {
"Apollo: Cannot find the '$expectedTableName' table? (found '$tableNames' instead)"
}

return JsonRecordDatabase(JsonDatabase(driver).jsonQueries)
}

internal fun getSchema(): SqlSchema<QueryResult.Value<Unit>> = JsonDatabase.Schema
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ internal expect fun createDriver(name: String?, baseDir: String?, schema: SqlSch
* will take care of migrations
*
* Others like JVM don't do this automatically. This is when [maybeCreateOrMigrateSchema] is needed
*
* See https://github.com/sqldelight/sqldelight/issues/1901
*/
internal expect fun maybeCreateOrMigrateSchema(driver: SqlDriver, schema: SqlSchema<QueryResult.Value<Unit>>)
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlCursor
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlPreparedStatement
import com.apollographql.apollo.cache.normalized.sql.internal.json.JsonDatabase
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
Expand Down Expand Up @@ -331,7 +332,7 @@ class SqlNormalizedCacheTest {

@Test
fun exceptionCallsExceptionHandler() {
val badCache = SqlNormalizedCache(JsonRecordDatabase(JsonQueries(BadDriver)))
val badCache = SqlNormalizedCache(BadDriver, doChecks = false)
var throwable: Throwable? = null
apolloExceptionHandler = {
throwable = it
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.apollographql.apollo.cache.normalized.sql

import com.apollographql.apollo.cache.normalized.api.NormalizedCacheFactory
import com.apollographql.apollo.cache.normalized.sql.internal.createDriver
import com.apollographql.apollo.cache.normalized.sql.internal.createRecordDatabase
import com.apollographql.apollo.cache.normalized.sql.internal.getSchema
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import com.apollographql.apollo.cache.normalized.api.NormalizedCache
import com.apollographql.apollo.cache.normalized.api.NormalizedCacheFactory
import com.apollographql.apollo.cache.normalized.sql.internal.createDriver
import com.apollographql.apollo.cache.normalized.sql.internal.getSchema
import java.util.Properties

actual class SqlNormalizedCacheFactory actual constructor(
Expand All @@ -32,7 +31,7 @@ actual class SqlNormalizedCacheFactory actual constructor(
actual constructor(name: String?, ) : this(name, null)

actual override fun create(): NormalizedCache {
return SqlNormalizedCache(createRecordDatabase(driver))
return SqlNormalizedCache(driver)
}
}

Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
public abstract interface class com/apollographql/apollo/cache/normalized/ApolloStore {
public abstract interface class com/apollographql/apollo/cache/normalized/ApolloStore : java/io/Closeable {
public abstract fun accessCache (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public abstract fun clearAll ()Z
public abstract fun dispose ()V
public fun close ()V
public fun dispose ()V
public abstract fun dump ()Ljava/util/Map;
public abstract fun getChangedKeys ()Lkotlinx/coroutines/flow/SharedFlow;
public abstract fun normalize (Lcom/apollographql/apollo/api/Operation;Lcom/apollographql/apollo/api/Operation$Data;Lcom/apollographql/apollo/api/CustomScalarAdapters;)Ljava/util/Map;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ final enum class com.apollographql.apollo.cache.normalized/FetchPolicy : kotlin/
final fun values(): kotlin/Array<com.apollographql.apollo.cache.normalized/FetchPolicy> // com.apollographql.apollo.cache.normalized/FetchPolicy.values|values#static(){}[0]
}

abstract interface com.apollographql.apollo.cache.normalized/ApolloStore { // com.apollographql.apollo.cache.normalized/ApolloStore|null[0]
abstract interface com.apollographql.apollo.cache.normalized/ApolloStore : okio/Closeable { // com.apollographql.apollo.cache.normalized/ApolloStore|null[0]
abstract val changedKeys // com.apollographql.apollo.cache.normalized/ApolloStore.changedKeys|{}changedKeys[0]
abstract fun <get-changedKeys>(): kotlinx.coroutines.flow/SharedFlow<kotlin.collections/Set<kotlin/String>> // com.apollographql.apollo.cache.normalized/ApolloStore.changedKeys.<get-changedKeys>|<get-changedKeys>(){}[0]

Expand All @@ -32,7 +32,6 @@ abstract interface com.apollographql.apollo.cache.normalized/ApolloStore { // co
abstract fun <#A1: com.apollographql.apollo.api/Operation.Data> writeOptimisticUpdatesSync(com.apollographql.apollo.api/Operation<#A1>, #A1, com.benasher44.uuid/Uuid, com.apollographql.apollo.api/CustomScalarAdapters = ...): kotlin.collections/Set<kotlin/String> // com.apollographql.apollo.cache.normalized/ApolloStore.writeOptimisticUpdatesSync|writeOptimisticUpdatesSync(com.apollographql.apollo.api.Operation<0:0>;0:0;com.benasher44.uuid.Uuid;com.apollographql.apollo.api.CustomScalarAdapters){0§<com.apollographql.apollo.api.Operation.Data>}[0]
abstract fun <#A1: kotlin/Any?> accessCache(kotlin/Function1<com.apollographql.apollo.cache.normalized.api/NormalizedCache, #A1>): #A1 // com.apollographql.apollo.cache.normalized/ApolloStore.accessCache|accessCache(kotlin.Function1<com.apollographql.apollo.cache.normalized.api.NormalizedCache,0:0>){0§<kotlin.Any?>}[0]
abstract fun clearAll(): kotlin/Boolean // com.apollographql.apollo.cache.normalized/ApolloStore.clearAll|clearAll(){}[0]
abstract fun dispose() // com.apollographql.apollo.cache.normalized/ApolloStore.dispose|dispose(){}[0]
abstract fun dump(): kotlin.collections/Map<kotlin.reflect/KClass<*>, kotlin.collections/Map<kotlin/String, com.apollographql.apollo.cache.normalized.api/Record>> // com.apollographql.apollo.cache.normalized/ApolloStore.dump|dump(){}[0]
abstract fun remove(com.apollographql.apollo.cache.normalized.api/CacheKey, kotlin/Boolean = ...): kotlin/Boolean // com.apollographql.apollo.cache.normalized/ApolloStore.remove|remove(com.apollographql.apollo.cache.normalized.api.CacheKey;kotlin.Boolean){}[0]
abstract fun remove(kotlin.collections/List<com.apollographql.apollo.cache.normalized.api/CacheKey>, kotlin/Boolean = ...): kotlin/Int // com.apollographql.apollo.cache.normalized/ApolloStore.remove|remove(kotlin.collections.List<com.apollographql.apollo.cache.normalized.api.CacheKey>;kotlin.Boolean){}[0]
Expand All @@ -42,6 +41,8 @@ abstract interface com.apollographql.apollo.cache.normalized/ApolloStore { // co
abstract suspend fun <#A1: com.apollographql.apollo.api/Operation.Data> writeOptimisticUpdates(com.apollographql.apollo.api/Operation<#A1>, #A1, com.benasher44.uuid/Uuid, com.apollographql.apollo.api/CustomScalarAdapters = ..., kotlin/Boolean = ...): kotlin.collections/Set<kotlin/String> // com.apollographql.apollo.cache.normalized/ApolloStore.writeOptimisticUpdates|writeOptimisticUpdates(com.apollographql.apollo.api.Operation<0:0>;0:0;com.benasher44.uuid.Uuid;com.apollographql.apollo.api.CustomScalarAdapters;kotlin.Boolean){0§<com.apollographql.apollo.api.Operation.Data>}[0]
abstract suspend fun publish(kotlin.collections/Set<kotlin/String>) // com.apollographql.apollo.cache.normalized/ApolloStore.publish|publish(kotlin.collections.Set<kotlin.String>){}[0]
abstract suspend fun rollbackOptimisticUpdates(com.benasher44.uuid/Uuid, kotlin/Boolean = ...): kotlin.collections/Set<kotlin/String> // com.apollographql.apollo.cache.normalized/ApolloStore.rollbackOptimisticUpdates|rollbackOptimisticUpdates(com.benasher44.uuid.Uuid;kotlin.Boolean){}[0]
open fun close() // com.apollographql.apollo.cache.normalized/ApolloStore.close|close(){}[0]
open fun dispose() // com.apollographql.apollo.cache.normalized/ApolloStore.dispose|dispose(){}[0]
}

final class com.apollographql.apollo.cache.normalized/CacheInfo : com.apollographql.apollo.api/ExecutionContext.Element { // com.apollographql.apollo.cache.normalized/CacheInfo|null[0]
Expand Down
Loading
Loading