Skip to content

Commit 95e3cc0

Browse files
committed
even better validation
1 parent b856923 commit 95e3cc0

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

inject-generator/src/main/java/io/avaje/inject/generator/AssistBeanReader.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package io.avaje.inject.generator;
22

3+
import static java.util.function.Predicate.not;
4+
import static java.util.stream.Collectors.joining;
35
import static java.util.stream.Collectors.toList;
6+
import static java.util.stream.Collectors.toSet;
47

58
import java.util.ArrayList;
9+
import java.util.Collections;
10+
import java.util.HashSet;
611
import java.util.List;
712
import java.util.Optional;
813
import java.util.Set;
@@ -91,7 +96,7 @@ private void validateTarget(TypeElement t) {
9196
String.format(
9297
"@AssistFactory targets for type %s must have an abstract method with form '%s <methodName>(",
9398
shortName(), shortName()));
94-
99+
var assistNames = new ArrayList<String>();
95100
for (var iterator = assistedElements.iterator(); iterator.hasNext(); ) {
96101
var element = iterator.next();
97102

@@ -102,6 +107,8 @@ private void validateTarget(TypeElement t) {
102107
if (iterator.hasNext()) {
103108
sb.append(", ");
104109
}
110+
assistNames.add(
111+
String.format("%s %s", typeName.shortWithoutAnnotations(), element.getSimpleName()));
105112
}
106113
var errorMsg = sb.append(")' method.").toString();
107114

@@ -113,6 +120,23 @@ private void validateTarget(TypeElement t) {
113120
var mismatched = params.size() != assistedElements.size();
114121
if (mismatched) {
115122
APContext.logError(t, errorMsg);
123+
return;
124+
}
125+
126+
var paramTypes =
127+
params.stream()
128+
.map(
129+
v ->
130+
String.format(
131+
"%s %s",
132+
UType.parse(v.asType()).shortWithoutAnnotations(),
133+
v.getSimpleName()))
134+
.collect(toSet());
135+
var missingParams =
136+
assistNames.stream().filter(not(paramTypes::contains)).collect(joining(", "));
137+
if (!missingParams.isBlank()) {
138+
APContext.logError(
139+
factoryMethod, "factory method missing required parameters: %s", missingParams);
116140
}
117141
},
118142
() -> APContext.logError(t, errorMsg));

0 commit comments

Comments
 (0)