Skip to content

Commit c015bdb

Browse files
committed
Fixed the necessity to specify primary dependency when constructor injecting (1.10)
1 parent a6859b8 commit c015bdb

12 files changed

Lines changed: 47 additions & 10 deletions

File tree

client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.9-fix</version>
9+
<version>1.10</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.client</groupId>

common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.9-fix</version>
9+
<version>1.10</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.common</groupId>

dependencyInjection/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.9-fix</version>
9+
<version>1.10</version>
1010
</parent>
1111

1212
<groupId>cat.michal.catbase.injector</groupId>

dependencyInjection/src/main/java/cat/michal/catbase/injector/InjectionContext.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,11 +211,16 @@ <T> Optional<Constructor<T>> getConstructor(Dependency<T> dependency) {
211211
private boolean isValidInjectableType(Type type) {
212212
if(type instanceof ParameterizedType parameterType && Collection.class.isAssignableFrom(((Class<?>) parameterType.getRawType()))) {
213213
Type[] actualTypeArguments = parameterType.getActualTypeArguments();
214-
if (actualTypeArguments.length != 1 || !(actualTypeArguments[0] instanceof Class)) {
214+
if (actualTypeArguments.length != 1 || !(actualTypeArguments[0] instanceof Class<?> actualClass)) {
215215
return false;
216216
}
217+
// if class is an abstraction layer which usually should be, we need to check if there are any implementations present, if not, the type is not an injectable type
218+
if(actualClass.isInterface() || Modifier.isAbstract(actualClass.getModifiers())) {
219+
return this.dependencies.stream()
220+
.anyMatch(dependency -> actualClass.isAssignableFrom(dependency.getClazz()));
221+
}
217222

218-
return this.isValidInjectable((Class<?>) actualTypeArguments[0]);
223+
return this.isValidInjectable(actualClass);
219224
}
220225
if (!(type instanceof Class<?> clazz)) {
221226
return false;

dependencyInjection/src/test/java/cat/michal/catbase/injector/ListInjectionTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,11 @@ void testListInjection() {
2626
Assertions.assertInstanceOf(SecondImpl.class, instance.getSecondLayer());
2727
}
2828

29+
@Test
30+
void testInjectTest() {
31+
InjectTo instance = this.injector.getInstance(InjectTo.class);
32+
33+
Assertions.assertEquals(2, instance.getAbstractions().size());
34+
}
35+
2936
}

dependencyInjection/src/test/java/cat/michal/catbase/injector/listInjection/InjectTo.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,15 @@ public class InjectTo {
1414

1515
private final AbstractionLayer secondLayer;
1616

17-
public InjectTo(@Inject("second") AbstractionLayer secondLayer) {
17+
private List<SecondAbstraction> abstractions;
18+
19+
public InjectTo(@Inject("second") AbstractionLayer secondLayer, List<SecondAbstraction> abstractions) {
1820
this.secondLayer = secondLayer;
21+
this.abstractions = abstractions;
22+
}
23+
24+
public List<SecondAbstraction> getAbstractions() {
25+
return abstractions;
1926
}
2027

2128
public AbstractionLayer getSecondLayer() {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package cat.michal.catbase.injector.listInjection;
2+
3+
public interface SecondAbstraction {
4+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package cat.michal.catbase.injector.listInjection;
2+
3+
import cat.michal.catbase.injector.annotations.Component;
4+
5+
@Component
6+
public class SecondFirstImpl implements SecondAbstraction {
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package cat.michal.catbase.injector.listInjection;
2+
3+
import cat.michal.catbase.injector.annotations.Component;
4+
5+
@Component
6+
public class SecondSecondImpl implements SecondAbstraction {
7+
}

integrationTests/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.9-fix</version>
9+
<version>1.10</version>
1010
</parent>
1111

1212
<artifactId>integrationTests</artifactId>

0 commit comments

Comments
 (0)