Skip to content

Commit 77da461

Browse files
committed
#241 - Ambiguous constructor error when defining an injected and non-injected c'tor
1 parent a87c6e3 commit 77da461

File tree

5 files changed

+218
-52
lines changed

5 files changed

+218
-52
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.example.coffee.core;
2+
3+
import io.avaje.inject.Component;
4+
import jakarta.inject.Inject;
5+
6+
@Component
7+
public class WithMultiCtor {
8+
9+
final Steamer steamer;
10+
11+
public WithMultiCtor(Integer ignored) {
12+
this.steamer = null;
13+
}
14+
15+
@Inject
16+
public WithMultiCtor(Steamer steamer) {
17+
this.steamer = steamer;
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.example.coffee.core;
2+
3+
import io.avaje.inject.BeanScope;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.assertj.core.api.Assertions.assertThat;
7+
8+
class WithMultiCtorTest {
9+
10+
@Test
11+
void injectConstructor_expect_notAmbiguous() {
12+
try (BeanScope beanScope = BeanScope.builder().build()) {
13+
WithMultiCtor withMultiCtor = beanScope.get(WithMultiCtor.class);
14+
15+
assertThat(withMultiCtor.steamer).isNotNull();
16+
}
17+
}
18+
}

inject/src/main/java/io/avaje/inject/spi/Builder.java

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,36 @@ static Builder newBuilder(List<SuppliedBean> suppliedBeans, List<EnrichBean> enr
9898
*/
9999
void addInjector(Consumer<Builder> injector);
100100

101+
/**
102+
* Get a dependency.
103+
*/
104+
<T> T get(Class<T> cls);
105+
106+
/**
107+
* Get a named dependency.
108+
*/
109+
<T> T get(Class<T> cls, String name);
110+
111+
/**
112+
* Get a dependency.
113+
*/
114+
<T> T get(Type cls);
115+
116+
/**
117+
* Get a named dependency.
118+
*/
119+
<T> T get(Type cls, String name);
120+
121+
/**
122+
* Get an optional dependency.
123+
*/
124+
<T> Optional<T> getOptional(Class<T> cls);
125+
126+
/**
127+
* Get an optional named dependency.
128+
*/
129+
<T> Optional<T> getOptional(Class<T> cls, String name);
130+
101131
/**
102132
* Get an optional dependency.
103133
*/
@@ -108,6 +138,16 @@ static Builder newBuilder(List<SuppliedBean> suppliedBeans, List<EnrichBean> enr
108138
*/
109139
<T> Optional<T> getOptional(Type cls, String name);
110140

141+
/**
142+
* Get an optional dependency potentially returning null.
143+
*/
144+
<T> T getNullable(Class<T> cls);
145+
146+
/**
147+
* Get an optional named dependency potentially returning null.
148+
*/
149+
<T> T getNullable(Class<T> cls, String name);
150+
111151
/**
112152
* Get an optional dependency potentially returning null.
113153
*/
@@ -118,6 +158,16 @@ static Builder newBuilder(List<SuppliedBean> suppliedBeans, List<EnrichBean> enr
118158
*/
119159
<T> T getNullable(Type cls, String name);
120160

161+
/**
162+
* Return Provider of T given the type.
163+
*/
164+
<T> Provider<T> getProvider(Class<T> cls);
165+
166+
/**
167+
* Return Provider of T given the type and name.
168+
*/
169+
<T> Provider<T> getProvider(Class<T> cls, String name);
170+
121171
/**
122172
* Return Provider of T given the type.
123173
*/
@@ -137,29 +187,34 @@ static Builder newBuilder(List<SuppliedBean> suppliedBeans, List<EnrichBean> enr
137187
<T> Provider<T> getProviderFor(Class<?> cls, Type type);
138188

139189
/**
140-
* Get a dependency.
190+
* Get a list of dependencies for the type.
141191
*/
142-
<T> T get(Type cls);
192+
<T> List<T> list(Class<T> type);
143193

144194
/**
145-
* Get a named dependency.
195+
* Get a list of dependencies for the type.
146196
*/
147-
<T> T get(Type cls, String name);
197+
<T> List<T> list(Type type);
148198

149199
/**
150-
* Get a list of dependencies for the type.
200+
* Get a set of dependencies for the type.
151201
*/
152-
<T> List<T> list(Type interfaceType);
202+
<T> Set<T> set(Class<T> type);
153203

154204
/**
155205
* Get a set of dependencies for the type.
156206
*/
157-
<T> Set<T> set(Type interfaceType);
207+
<T> Set<T> set(Type type);
208+
209+
/**
210+
* Return a map of dependencies keyed by qualifier name.
211+
*/
212+
<T> Map<String, T> map(Class<T> type);
158213

159214
/**
160215
* Return a map of dependencies keyed by qualifier name.
161216
*/
162-
<T> Map<String, T> map(Type interfaceType);
217+
<T> Map<String, T> map(Type type);
163218

164219
/**
165220
* Build and return the bean scope.

0 commit comments

Comments
 (0)