@@ -49,7 +49,17 @@ public class ControllerAnnotationProcessor extends AbstractProcessor {
49
49
50
50
private AccumulativeMappingWriter controllersResourceWriter ;
51
51
private AccumulativeMappingWriter doneablesResourceWriter ;
52
- private Set <String > generatedDoneableClassFiles = new HashSet <>();
52
+ final DeclaredType resourceControllerType =
53
+ processingEnv
54
+ .getTypeUtils ()
55
+ .getDeclaredType (
56
+ processingEnv
57
+ .getElementUtils ()
58
+ .getTypeElement (ResourceController .class .getCanonicalName ()),
59
+ processingEnv .getTypeUtils ().getWildcardType (null , null ));
60
+ private final TypeParameterResolver typeParameterResolver = new TypeParameterResolver (
61
+ resourceControllerType , 0 );
62
+ private final Set <String > generatedDoneableClassFiles = new HashSet <>();
53
63
54
64
@ Override
55
65
public synchronized void init (ProcessingEnvironment processingEnv ) {
@@ -147,7 +157,9 @@ private void generateDoneableClass(TypeElement controllerClassSymbol) {
147
157
148
158
private TypeMirror findResourceType (TypeElement controllerClassSymbol ) throws Exception {
149
159
try {
150
- final var chain = findChain ((DeclaredType ) controllerClassSymbol .asType ());
160
+ final var chain = typeParameterResolver
161
+ .findChain (processingEnv .getTypeUtils (), processingEnv .getElementUtils (),
162
+ (DeclaredType ) controllerClassSymbol .asType ());
151
163
final var customResourceClass = getCustomResourceClass (chain );
152
164
return customResourceClass ;
153
165
} catch (Exception e ) {
@@ -163,81 +175,6 @@ private String makeQualifiedClassName(String packageName, String className) {
163
175
return packageName + "." + className ;
164
176
}
165
177
166
- private List <DeclaredType > findChain (DeclaredType declaredType ) {
167
- final var resourceControllerType =
168
- processingEnv
169
- .getTypeUtils ()
170
- .getDeclaredType (
171
- processingEnv
172
- .getElementUtils ()
173
- .getTypeElement (ResourceController .class .getCanonicalName ()),
174
- processingEnv .getTypeUtils ().getWildcardType (null , null ));
175
- final var result = new ArrayList <DeclaredType >();
176
- result .add (declaredType );
177
- var superElement = ((TypeElement ) ((DeclaredType ) declaredType ).asElement ());
178
- var superclass = (DeclaredType ) superElement .getSuperclass ();
179
- boolean interfaceFound = false ;
180
- final var matchingInterfaces =
181
- superElement .getInterfaces ().stream ()
182
- .filter (
183
- intface ->
184
- processingEnv .getTypeUtils ().isAssignable (intface , resourceControllerType ))
185
- .map (i -> (DeclaredType ) i )
186
- .collect (Collectors .toList ());
187
- if (!matchingInterfaces .isEmpty ()) {
188
- result .addAll (matchingInterfaces );
189
- interfaceFound = true ;
190
- }
191
-
192
- while (superclass .getKind () != TypeKind .NONE ) {
193
- if (interfaceFound ) {
194
- final var lastFoundInterface = result .get (result .size () - 1 );
195
- final var marchingInterfaces =
196
- ((TypeElement ) lastFoundInterface .asElement ())
197
- .getInterfaces ().stream ()
198
- .filter (
199
- intface ->
200
- processingEnv
201
- .getTypeUtils ()
202
- .isAssignable (intface , resourceControllerType ))
203
- .map (i -> (DeclaredType ) i )
204
- .collect (Collectors .toList ());
205
-
206
- if (marchingInterfaces .size () > 0 ) {
207
- result .addAll (marchingInterfaces );
208
- continue ;
209
- } else {
210
- break ;
211
- }
212
- }
213
-
214
- if (processingEnv .getTypeUtils ().isAssignable (superclass , resourceControllerType )) {
215
- result .add (superclass );
216
- }
217
-
218
- superElement = (TypeElement ) superclass .asElement ();
219
- final var matchedInterfaces =
220
- superElement .getInterfaces ().stream ()
221
- .filter (
222
- intface ->
223
- processingEnv .getTypeUtils ().isAssignable (intface , resourceControllerType ))
224
- .map (i -> (DeclaredType ) i )
225
- .collect (Collectors .toList ());
226
- if (matchedInterfaces .size () > 0 ) {
227
- result .addAll (matchedInterfaces );
228
- interfaceFound = true ;
229
- continue ;
230
- }
231
-
232
- if (superElement .getSuperclass ().getKind () == TypeKind .NONE ) {
233
- break ;
234
- }
235
- superclass = (DeclaredType ) superElement .getSuperclass ();
236
- }
237
-
238
- return result ;
239
- }
240
-
241
178
private TypeMirror getCustomResourceClass (List <DeclaredType > chain ) {
242
179
var lastIndex = chain .size () - 1 ;
243
180
String typeName ;
0 commit comments