diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index c313cf5139..93b0028dc9 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -2770,15 +2770,7 @@ static boolean isTypeAndDoesNotHaveFlags(EclipseNode typeNode, long flags) { * Returns {@code true} if the provided node supports static methods and types (top level or static class) */ public static boolean isStaticAllowed(EclipseNode typeNode) { - boolean staticAllowed = true; - - while (typeNode.getKind() != Kind.COMPILATION_UNIT) { - if (!staticAllowed) return false; - - staticAllowed = typeNode.isStatic(); - typeNode = typeNode.up(); - } - return true; + return typeNode.isStatic() || typeNode.up() == null || typeNode.up().getKind() == Kind.COMPILATION_UNIT || isRecord(typeNode); } public static AbstractVariableDeclaration[] getRecordComponents(TypeDeclaration typeDeclaration) { diff --git a/src/core/lombok/javac/handlers/HandleLog.java b/src/core/lombok/javac/handlers/HandleLog.java index df3908dc7d..957f558179 100644 --- a/src/core/lombok/javac/handlers/HandleLog.java +++ b/src/core/lombok/javac/handlers/HandleLog.java @@ -80,7 +80,7 @@ public static void processAnnotation(LoggingFramework framework, AnnotationValue return; } - if (!typeNode.isEnumType() && useStatic && !isStaticAllowed(typeNode)) { + if (useStatic && !isStaticAllowed(typeNode)) { annotationNode.addError(framework.getAnnotationAsString() + " is not supported on non-static nested classes."); return; } diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index 53a518b4e6..b17e34d8c0 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -2096,15 +2096,7 @@ public static boolean isClassAndDoesNotHaveFlags(JavacNode typeNode, long flags) * Returns {@code true} if the provided node supports static methods and types (top level or static class) */ public static boolean isStaticAllowed(JavacNode typeNode) { - boolean staticAllowed = true; - - while (typeNode.getKind() != Kind.COMPILATION_UNIT) { - if (!staticAllowed) return false; - - staticAllowed = typeNode.isStatic(); - typeNode = typeNode.up(); - } - return true; + return typeNode.isStatic() || typeNode.up() == null || typeNode.up().getKind() == Kind.COMPILATION_UNIT || isRecord(typeNode); } public static JavacNode upToTypeNode(JavacNode node) { diff --git a/test/transform/resource/after-delombok/LoggerFloggerRecord.java b/test/transform/resource/after-delombok/LoggerFloggerRecord.java new file mode 100644 index 0000000000..9cc0c9c086 --- /dev/null +++ b/test/transform/resource/after-delombok/LoggerFloggerRecord.java @@ -0,0 +1,6 @@ +class LoggerFloggerRecord { + record Inner(String x) { + @java.lang.SuppressWarnings("all") + private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass(); + } +} \ No newline at end of file diff --git a/test/transform/resource/after-ecj/LoggerFloggerRecord.java b/test/transform/resource/after-ecj/LoggerFloggerRecord.java new file mode 100644 index 0000000000..86004b670d --- /dev/null +++ b/test/transform/resource/after-ecj/LoggerFloggerRecord.java @@ -0,0 +1,16 @@ +import lombok.extern.flogger.Flogger; +class LoggerFloggerRecord { + static @Flogger record Inner(String x) { + private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass(); +/* Implicit */ private final String x; + () { + } + public Inner(String x) { + super(); + .x = x; + } + } + LoggerFloggerRecord() { + super(); + } +} \ No newline at end of file diff --git a/test/transform/resource/before/LoggerFlogger.java b/test/transform/resource/before/LoggerFlogger.java index ff0249c766..4bdc20b0d5 100644 --- a/test/transform/resource/before/LoggerFlogger.java +++ b/test/transform/resource/before/LoggerFlogger.java @@ -25,4 +25,4 @@ class LoggerFloggerWithInnerEnum { enum Inner { CONSTANT; } -} \ No newline at end of file +} diff --git a/test/transform/resource/before/LoggerFloggerRecord.java b/test/transform/resource/before/LoggerFloggerRecord.java new file mode 100644 index 0000000000..908704d692 --- /dev/null +++ b/test/transform/resource/before/LoggerFloggerRecord.java @@ -0,0 +1,8 @@ +// version 14: + +import lombok.extern.flogger.Flogger; + +class LoggerFloggerRecord { + @Flogger + record Inner(String x) {} +}