@@ -49,7 +49,17 @@ public class ControllerAnnotationProcessor extends AbstractProcessor {
4949
5050 private AccumulativeMappingWriter controllersResourceWriter ;
5151 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 <>();
5363
5464 @ Override
5565 public synchronized void init (ProcessingEnvironment processingEnv ) {
@@ -147,7 +157,9 @@ private void generateDoneableClass(TypeElement controllerClassSymbol) {
147157
148158 private TypeMirror findResourceType (TypeElement controllerClassSymbol ) throws Exception {
149159 try {
150- final var chain = findChain ((DeclaredType ) controllerClassSymbol .asType ());
160+ final var chain = typeParameterResolver
161+ .findChain (processingEnv .getTypeUtils (), processingEnv .getElementUtils (),
162+ (DeclaredType ) controllerClassSymbol .asType ());
151163 final var customResourceClass = getCustomResourceClass (chain );
152164 return customResourceClass ;
153165 } catch (Exception e ) {
@@ -163,81 +175,6 @@ private String makeQualifiedClassName(String packageName, String className) {
163175 return packageName + "." + className ;
164176 }
165177
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-
241178 private TypeMirror getCustomResourceClass (List <DeclaredType > chain ) {
242179 var lastIndex = chain .size () - 1 ;
243180 String typeName ;
0 commit comments