[fixes #2990] Treat records and enums as places where static is allowed.

This commit is contained in:
Reinier Zwitserloot
2022-03-17 22:07:46 +01:00
parent 3a4f0e08db
commit 2eddba64f7
7 changed files with 34 additions and 20 deletions
@@ -2770,15 +2770,7 @@ public class EclipseHandlerUtil {
* 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) {
@@ -80,7 +80,7 @@ public class HandleLog {
return;
}
if (!typeNode.isEnumType() && useStatic && !isStaticAllowed(typeNode)) {
if (useStatic && !isStaticAllowed(typeNode)) {
annotationNode.addError(framework.getAnnotationAsString() + " is not supported on non-static nested classes.");
return;
}
@@ -2096,15 +2096,7 @@ public class JavacHandlerUtil {
* 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) {
@@ -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();
}
}
@@ -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;
<clinit>() {
}
public Inner(String x) {
super();
.x = x;
}
}
LoggerFloggerRecord() {
super();
}
}
@@ -25,4 +25,4 @@ class LoggerFloggerWithInnerEnum {
enum Inner {
CONSTANT;
}
}
}
@@ -0,0 +1,8 @@
// version 14:
import lombok.extern.flogger.Flogger;
class LoggerFloggerRecord {
@Flogger
record Inner(String x) {}
}