diff --git a/inject-generator/pom.xml b/inject-generator/pom.xml index 15f926b4..204403ec 100644 --- a/inject-generator/pom.xml +++ b/inject-generator/pom.xml @@ -55,7 +55,7 @@ 1.5 test - + io.avaje avaje-http-client diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java b/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java index 077851d2..cca10b4c 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java @@ -24,6 +24,7 @@ import javax.lang.model.element.ElementKind; import javax.lang.model.element.Modifier; import javax.lang.model.element.ModuleElement; +import javax.lang.model.element.ModuleElement.ProvidesDirective; import javax.lang.model.element.TypeElement; import javax.lang.model.util.ElementFilter; @@ -318,13 +319,22 @@ private static Stream injectExtensions() { final var checkDirectives = allModules.stream() - .flatMap(m -> ElementFilter.providesIn(m.getDirectives()).stream()) + .flatMap(ExternalProvider::providesDirectives) .filter(ExternalProvider::isInjectExtension) .flatMap(p -> p.getImplementations().stream()); return Stream.concat(checkEnclosing, checkDirectives); } + // Automatic modules throw an NPE for getDirectives on JDT + private static Stream providesDirectives(ModuleElement m) { + try { + return ElementFilter.providesIn(m.getDirectives()).stream(); + } catch (NullPointerException npe) { + return Stream.of(); + } + } + // when a project's module-info is misconfigured a certain way, getEnclosedElements throws an error private static Stream getEnclosed(Element e) { try {