From bd2211119fee2559e2b1eb12171509a9571b5413 Mon Sep 17 00:00:00 2001 From: Sam Carlberg Date: Wed, 19 Feb 2025 00:48:51 -0500 Subject: [PATCH] [epilogue] Make nonloggable type warnings configurable (#7792) Now a flag at the class level controls whether warning messages are printed. Defaults to false (no warning messages). --- .../processor/AnnotationProcessor.java | 18 ++++++++++++------ .../epilogue/processor/LoggerGenerator.java | 5 +++++ .../processor/AnnotationProcessorTest.java | 2 +- .../java/edu/wpi/first/epilogue/Logged.java | 8 ++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/AnnotationProcessor.java b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/AnnotationProcessor.java index fa623e64ee..398569702e 100644 --- a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/AnnotationProcessor.java +++ b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/AnnotationProcessor.java @@ -269,12 +269,18 @@ public class AnnotationProcessor extends AbstractProcessor { return false; } - processingEnv - .getMessager() - .printMessage( - Diagnostic.Kind.NOTE, - "[EPILOGUE] Excluded from logs because " + type + " is not a loggable data type", - element); + var classConfig = element.getEnclosingElement().getAnnotation(Logged.class); + + if (classConfig == null || classConfig.warnForNonLoggableTypes()) { + // Not loggable and not explicitly opted out of logging; print a warning message + processingEnv + .getMessager() + .printMessage( + Diagnostic.Kind.NOTE, + "[EPILOGUE] Excluded from logs because " + type + " is not a loggable data type", + element); + } + return true; } diff --git a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/LoggerGenerator.java b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/LoggerGenerator.java index e7cb686f71..496a773095 100644 --- a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/LoggerGenerator.java +++ b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/LoggerGenerator.java @@ -71,6 +71,11 @@ public class LoggerGenerator { public Naming defaultNaming() { return Naming.USE_CODE_NAME; } + + @Override + public boolean warnForNonLoggableTypes() { + return false; + } }; public LoggerGenerator(ProcessingEnvironment processingEnv, List handlers) { diff --git a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java index 7a1bdd44a3..8f1d9f2b19 100644 --- a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java +++ b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/AnnotationProcessorTest.java @@ -1772,7 +1772,7 @@ class AnnotationProcessorTest { """ package edu.wpi.first.epilogue; - @Logged + @Logged(warnForNonLoggableTypes = true) class Example { Throwable t; } diff --git a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/Logged.java b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/Logged.java index 2d76c9bfbe..c939d019d3 100644 --- a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/Logged.java +++ b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/Logged.java @@ -124,4 +124,12 @@ public @interface Logged { * for all logged fields and methods in an annotated class */ Naming defaultNaming() default Naming.USE_CODE_NAME; + + /** + * Class-level only: if {@link #strategy()} is {@link Strategy#OPT_OUT}, this can be used to quiet + * the warnings that are printed for non-loggable fields and methods detected within the class. + * + * @return true if warnings should be printed, or false if warnings should not be printed + */ + boolean warnForNonLoggableTypes() default false; }