From 4c2dc787c08c9dc657a832302179c2d37b65af75 Mon Sep 17 00:00:00 2001 From: Ashley Scopes <73482956+ascopes@users.noreply.github.com> Date: Sun, 12 May 2024 16:00:57 +0100 Subject: [PATCH] Warn ahead of time if directories are missing and omit them from compilation --- .../mojo/AbstractGenerateMojo.java | 8 +++++ .../AbstractGenerateMojoTestTemplate.java | 30 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojo.java b/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojo.java index f5ce0294..883f1863 100644 --- a/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojo.java +++ b/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojo.java @@ -32,6 +32,7 @@ import io.github.ascopes.protobufmavenplugin.plugins.UrlProtocPluginBean; import java.io.File; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.Collection; import java.util.List; @@ -673,6 +674,13 @@ private Collection sourceDirectories() { .stream() .flatMap(Collection::stream) .map(File::toPath) + .filter(path -> { + if (Files.notExists(path)) { + log.warn("Ignoring source directory {} as it does not appear to exist", path); + return false; + } + return true; + }) .collect(Collectors.toList()); return transformedSourceDirectories.isEmpty() diff --git a/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojoTestTemplate.java b/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojoTestTemplate.java index 4749cd48..a013adc1 100644 --- a/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojoTestTemplate.java +++ b/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/mojo/AbstractGenerateMojoTestTemplate.java @@ -41,6 +41,7 @@ import io.github.ascopes.protobufmavenplugin.plugins.UrlProtocPluginBean; import java.io.File; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.EnumSet; import java.util.List; @@ -747,9 +748,9 @@ void whenSourceDirectoriesProvidedExpectPathsInRequest( @TempDir Path someTempDir ) throws Throwable { // Given - var path1 = someTempDir.resolve("foo").resolve("bar"); - var path2 = someTempDir.resolve("do").resolve("ray"); - var path3 = someTempDir.resolve("aaa").resolve("bbb"); + var path1 = Files.createDirectories(someTempDir.resolve("foo").resolve("bar")); + var path2 = Files.createDirectories(someTempDir.resolve("do").resolve("ray")); + var path3 = Files.createDirectories(someTempDir.resolve("aaa").resolve("bbb")); mojo.sourceDirectories = List.of(path1.toFile(), path2.toFile(), path3.toFile()); @@ -762,6 +763,29 @@ void whenSourceDirectoriesProvidedExpectPathsInRequest( var actualRequest = captor.getValue(); assertThat(actualRequest.getSourceRoots()).containsExactly(path1, path2, path3); } + + @DisplayName("missing sourceDirectories are not provided to the generator") + @Test + void missingSourceDirectoriesAreNotProvidedToTheGenerator( + @TempDir Path someTempDir + ) throws Throwable { + // Given + var path1 = Files.createDirectories(someTempDir.resolve("foo").resolve("bar")); + var path2 = someTempDir.resolve("do").resolve("ray"); + var path3 = Files.createDirectories(someTempDir.resolve("aaa").resolve("bbb")); + assertThat(path2).doesNotExist(); + + mojo.sourceDirectories = List.of(path1.toFile(), path2.toFile(), path3.toFile()); + + // When + mojo.execute(); + + // Then + var captor = ArgumentCaptor.forClass(GenerationRequest.class); + verify(mojo.sourceCodeGenerator).generate(captor.capture()); + var actualRequest = captor.getValue(); + assertThat(actualRequest.getSourceRoots()).containsExactly(path1, path3); + } } @DisplayName("languages are enabled and disabled as expected")