From f186a85ed0cbb5afe2a5187355aa02ad8aff656e Mon Sep 17 00:00:00 2001 From: Marco Romano Date: Wed, 29 Nov 2023 10:01:07 +0100 Subject: [PATCH] Rename params in NodeFactories for clarity (#1916) - `context` is now `buildContext` to reflect that it's of type `BuildContext` (and not an android `Context`). - `NODE` generic type param is now `N` to stick with Java convention: https://docs.oracle.com/javase/tutorial/java/generics/types.html. --- .../kotlin/io/element/android/x/MainNode.kt | 2 +- .../createroom/impl/ConfigureRoomFlowNode.kt | 4 +-- .../createroom/impl/CreateRoomFlowNode.kt | 4 +-- .../libraries/architecture/NodeFactories.kt | 27 ++++++++++++------- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/io/element/android/x/MainNode.kt b/app/src/main/kotlin/io/element/android/x/MainNode.kt index d412519d35..94cd7fa7e1 100644 --- a/app/src/main/kotlin/io/element/android/x/MainNode.kt +++ b/app/src/main/kotlin/io/element/android/x/MainNode.kt @@ -52,7 +52,7 @@ class MainNode( override val daggerComponent = (context as DaggerComponentOwner).daggerComponent override fun resolve(navTarget: RootNavTarget, buildContext: BuildContext): Node { - return createNode(context = buildContext) + return createNode(buildContext = buildContext) } @Composable diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/ConfigureRoomFlowNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/ConfigureRoomFlowNode.kt index 3b96ac3edd..98ee988faa 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/ConfigureRoomFlowNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/ConfigureRoomFlowNode.kt @@ -77,11 +77,11 @@ class ConfigureRoomFlowNode @AssistedInject constructor( backstack.push(NavTarget.ConfigureRoom) } } - createNode(context = buildContext, plugins = listOf(callback)) + createNode(buildContext = buildContext, plugins = listOf(callback)) } NavTarget.ConfigureRoom -> { val callbacks = plugins() - createNode(context = buildContext, plugins = callbacks) + createNode(buildContext = buildContext, plugins = callbacks) } } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt index 207ab73e66..7ba85f20c2 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt @@ -72,7 +72,7 @@ class CreateRoomFlowNode @AssistedInject constructor( plugins().forEach { it.onSuccess(roomId) } } } - createNode(context = buildContext, plugins = listOf(callback)) + createNode(buildContext = buildContext, plugins = listOf(callback)) } NavTarget.NewRoom -> { val callback = object : ConfigureRoomNode.Callback { @@ -80,7 +80,7 @@ class CreateRoomFlowNode @AssistedInject constructor( plugins().forEach { it.onSuccess(roomId) } } } - createNode(context = buildContext, plugins = listOf(callback)) + createNode(buildContext = buildContext, plugins = listOf(callback)) } } } diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt index 6073b45351..0e6bf1505d 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt @@ -21,27 +21,36 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -inline fun Node.createNode(context: BuildContext, plugins: List = emptyList()): NODE { +inline fun Node.createNode( + buildContext: BuildContext, + plugins: List = emptyList() +): N { val bindings: NodeFactoriesBindings = bindings() - return bindings.createNode(context, plugins) + return bindings.createNode(buildContext, plugins) } -inline fun Context.createNode(context: BuildContext, plugins: List = emptyList()): NODE { +inline fun Context.createNode( + buildContext: BuildContext, + plugins: List = emptyList() +): N { val bindings: NodeFactoriesBindings = bindings() - return bindings.createNode(context, plugins) + return bindings.createNode(buildContext, plugins) } -inline fun NodeFactoriesBindings.createNode(context: BuildContext, plugins: List = emptyList()): NODE { - val nodeClass = NODE::class.java +inline fun NodeFactoriesBindings.createNode( + buildContext: BuildContext, + plugins: List = emptyList() +): N { + val nodeClass = N::class.java val nodeFactoryMap = nodeFactories() // Note to developers: If you got the error below, make sure to build again after // clearing the cache (sometimes several times) to let Dagger generate the NodeFactory. val nodeFactory = nodeFactoryMap[nodeClass] ?: error("Cannot find NodeFactory for ${nodeClass.name}.") @Suppress("UNCHECKED_CAST") - val castedNodeFactory = nodeFactory as? AssistedNodeFactory - val node = castedNodeFactory?.create(context, plugins) - return node as NODE + val castedNodeFactory = nodeFactory as? AssistedNodeFactory + val node = castedNodeFactory?.create(buildContext, plugins) + return node as N } interface NodeFactoriesBindings {