Skip to content

Commit

Permalink
Split core artifacts (slackhq#490)
Browse files Browse the repository at this point in the history
This splits up our current `core` artifact into four separate artifacts
and takes some inspiration from compose's naming.

- `circuit-runtime`: common runtime components like Screen, Navigator,
etc.
- `circuit-runtime-presenter`: the `Presenter` API, depends on
`circuit-runtime`.
- `circuit-runtime-ui`: the `Ui` API, depends on `circuit-ui`.
- `circuit-foundation`: the circuit foundational APIs like
`CircuitConfig`, `CircuitContent`, etc. Depends on the first three.

The goal in this is to allow more granular dependencies and easier
building against subsets of the API. For example, this would allow a
presenter implementation to easily live in a standalone module that
doesn't depend on any UI dependencies. Vice versa for UI
implementations.

Where I think this could really shine is in multiplatform projects where
Circuit's UI APIs may be more or less abstracted away in service of
using native UI, like in iOS.

Resolves slackhq#450

### `circuit-runtime` artifact
| Before | After |
| ------ | ----- |
| com.slack.circuit.CircuitContext |
com.slack.circuit.runtime.CircuitContext |
| com.slack.circuit.CircuitUiState |
com.slack.circuit.runtime.CircuitUiState |
| com.slack.circuit.CircuitUiEvent |
com.slack.circuit.runtime.CircuitUiEvent |
| com.slack.circuit.Navigator | com.slack.circuit.runtime.Navigator |
| com.slack.circuit.Screen | com.slack.circuit.runtime.Screen |

### `circuit-runtime-presenter` artifact
| Before | After |
| ------ | ----- |
| com.slack.circuit.Presenter |
com.slack.circuit.runtime.presenter.Presenter |

### `circuit-runtime-ui` artifact
| Before | After |
| ------ | ----- |
| com.slack.circuit.Ui | com.slack.circuit.runtime.presenter.Ui |

### `circuit-foundation` artifact
| Before | After |
| ------ | ----- |
| com.slack.circuit.CircuitCompositionLocals |
com.slack.circuit.foundation.CircuitCompositionLocals |
| com.slack.circuit.CircuitConfig |
com.slack.circuit.foundation.CircuitConfig |
| com.slack.circuit.CircuitContent |
com.slack.circuit.foundation.CircuitContent |
| com.slack.circuit.EventListener |
com.slack.circuit.foundation.EventListener |
| com.slack.circuit.NavEvent | com.slack.circuit.foundation.NavEvent |
| com.slack.circuit.onNavEvent | com.slack.circuit.foundation.onNavEvent
|
| com.slack.circuit.NavigableCircuitContent |
com.slack.circuit.foundation.NavigableCircuitContent |
| com.slack.circuit.NavigatorDefaults |
com.slack.circuit.foundation.NavigatorDefaults |
| com.slack.circuit.rememberCircuitNavigator |
com.slack.circuit.foundation.rememberCircuitNavigator |
| com.slack.circuit.push | com.slack.circuit.foundation.push |
| com.slack.circuit.screen | com.slack.circuit.foundation.screen |
  • Loading branch information
ZacSweers authored Mar 16, 2023
1 parent 305a2f9 commit 416beb1
Show file tree
Hide file tree
Showing 87 changed files with 17,144 additions and 638 deletions.
35 changes: 35 additions & 0 deletions backstack/src/androidMain/baseline-prof.txt

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion circuit-codegen-annotations/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@ kotlin {
// endregion

sourceSets {
commonMain { dependencies { api(projects.circuit) } }
commonMain {
dependencies {
// Only here for docs linking
compileOnly(projects.circuitFoundation)
api(projects.circuitRuntime)
}
}
val commonJvm =
maybeCreate("commonJvm").apply {
dependencies {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,50 +1,9 @@
androidx.activity:activity-compose
androidx.activity:activity-ktx
androidx.activity:activity
androidx.annotation:annotation-experimental
androidx.annotation:annotation
androidx.arch.core:core-common
androidx.arch.core:core-runtime
androidx.autofill:autofill
androidx.collection:collection
androidx.compose.animation:animation-core
androidx.compose.animation:animation
androidx.compose.foundation:foundation-layout
androidx.compose.foundation:foundation
androidx.compose.runtime:runtime-saveable
androidx.compose.runtime:runtime
androidx.compose.ui:ui-geometry
androidx.compose.ui:ui-graphics
androidx.compose.ui:ui-text
androidx.compose.ui:ui-unit
androidx.compose.ui:ui-util
androidx.compose.ui:ui
androidx.concurrent:concurrent-futures
androidx.core:core-ktx
androidx.core:core
androidx.customview:customview-poolingcontainer
androidx.lifecycle:lifecycle-common-java8
androidx.lifecycle:lifecycle-common
androidx.lifecycle:lifecycle-livedata-core
androidx.lifecycle:lifecycle-runtime-ktx
androidx.lifecycle:lifecycle-runtime
androidx.lifecycle:lifecycle-viewmodel-compose
androidx.lifecycle:lifecycle-viewmodel-ktx
androidx.lifecycle:lifecycle-viewmodel-savedstate
androidx.lifecycle:lifecycle-viewmodel
androidx.profileinstaller:profileinstaller
androidx.savedstate:savedstate-ktx
androidx.savedstate:savedstate
androidx.startup:startup-runtime
androidx.tracing:tracing
androidx.versionedparcelable:versionedparcelable
com.google.dagger:dagger
com.google.guava:listenablefuture
com.squareup.anvil:annotations
javax.inject:javax.inject
org.jetbrains.compose.runtime:runtime-saveable
org.jetbrains.compose.runtime:runtime
org.jetbrains.compose.ui:ui
org.jetbrains.kotlin:kotlin-bom
org.jetbrains.kotlin:kotlin-stdlib-jdk7
org.jetbrains.kotlin:kotlin-stdlib-jdk8
Expand Down
24 changes: 0 additions & 24 deletions circuit-codegen-annotations/dependencies/jvmRuntimeClasspath.txt
Original file line number Diff line number Diff line change
@@ -1,30 +1,8 @@
com.google.dagger:dagger
com.squareup.anvil:annotations
javax.inject:javax.inject
org.jetbrains.compose.animation:animation-core-desktop
org.jetbrains.compose.animation:animation-core
org.jetbrains.compose.animation:animation-desktop
org.jetbrains.compose.animation:animation
org.jetbrains.compose.foundation:foundation-desktop
org.jetbrains.compose.foundation:foundation-layout-desktop
org.jetbrains.compose.foundation:foundation-layout
org.jetbrains.compose.foundation:foundation
org.jetbrains.compose.runtime:runtime-desktop
org.jetbrains.compose.runtime:runtime-saveable-desktop
org.jetbrains.compose.runtime:runtime-saveable
org.jetbrains.compose.runtime:runtime
org.jetbrains.compose.ui:ui-desktop
org.jetbrains.compose.ui:ui-geometry-desktop
org.jetbrains.compose.ui:ui-geometry
org.jetbrains.compose.ui:ui-graphics-desktop
org.jetbrains.compose.ui:ui-graphics
org.jetbrains.compose.ui:ui-text-desktop
org.jetbrains.compose.ui:ui-text
org.jetbrains.compose.ui:ui-unit-desktop
org.jetbrains.compose.ui:ui-unit
org.jetbrains.compose.ui:ui-util-desktop
org.jetbrains.compose.ui:ui-util
org.jetbrains.compose.ui:ui
org.jetbrains.kotlin:kotlin-bom
org.jetbrains.kotlin:kotlin-stdlib-jdk7
org.jetbrains.kotlin:kotlin-stdlib-jdk8
Expand All @@ -34,6 +12,4 @@ org.jetbrains.kotlinx:atomicfu
org.jetbrains.kotlinx:kotlinx-coroutines-bom
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm
org.jetbrains.kotlinx:kotlinx-coroutines-core
org.jetbrains.skiko:skiko-awt
org.jetbrains.skiko:skiko
org.jetbrains:annotations
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
package com.slack.circuit.codegen.annotations

import androidx.compose.runtime.Composable
import com.slack.circuit.CircuitConfig
import com.slack.circuit.CircuitUiState
import com.slack.circuit.Navigator
import com.slack.circuit.Presenter
import com.slack.circuit.Screen
import com.slack.circuit.Ui
import com.slack.circuit.foundation.CircuitConfig
import com.slack.circuit.runtime.CircuitUiState
import com.slack.circuit.runtime.Navigator
import com.slack.circuit.runtime.Screen
import com.slack.circuit.runtime.presenter.Presenter
import com.slack.circuit.runtime.ui.Ui
import com.squareup.anvil.annotations.ContributesMultibinding
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,20 @@ import java.util.Locale
import javax.inject.Inject
import javax.inject.Provider

private const val CIRCUIT_BASE_PACKAGE = "com.slack.circuit"
private const val CIRCUIT_RUNTIME_BASE_PACKAGE = "com.slack.circuit.runtime"
private const val CIRCUIT_RUNTIME_UI_PACKAGE = "$CIRCUIT_RUNTIME_BASE_PACKAGE.ui"
private const val CIRCUIT_RUNTIME_PRESENTER_PACKAGE = "$CIRCUIT_RUNTIME_BASE_PACKAGE.presenter"
private val MODIFIER = ClassName("androidx.compose.ui", "Modifier")
private val CIRCUIT_INJECT_ANNOTATION =
ClassName("$CIRCUIT_BASE_PACKAGE.codegen.annotations", "CircuitInject")
private val CIRCUIT_PRESENTER = ClassName(CIRCUIT_BASE_PACKAGE, "Presenter")
ClassName("com.slack.circuit.codegen.annotations", "CircuitInject")
private val CIRCUIT_PRESENTER = ClassName(CIRCUIT_RUNTIME_PRESENTER_PACKAGE, "Presenter")
private val CIRCUIT_PRESENTER_FACTORY = CIRCUIT_PRESENTER.nestedClass("Factory")
private val CIRCUIT_UI = ClassName(CIRCUIT_BASE_PACKAGE, "Ui")
private val CIRCUIT_UI = ClassName(CIRCUIT_RUNTIME_UI_PACKAGE, "Ui")
private val CIRCUIT_UI_FACTORY = CIRCUIT_UI.nestedClass("Factory")
private val CIRCUIT_UI_STATE = ClassName(CIRCUIT_BASE_PACKAGE, "CircuitUiState")
private val SCREEN = ClassName(CIRCUIT_BASE_PACKAGE, "Screen")
private val NAVIGATOR = ClassName(CIRCUIT_BASE_PACKAGE, "Navigator")
private val CIRCUIT_CONTEXT = ClassName(CIRCUIT_BASE_PACKAGE, "CircuitContext")
private val CIRCUIT_UI_STATE = ClassName(CIRCUIT_RUNTIME_BASE_PACKAGE, "CircuitUiState")
private val SCREEN = ClassName(CIRCUIT_RUNTIME_BASE_PACKAGE, "Screen")
private val NAVIGATOR = ClassName(CIRCUIT_RUNTIME_BASE_PACKAGE, "Navigator")
private val CIRCUIT_CONTEXT = ClassName(CIRCUIT_RUNTIME_BASE_PACKAGE, "CircuitContext")
private const val FACTORY = "Factory"

@AutoService(SymbolProcessorProvider::class)
Expand Down Expand Up @@ -236,7 +238,7 @@ private class CircuitSymbolProcessor(
FactoryType.PRESENTER ->
CodeBlock.of(
"%M·{·%M(%L)·}",
MemberName("com.slack.circuit", "presenterOf"),
MemberName(CIRCUIT_RUNTIME_PRESENTER_PACKAGE, "presenterOf"),
MemberName(packageName, name),
assistedParams
)
Expand Down Expand Up @@ -299,7 +301,7 @@ private class CircuitSymbolProcessor(
}
CodeBlock.of(
"%M<%T>·{·%L,·modifier·->·%M(%L%L%L)·}",
MemberName("com.slack.circuit", "ui"),
MemberName(CIRCUIT_RUNTIME_UI_PACKAGE, "ui"),
stateType,
stateArg,
MemberName(packageName, name),
Expand Down Expand Up @@ -343,7 +345,16 @@ private class CircuitSymbolProcessor(
else -> null
}
}
.first()
.firstOrNull()
?: run {
logger.error(
"Factory must be for a UI or Presenter class, but was " +
"${targetClass.qualifiedName?.asString()}. " +
"Supertypes: ${targetClass.getAllSuperTypes().toList()}",
targetClass
)
return null
}
val assistedParams =
if (useProvider) {
// Nothing to do here, we'll just use the provider directly.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ kotlin {
api(libs.compose.runtime)
api(libs.coroutines)
api(projects.backstack)
api(projects.circuitRuntime)
api(projects.circuitRuntimePresenter)
api(projects.circuitRuntimeUi)
api(libs.compose.ui)
}
}
Expand Down Expand Up @@ -62,6 +65,6 @@ tasks
compilerOptions { freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") }
}

android { namespace = "com.slack.circuit.core" }
android { namespace = "com.slack.circuit.foundation" }

androidComponents { beforeVariants { variant -> variant.enableAndroidTest = false } }
3 changes: 3 additions & 0 deletions circuit-foundation/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
POM_ARTIFACT_ID=circuit-foundation
POM_NAME=Circuit (Foundation)
POM_DESCRIPTION=Circuit Foundation
Loading

0 comments on commit 416beb1

Please sign in to comment.