19
19
import java .util .TreeSet ;
20
20
import java .util .stream .Stream ;
21
21
22
+ import javax .lang .model .element .Element ;
22
23
import javax .lang .model .element .ElementKind ;
23
24
import javax .lang .model .element .Modifier ;
24
25
import javax .lang .model .element .ModuleElement ;
@@ -295,8 +296,8 @@ private static Stream<TypeElement> injectExtensions() {
295
296
296
297
final var checkEnclosing =
297
298
allModules .stream ()
298
- .flatMap (m -> m . getEnclosedElements (). stream () )
299
- .flatMap (p -> p . getEnclosedElements (). stream () )
299
+ .flatMap (ExternalProvider :: getEnclosed )
300
+ .flatMap (ExternalProvider :: getEnclosed )
300
301
.map (TypeElement .class ::cast )
301
302
.filter (t -> t .getKind () == ElementKind .CLASS )
302
303
.filter (t -> t .getModifiers ().contains (Modifier .PUBLIC ))
@@ -311,6 +312,15 @@ private static Stream<TypeElement> injectExtensions() {
311
312
return Stream .concat (checkEnclosing , checkDirectives );
312
313
}
313
314
315
+ // when a project's module-info is misconfigured a certain way, getEnclosedElements throws an error
316
+ private static Stream <? extends Element > getEnclosed (Element e ) {
317
+ try {
318
+ return e .getEnclosedElements ().stream ();
319
+ } catch (Exception ex ) {
320
+ return Stream .of ();
321
+ }
322
+ }
323
+
314
324
private static boolean isInjectExtension (ModuleElement .ProvidesDirective p ) {
315
325
return "io.avaje.inject.spi.InjectExtension" .equals (p .getService ().getQualifiedName ().toString ());
316
326
}
0 commit comments