1
1
package io .avaje .inject .generator ;
2
2
3
+ import static java .util .function .Predicate .not ;
4
+ import static java .util .stream .Collectors .joining ;
3
5
import static java .util .stream .Collectors .toList ;
6
+ import static java .util .stream .Collectors .toSet ;
4
7
5
8
import java .util .ArrayList ;
9
+ import java .util .Collections ;
10
+ import java .util .HashSet ;
6
11
import java .util .List ;
7
12
import java .util .Optional ;
8
13
import java .util .Set ;
@@ -91,7 +96,7 @@ private void validateTarget(TypeElement t) {
91
96
String .format (
92
97
"@AssistFactory targets for type %s must have an abstract method with form '%s <methodName>(" ,
93
98
shortName (), shortName ()));
94
-
99
+ var assistNames = new ArrayList < String >();
95
100
for (var iterator = assistedElements .iterator (); iterator .hasNext (); ) {
96
101
var element = iterator .next ();
97
102
@@ -102,6 +107,8 @@ private void validateTarget(TypeElement t) {
102
107
if (iterator .hasNext ()) {
103
108
sb .append (", " );
104
109
}
110
+ assistNames .add (
111
+ String .format ("%s %s" , typeName .shortWithoutAnnotations (), element .getSimpleName ()));
105
112
}
106
113
var errorMsg = sb .append (")' method." ).toString ();
107
114
@@ -113,6 +120,23 @@ private void validateTarget(TypeElement t) {
113
120
var mismatched = params .size () != assistedElements .size ();
114
121
if (mismatched ) {
115
122
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 );
116
140
}
117
141
},
118
142
() -> APContext .logError (t , errorMsg ));
0 commit comments