Skip to content

Commit 0308457

Browse files
authored
Merge pull request #123 from amzn/rwo/hints
Metro hints
2 parents 5bed595 + d4c5173 commit 0308457

File tree

37 files changed

+1027
-141
lines changed

37 files changed

+1027
-141
lines changed

buildSrc/src/main/kotlin/software/amazon/app/platform/gradle/buildsrc/BasePlugin.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public open class BasePlugin : Plugin<Project> {
6464
"${APP_PLATFORM_GROUP}:kotlin-inject-impl" to ":kotlin-inject:impl",
6565
"${APP_PLATFORM_GROUP}:ksp-common-public" to ":ksp-common:public",
6666
"${APP_PLATFORM_GROUP}:metro-public" to ":metro:public",
67+
"${APP_PLATFORM_GROUP}:metro-impl" to ":metro:impl",
6768
"${APP_PLATFORM_GROUP}:metro-contribute-impl-code-generators" to
6869
":metro-extensions:contribute:impl-code-generators",
6970
"${APP_PLATFORM_GROUP}:presenter-public" to ":presenter:public",

buildSrc/src/main/kotlin/software/amazon/app/platform/gradle/buildsrc/SdkPlugin.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ internal object SdkPlugin {
6464

6565
// These packages only contain generated code that is picked up by compiler plugins.
6666
// They don't need to be part of the API dumps.
67-
apiValidation.ignoredPackages += setOf("app.platform.inject", "amazon.lastmile.inject")
67+
apiValidation.ignoredPackages +=
68+
setOf("app.platform.inject", "amazon.lastmile.inject", "metro.hints")
6869
}
6970

7071
private fun Project.configureExplicitApi() {

di-common/public/src/commonMain/kotlin/software/amazon/app/platform/inject/ContributesRenderer.kt

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import software.amazon.lastmile.kotlin.inject.anvil.extend.ContributingAnnotatio
1212
* class IncrementRenderer : Renderer<IncrementPresenter.Model>()
1313
* ```
1414
*
15-
* This annotation would generated following component interface:
15+
* This annotation would generated following component interface for kotlin-inject:
1616
* ```
1717
* @ContributesTo(RendererScope::class)
1818
* interface IncrementRendererComponent {
@@ -27,29 +27,33 @@ import software.amazon.lastmile.kotlin.inject.anvil.extend.ContributingAnnotatio
2727
* }
2828
* ```
2929
*
30+
* Or following graph for Metro:
31+
* ```
32+
* @ContributesTo(RendererScope::class)
33+
* interface IncrementRendererGraph {
34+
* @Provides
35+
* @IntoMap
36+
* @RendererKey(IncrementPresenter.Model::class)
37+
* fun provideIncrementRendererIncrementPresenterModel(
38+
* renderer: Provider<IncrementRenderer>,
39+
* ): Renderer<*> = renderer()
40+
*
41+
* @Provides
42+
* fun provideIncrementRenderer(): IncrementRenderer = IncrementRenderer()
43+
* }
44+
* ```
45+
*
3046
* Although strongly discouraged, your renderer is allowed to have an `@Inject constructor`. The
31-
* only valid use case is for injecting other renderers.
47+
* only valid use case is for injecting other renderers returned by the `RendererFactory`.
3248
*
3349
* ```
3450
* @Inject
3551
* @ContributesRenderer
3652
* class IncrementRenderer(
37-
* private val otherRenderer: OtherRenderer
53+
* private val rendererFactory: RendererFactory
3854
* ) : Renderer<IncrementPresenter.Model>() {
3955
* ```
4056
*
41-
* In this case following module would be generated:
42-
* ```
43-
* @ContributesTo(RendererScope::class)
44-
* abstract class IncrementRendererModule {
45-
* @Provides
46-
* @IntoMap
47-
* fun provideIncrementRendererIntoMap(
48-
* renderer: () -> IncrementRenderer,
49-
* ): Pair<KClass<out BaseModel>, () -> Renderer<*>> = IncrementRenderer.Model::class to renderer
50-
* }
51-
* ```
52-
*
5357
* If the model type is a sealed hierarchy, then for each explicit type a binding method will be
5458
* generated.
5559
*/

gradle-plugin/src/main/kotlin/software/amazon/app/platform/gradle/AppPlatformPlugin.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public open class AppPlatformPlugin : Plugin<Project> {
117117
"kotlin-inject-contribute-public",
118118
"kotlin-inject-impl",
119119
"kotlin-inject-public",
120+
"metro-impl",
120121
"metro-public",
121122
"presenter-molecule-impl",
122123
"presenter-molecule-public",

metro-extensions/contribute/impl-code-generators/src/test/kotlin/software/amazon/app/platform/inject/metro/CommonSourceCode.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ package software.amazon.app.platform.inject.metro
44

55
import com.tschuchort.compiletesting.JvmCompilationResult
66
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
7-
import software.amazon.test.TestRendererComponent
7+
import software.amazon.test.TestRendererGraph
88

99
internal val JvmCompilationResult.graphInterface: Class<*>
1010
get() = classLoader.loadClass("software.amazon.test.GraphInterface")
1111

12-
internal fun Class<*>.newTestRendererComponent(): TestRendererComponent {
12+
internal fun Class<*>.newTestRendererGraph(): TestRendererGraph {
1313
val companionObject = fields.single().get(null)
1414
return classes
1515
.single { it.simpleName == "Companion" }
1616
.declaredMethods
1717
.single { it.name == "create" }
18-
.invoke(companionObject) as TestRendererComponent
18+
.invoke(companionObject) as TestRendererGraph
1919
}

metro-extensions/contribute/impl-code-generators/src/test/kotlin/software/amazon/app/platform/inject/metro/processor/ContributesRendererProcessorTest.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
2323
import org.junit.jupiter.api.Test
2424
import software.amazon.app.platform.inject.metro.compile
2525
import software.amazon.app.platform.inject.metro.graphInterface
26-
import software.amazon.app.platform.inject.metro.newTestRendererComponent
26+
import software.amazon.app.platform.inject.metro.newTestRendererGraph
2727
import software.amazon.app.platform.ksp.inner
2828
import software.amazon.app.platform.ksp.isAnnotatedWith
2929
import software.amazon.app.platform.metro.METRO_LOOKUP_PACKAGE
@@ -90,12 +90,12 @@ class ContributesRendererProcessorTest {
9090
assertThat(getAnnotation(RendererKey::class.java).value).isEqualTo(model)
9191
}
9292

93-
assertThat(graphInterface.newTestRendererComponent().renderers.keys).containsOnly(model)
93+
assertThat(graphInterface.newTestRendererGraph().renderers.keys).containsOnly(model)
9494

95-
assertThat(graphInterface.newTestRendererComponent().modelToRendererMapping.keys)
95+
assertThat(graphInterface.newTestRendererGraph().modelToRendererMapping.keys)
9696
.containsOnly(model)
9797

98-
assertThat(graphInterface.newTestRendererComponent().modelToRendererMapping.values)
98+
assertThat(graphInterface.newTestRendererGraph().modelToRendererMapping.values)
9999
.containsOnly(testRenderer.kotlin)
100100
}
101101
}
@@ -148,7 +148,7 @@ class ContributesRendererProcessorTest {
148148
assertThat(getAnnotation(RendererKey::class.java).value).isEqualTo(model)
149149
}
150150

151-
assertThat(graphInterface.newTestRendererComponent().renderers.keys).containsOnly(model)
151+
assertThat(graphInterface.newTestRendererGraph().renderers.keys).containsOnly(model)
152152
}
153153
}
154154

@@ -197,7 +197,7 @@ class ContributesRendererProcessorTest {
197197
assertThat(this).isAnnotatedWith(IntoMap::class)
198198
}
199199

200-
assertThat(graphInterface.newTestRendererComponent().renderers.keys)
200+
assertThat(graphInterface.newTestRendererGraph().renderers.keys)
201201
.containsOnly(presenter.model.kotlin)
202202
}
203203
}
@@ -222,7 +222,7 @@ class ContributesRendererProcessorTest {
222222
""",
223223
graphInterfaceSource,
224224
) {
225-
assertThat(graphInterface.newTestRendererComponent().renderers.keys).containsOnly(model)
225+
assertThat(graphInterface.newTestRendererGraph().renderers.keys).containsOnly(model)
226226
}
227227
}
228228

@@ -371,7 +371,7 @@ class ContributesRendererProcessorTest {
371371
assertThat(it).isAnnotatedWith(RendererKey::class)
372372
}
373373

374-
assertThat(graphInterface.newTestRendererComponent().renderers.keys)
374+
assertThat(graphInterface.newTestRendererGraph().renderers.keys)
375375
.containsExactlyInAnyOrder(
376376
presenter.model.kotlin,
377377
presenter.model.inner.kotlin,
@@ -402,7 +402,7 @@ class ContributesRendererProcessorTest {
402402
assertThat(it).isAnnotatedWith(ForScope::class)
403403
}
404404

405-
assertThat(graphInterface.newTestRendererComponent().modelToRendererMapping.keys)
405+
assertThat(graphInterface.newTestRendererGraph().modelToRendererMapping.keys)
406406
.containsExactlyInAnyOrder(
407407
presenter.model.kotlin,
408408
presenter.model.inner.kotlin,
@@ -411,7 +411,7 @@ class ContributesRendererProcessorTest {
411411
presenter.model.model2.kotlin,
412412
)
413413

414-
assertThat(graphInterface.newTestRendererComponent().modelToRendererMapping.values.distinct())
414+
assertThat(graphInterface.newTestRendererGraph().modelToRendererMapping.values.distinct())
415415
.containsOnly(testRenderer.kotlin)
416416
}
417417
}
@@ -459,13 +459,13 @@ class ContributesRendererProcessorTest {
459459
)
460460
.containsOnly("provideSoftwareAmazonTestTestRendererPresenterModelKey")
461461

462-
assertThat(graphInterface.newTestRendererComponent().renderers.keys)
462+
assertThat(graphInterface.newTestRendererGraph().renderers.keys)
463463
.containsOnly(presenter.model.kotlin)
464464

465-
assertThat(graphInterface.newTestRendererComponent().modelToRendererMapping.keys)
465+
assertThat(graphInterface.newTestRendererGraph().modelToRendererMapping.keys)
466466
.containsOnly(presenter.model.kotlin)
467467

468-
assertThat(graphInterface.newTestRendererComponent().modelToRendererMapping.values)
468+
assertThat(graphInterface.newTestRendererGraph().modelToRendererMapping.values)
469469
.containsOnly(testRenderer.kotlin)
470470
}
471471
}
@@ -501,7 +501,7 @@ class ContributesRendererProcessorTest {
501501
"provideSoftwareAmazonTestTestRendererModelKey",
502502
)
503503

504-
assertThat(graphInterface.newTestRendererComponent().renderers.keys).containsOnly(model)
504+
assertThat(graphInterface.newTestRendererGraph().renderers.keys).containsOnly(model)
505505
}
506506
}
507507

@@ -613,11 +613,11 @@ class ContributesRendererProcessorTest {
613613
import dev.zacsweers.metro.Provider
614614
import dev.zacsweers.metro.Provides
615615
import dev.zacsweers.metro.SingleIn
616-
import software.amazon.test.TestRendererComponent
616+
import software.amazon.test.TestRendererGraph
617617
618618
@DependencyGraph(RendererScope::class)
619619
@SingleIn(RendererScope::class)
620-
interface GraphInterface : TestRendererComponent {
620+
interface GraphInterface : TestRendererGraph {
621621
@Provides fun provideString(): String = "abc"
622622
623623
companion object {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import software.amazon.app.platform.presenter.BaseModel
77
import software.amazon.app.platform.renderer.Renderer
88
import software.amazon.app.platform.renderer.RendererScope
99

10-
interface TestRendererComponent {
10+
interface TestRendererGraph {
1111
val renderers: Map<KClass<out BaseModel>, Provider<Renderer<*>>>
1212

1313
@ForScope(RendererScope::class)

0 commit comments

Comments
 (0)