From 2efdf4e95125b0646ddb421558f52c425d875202 Mon Sep 17 00:00:00 2001 From: Andy Boothe Date: Tue, 14 Jan 2025 17:09:34 -0600 Subject: [PATCH] add metadata to generated code in CLI processor --- .../rapier/cli/compiler/CliProcessor.java | 33 +++++++++++ ...CliProcessorConversionFromBooleanTest.java | 1 + ...cessorConversionFromListOfBooleanTest.java | 1 + ...ocessorConversionFromListOfStringTest.java | 1 + .../CliProcessorConversionFromStringTest.java | 1 + .../compiler/CliProcessorListnessTest.java | 1 + .../CliProcessorModuleGenerationTest.java | 56 +++++++++++++++++++ .../CliProcessorPositionalParameterTest.java | 1 + .../CliProcessorRequirednessTest.java | 1 + ...liProcessorStandardHelpAndVersionTest.java | 1 + .../cli/compiler/CliProcessorSyntaxTest.java | 1 + 11 files changed, 98 insertions(+) diff --git a/rapier-cli-compiler/src/main/java/rapier/cli/compiler/CliProcessor.java b/rapier-cli-compiler/src/main/java/rapier/cli/compiler/CliProcessor.java index 0e05f3a..61e87ba 100644 --- a/rapier-cli-compiler/src/main/java/rapier/cli/compiler/CliProcessor.java +++ b/rapier-cli-compiler/src/main/java/rapier/cli/compiler/CliProcessor.java @@ -34,6 +34,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; @@ -95,6 +96,7 @@ import rapier.compiler.core.model.DaggerInjectionSite; import rapier.compiler.core.util.ConversionExprFactories; import rapier.compiler.core.util.Java; +import rapier.compiler.core.util.RapierInfo; @SupportedAnnotationTypes("dagger.Component") @SupportedSourceVersion(SourceVersion.RELEASE_11) @@ -104,6 +106,30 @@ public class CliProcessor extends RapierProcessorBase { private ConversionExprFactory booleanConverter; private ConversionExprFactory listOfBooleanConverter; + private String version = RapierInfo.VERSION; + + /* default */ void setVersion(String version) { + if (version == null) + throw new NullPointerException(); + this.version = version; + } + + private OffsetDateTime date = OffsetDateTime.now(); + + /* default */ void setDate(OffsetDateTime date) { + if (date == null) + throw new NullPointerException(); + this.date = date; + } + + private String url = RapierInfo.URL; + + /* default */ void setUrl(String url) { + if (url == null) + throw new NullPointerException(); + this.url = url; + } + @Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); @@ -966,6 +992,8 @@ private String generateModuleSource(String packageName, String moduleClassName, out.println("import java.util.Map;"); out.println("import java.util.Optional;"); out.println("import javax.annotation.Nullable;"); + out.println("import javax.annotation.processing.Generated;"); + out.println("import rapier.internal.RapierGenerated;"); out.println("import rapier.cli.CliSyntaxException;"); out.println("import rapier.cli.CliFlagParameter;"); out.println("import rapier.cli.CliOptionParameter;"); @@ -973,6 +1001,11 @@ private String generateModuleSource(String packageName, String moduleClassName, out.println("import " + JustArgs.class.getName() + ";"); out.println(); out.println("@Module"); + out.println("@RapierGenerated"); + out.println("@Generated("); + out.println(" value = \"" + CliProcessor.class.getName() + "@" + version + "\","); + out.println(" comments = \"" + Java.escapeString(url) + "\","); + out.println(" date = \"" + date.toInstant().toString() + "\")"); out.println("public class " + moduleClassName + " {"); out.println(); diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromBooleanTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromBooleanTest.java index 71a9a31..11f0ba6 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromBooleanTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromBooleanTest.java @@ -143,6 +143,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfBooleanTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfBooleanTest.java index 256db33..3b05042 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfBooleanTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfBooleanTest.java @@ -196,6 +196,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfStringTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfStringTest.java index a18c882..fd1012e 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfStringTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromListOfStringTest.java @@ -254,6 +254,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromStringTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromStringTest.java index 48243f5..37d63d6 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromStringTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorConversionFromStringTest.java @@ -240,6 +240,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorListnessTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorListnessTest.java index 381fd53..76aa795 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorListnessTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorListnessTest.java @@ -131,6 +131,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorModuleGenerationTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorModuleGenerationTest.java index 2e68333..d83138d 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorModuleGenerationTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorModuleGenerationTest.java @@ -24,8 +24,11 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Processor; import javax.tools.JavaFileObject; import org.junit.jupiter.api.Test; import com.google.testing.compile.Compilation; @@ -93,6 +96,8 @@ public interface ExampleComponent { import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; + import javax.annotation.processing.Generated; + import rapier.internal.RapierGenerated; import rapier.cli.CliSyntaxException; import rapier.cli.CliFlagParameter; import rapier.cli.CliOptionParameter; @@ -100,6 +105,11 @@ public interface ExampleComponent { import rapier.cli.compiler.thirdparty.com.sigpwned.just.args.JustArgs; @Module + @RapierGenerated + @Generated( + value = "rapier.cli.compiler.CliProcessor@1.2.3", + comments = "https://www.example.com", + date = "2024-01-01T12:34:56Z") public class RapierExampleComponentCliModule { // Positional parameters @@ -372,6 +382,8 @@ public interface ExampleComponent { import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; + import javax.annotation.processing.Generated; + import rapier.internal.RapierGenerated; import rapier.cli.CliSyntaxException; import rapier.cli.CliFlagParameter; import rapier.cli.CliOptionParameter; @@ -379,6 +391,11 @@ public interface ExampleComponent { import rapier.cli.compiler.thirdparty.com.sigpwned.just.args.JustArgs; @Module + @RapierGenerated + @Generated( + value = "rapier.cli.compiler.CliProcessor@1.2.3", + comments = "https://www.example.com", + date = "2024-01-01T12:34:56Z") public class RapierExampleComponentCliModule { // Positional parameters @@ -635,6 +652,8 @@ public interface ExampleComponent { import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; + import javax.annotation.processing.Generated; + import rapier.internal.RapierGenerated; import rapier.cli.CliSyntaxException; import rapier.cli.CliFlagParameter; import rapier.cli.CliOptionParameter; @@ -642,6 +661,11 @@ public interface ExampleComponent { import rapier.cli.compiler.thirdparty.com.sigpwned.just.args.JustArgs; @Module + @RapierGenerated + @Generated( + value = "rapier.cli.compiler.CliProcessor@1.2.3", + comments = "https://www.example.com", + date = "2024-01-01T12:34:56Z") public class RapierExampleComponentCliModule { // Positional parameters @@ -876,6 +900,8 @@ public interface ExampleComponent { import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; + import javax.annotation.processing.Generated; + import rapier.internal.RapierGenerated; import rapier.cli.CliSyntaxException; import rapier.cli.CliFlagParameter; import rapier.cli.CliOptionParameter; @@ -883,6 +909,11 @@ public interface ExampleComponent { import rapier.cli.compiler.thirdparty.com.sigpwned.just.args.JustArgs; @Module + @RapierGenerated + @Generated( + value = "rapier.cli.compiler.CliProcessor@1.2.3", + comments = "https://www.example.com", + date = "2024-01-01T12:34:56Z") public class RapierExampleComponentCliModule { // Positional parameters @@ -1038,6 +1069,30 @@ public List provideFlag59dcb7aAsListOfBoolean() { .hasSourceEquivalentTo(expectedOutput); } + public static final OffsetDateTime TEST_DATE = + OffsetDateTime.of(2024, 1, 1, 12, 34, 56, 0, ZoneOffset.UTC); + + public static final String TEST_VERSION = "1.2.3"; + + public static final String TEST_URL = "https://www.example.com"; + + /** + * We need to set the date and version so our generated source code is deterministic. + */ + @Override + protected List getAnnotationProcessors() { + List result = super.getAnnotationProcessors(); + for (Processor processor : result) { + if (processor instanceof CliProcessor) { + CliProcessor cp = (CliProcessor) processor; + cp.setDate(TEST_DATE); + cp.setVersion(TEST_VERSION); + cp.setUrl(TEST_URL); + } + } + return unmodifiableList(result); + } + /** * We need to include the generated classes from the rapier-cli module in the classpath for our * tests. @@ -1047,6 +1102,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorPositionalParameterTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorPositionalParameterTest.java index 104783a..2f9652d 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorPositionalParameterTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorPositionalParameterTest.java @@ -176,6 +176,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorRequirednessTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorRequirednessTest.java index 7330f78..49e99c8 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorRequirednessTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorRequirednessTest.java @@ -129,6 +129,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorStandardHelpAndVersionTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorStandardHelpAndVersionTest.java index cff1e70..d36bd88 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorStandardHelpAndVersionTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorStandardHelpAndVersionTest.java @@ -266,6 +266,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } } diff --git a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorSyntaxTest.java b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorSyntaxTest.java index 6e6de6b..5cbc2a8 100644 --- a/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorSyntaxTest.java +++ b/rapier-cli-compiler/src/test/java/rapier/cli/compiler/CliProcessorSyntaxTest.java @@ -797,6 +797,7 @@ protected List getCompileClasspath() throws FileNotFoundException { List result = new ArrayList<>(); result.addAll(super.getCompileClasspath()); result.add(resolveProjectFile("../rapier-cli/target/classes")); + result.add(resolveProjectFile("../rapier-core/target/classes")); return unmodifiableList(result); } }