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; }