Skip to content

Commit 04cb398

Browse files
committed
Don't provide assisted types beyond the original level where they are declared
Fixes #247
1 parent 3031f16 commit 04cb398

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

integration-tests/common/src/test/kotlin/me/tatarka/inject/test/AssistedTest.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import assertk.assertions.prop
88
import me.tatarka.inject.annotations.Assisted
99
import me.tatarka.inject.annotations.Component
1010
import me.tatarka.inject.annotations.Inject
11+
import me.tatarka.inject.annotations.Provides
1112
import kotlin.test.Test
1213

1314
@Inject
@@ -84,6 +85,23 @@ abstract class DefaultAssistedComponent {
8485
abstract val withDefault: (String) -> DefaultAssistedBar
8586
}
8687

88+
@Inject
89+
class UnrelatedDependency(val someString: String)
90+
91+
@Inject
92+
class AssistedAndUnrelatedDep(
93+
@Assisted val assistedString: String,
94+
val unrelatedDependency: UnrelatedDependency,
95+
)
96+
97+
@Component
98+
abstract class AssistedWithOtherDependency {
99+
abstract val test: (String) -> AssistedAndUnrelatedDep
100+
101+
@Provides
102+
fun string() = "provided"
103+
}
104+
87105
class AssistedTest {
88106

89107
@Test
@@ -133,4 +151,15 @@ class AssistedTest {
133151
assertThat(component.withoutDefault("one", 2)).isEqualTo(DefaultAssistedBar("one", 2))
134152
assertThat(component.withDefault("one")).isEqualTo(DefaultAssistedBar("one", 2))
135153
}
154+
155+
@Test
156+
fun generates_a_component_that_separates_assisted_and_provided_values() {
157+
val component = AssistedWithOtherDependency::class.create()
158+
159+
assertThat(component.test("assisted")).all {
160+
prop(AssistedAndUnrelatedDep::assistedString).isEqualTo("assisted")
161+
prop(AssistedAndUnrelatedDep::unrelatedDependency).prop(UnrelatedDependency::someString)
162+
.isEqualTo("provided")
163+
}
164+
}
136165
}

kotlin-inject-compiler/core/src/main/kotlin/me/tatarka/inject/compiler/Context.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ data class Context(
2626

2727
fun withArgs(args: List<Pair<AstType, String>>) = copy(args = args)
2828

29+
fun withoutArgs() = copy(args = emptyList())
30+
2931
fun withTypes(types: TypeCollector.Result) = if (this.types === types) {
3032
this
3133
} else {

kotlin-inject-compiler/core/src/main/kotlin/me/tatarka/inject/compiler/TypeResultResolver.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class TypeResultResolver(private val provider: AstProvider, private val options:
9595
assistedFailed = true
9696
}
9797
} else {
98-
val result = resolveOrNull(context, element, key)
98+
val result = resolveOrNull(context.withoutArgs(), element, key)
9999
if (result != null) {
100100
paramsWithName[param.name] = result
101101
} else if (!param.hasDefault) {
@@ -147,7 +147,7 @@ class TypeResultResolver(private val provider: AstProvider, private val options:
147147
continue
148148
}
149149
}
150-
val result = resolveOrNull(context, element, key)
150+
val result = resolveOrNull(context.withoutArgs(), element, key)
151151
if (result != null) {
152152
paramsWithName[param.name] = result
153153
} else if (!param.hasDefault) {

0 commit comments

Comments
 (0)