Skip to content

Commit 9ff1b8b

Browse files
committed
Fixed mandatory constructor injection (1.8.3)
1 parent 1f0813a commit 9ff1b8b

7 files changed

Lines changed: 19 additions & 22 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.8.2</version>
9+
<version>1.8.3</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.8.2</version>
9+
<version>1.8.3</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.8.2</version>
9+
<version>1.8.3</version>
1010
</parent>
1111

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

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

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -169,16 +169,12 @@ public void registerInjectables() {
169169
// filter only dependencies that are needed for the dependency tree
170170
.filter(dependency -> dependency.getProvideMethod() == null && dependency.getInstance() == null)
171171
.forEach(dependency -> {
172-
Constructor<?> validConstructor = getConstructor(dependency);
173-
Arrays.stream(validConstructor.getParameterTypes())
174-
.forEach(type -> {
175-
dependencies.stream()
176-
.filter(dep -> type.isAssignableFrom(dep.getClazz()))
177-
.findFirst()
178-
.ifPresent(dependency::addDependency);
179-
});
180-
181-
172+
Optional<? extends Constructor<?>> validConstructor = getConstructor(dependency);
173+
validConstructor.ifPresent(constructor -> Arrays.stream(constructor.getParameterTypes())
174+
.forEach(type -> dependencies.stream()
175+
.filter(dep -> type.isAssignableFrom(dep.getClazz()))
176+
.findFirst()
177+
.ifPresent(dependency::addDependency)));
182178

183179
Arrays.stream(dependency.getClazz().getDeclaredFields())
184180
.filter(field -> field.isAnnotationPresent(Inject.class))
@@ -231,16 +227,16 @@ public void registerInjectables() {
231227
}
232228

233229
@SuppressWarnings("unchecked")
234-
private <T> Constructor<T> getConstructor(Dependency<T> dependency) {
235-
return (Constructor<T>) Arrays.stream(dependency.getClazz().getConstructors())
230+
private <T> Optional<Constructor<T>> getConstructor(Dependency<T> dependency) {
231+
return Arrays.stream(dependency.getClazz().getConstructors())
236232
.filter(constructorElement -> constructorElement.getParameterTypes().length == 0
237233
|| Arrays.stream(constructorElement.getParameterTypes())
238234
.allMatch(element ->
239235
containsByClass(element) || (element.isInterface() && element.isAnnotationPresent(Component.class))
240236
)
241237
)
242-
.findAny()
243-
.orElseThrow(() -> new InjectorException("No constructors with valid parameters found for " + dependency.getClazz().getName()));
238+
.map(constructor -> (Constructor<T>) constructor)
239+
.findAny();
244240
}
245241

246242
private void initializeDependency(Dependency<?> dependency, List<Dependency<?>> sortedDependencies) {
@@ -345,7 +341,8 @@ public void clearInjectables() {
345341
}
346342

347343
private <T> T instantiate(Dependency<T> dependency) {
348-
Constructor<T> constructor = getConstructor(dependency);
344+
Constructor<T> constructor = getConstructor(dependency)
345+
.orElseThrow(() -> new InjectorException("Could not find valid constructor for " + dependency.getClazz()));
349346

350347
try {
351348
if(constructor.getParameterCount() == 0) {

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.8.2</version>
9+
<version>1.8.3</version>
1010
</parent>
1111

1212
<artifactId>integrationTests</artifactId>

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>cat.michal.catbase</groupId>
88
<artifactId>CatBase</artifactId>
9-
<version>1.8.2</version>
9+
<version>1.8.3</version>
1010
<packaging>pom</packaging>
1111
<modules>
1212
<module>server</module>
@@ -17,7 +17,7 @@
1717
</modules>
1818

1919
<properties>
20-
<catbase.version>1.8.2</catbase.version>
20+
<catbase.version>1.8.3</catbase.version>
2121
<maven.compiler.source>17</maven.compiler.source>
2222
<maven.compiler.target>17</maven.compiler.target>
2323
</properties>

server/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.8.2</version>
9+
<version>1.8.3</version>
1010
</parent>
1111

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

0 commit comments

Comments
 (0)