aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/eclipse/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/lombok/eclipse/handlers')
-rw-r--r--src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java94
-rw-r--r--src/core/lombok/eclipse/handlers/HandleAccessors.java3
-rw-r--r--src/core/lombok/eclipse/handlers/HandleGetter.java10
-rw-r--r--src/core/lombok/eclipse/handlers/HandleSetter.java12
-rw-r--r--src/core/lombok/eclipse/handlers/HandleWith.java12
-rw-r--r--src/core/lombok/eclipse/handlers/HandleWithBy.java12
6 files changed, 119 insertions, 24 deletions
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
index 6483a749..65e2c5c8 100644
--- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
+++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2021 The Project Lombok Authors.
+ * Copyright (C) 2009-2022 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -1632,6 +1632,14 @@ public class EclipseHandlerUtil {
}
/**
+ * Translates the given field into all possible getter names.
+ * Convenient wrapper around {@link HandlerUtil#toAllGetterNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static List<String> toAllGetterNames(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toAllGetterNames(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* @return the likely getter name for the stated field. (e.g. private boolean foo; to isFoo).
*
* Convenient wrapper around {@link HandlerUtil#toGetterName(lombok.core.AnnotationValues, CharSequence, boolean)}.
@@ -1641,6 +1649,15 @@ public class EclipseHandlerUtil {
}
/**
+ * @return the likely getter name for the stated field. (e.g. private boolean foo; to isFoo).
+ *
+ * Convenient wrapper around {@link HandlerUtil#toGetterName(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static String toGetterName(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toGetterName(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* Translates the given field into all possible setter names.
* Convenient wrapper around {@link HandlerUtil#toAllSetterNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
*/
@@ -1649,6 +1666,14 @@ public class EclipseHandlerUtil {
}
/**
+ * Translates the given field into all possible setter names.
+ * Convenient wrapper around {@link HandlerUtil#toAllSetterNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static java.util.List<String> toAllSetterNames(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toAllSetterNames(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* @return the likely setter name for the stated field. (e.g. private boolean foo; to setFoo).
*
* Convenient wrapper around {@link HandlerUtil#toSetterName(lombok.core.AnnotationValues, CharSequence, boolean)}.
@@ -1658,6 +1683,15 @@ public class EclipseHandlerUtil {
}
/**
+ * @return the likely setter name for the stated field. (e.g. private boolean foo; to setFoo).
+ *
+ * Convenient wrapper around {@link HandlerUtil#toSetterName(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static String toSetterName(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toSetterName(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* Translates the given field into all possible with names.
* Convenient wrapper around {@link HandlerUtil#toAllWithNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
*/
@@ -1666,6 +1700,14 @@ public class EclipseHandlerUtil {
}
/**
+ * Translates the given field into all possible with names.
+ * Convenient wrapper around {@link HandlerUtil#toAllWithNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static java.util.List<String> toAllWithNames(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toAllWithNames(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* Translates the given field into all possible withBy names.
* Convenient wrapper around {@link HandlerUtil#toAllWithByNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
*/
@@ -1674,6 +1716,14 @@ public class EclipseHandlerUtil {
}
/**
+ * Translates the given field into all possible withBy names.
+ * Convenient wrapper around {@link HandlerUtil#toAllWithByNames(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static java.util.List<String> toAllWithByNames(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toAllWithByNames(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* @return the likely with name for the stated field. (e.g. private boolean foo; to withFoo).
*
* Convenient wrapper around {@link HandlerUtil#toWithName(lombok.core.AnnotationValues, CharSequence, boolean)}.
@@ -1683,6 +1733,15 @@ public class EclipseHandlerUtil {
}
/**
+ * @return the likely with name for the stated field. (e.g. private boolean foo; to withFoo).
+ *
+ * Convenient wrapper around {@link HandlerUtil#toWithName(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static String toWithName(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toWithName(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
* @return the likely withBy name for the stated field. (e.g. private boolean foo; to withFooBy).
*
* Convenient wrapper around {@link HandlerUtil#toWithByName(lombok.core.AnnotationValues, CharSequence, boolean)}.
@@ -1692,12 +1751,27 @@ public class EclipseHandlerUtil {
}
/**
+ * @return the likely withBy name for the stated field. (e.g. private boolean foo; to withFooBy).
+ *
+ * Convenient wrapper around {@link HandlerUtil#toWithByName(lombok.core.AnnotationValues, CharSequence, boolean)}.
+ */
+ public static String toWithByName(EclipseNode field, boolean isBoolean, AnnotationValues<Accessors> accessors) {
+ return HandlerUtil.toWithByName(field.getAst(), accessors, field.getName(), isBoolean);
+ }
+
+ /**
+ * When generating a setter/getter/wither, should it be made final?
+ */
+ public static boolean shouldMakeFinal(EclipseNode field, AnnotationValues<Accessors> accessors) {
+ if ((((FieldDeclaration) field.get()).modifiers & ClassFileConstants.AccStatic) != 0) return false;
+ return shouldMakeFinal0(accessors, field.getAst());
+ }
+ /**
* When generating a setter, the setter either returns void (beanspec) or Self (fluent).
* This method scans for the {@code Accessors} annotation and associated config properties to figure that out.
*/
- public static boolean shouldReturnThis(EclipseNode field) {
+ public static boolean shouldReturnThis(EclipseNode field, AnnotationValues<Accessors> accessors) {
if ((((FieldDeclaration) field.get()).modifiers & ClassFileConstants.AccStatic) != 0) return false;
- AnnotationValues<Accessors> accessors = EclipseHandlerUtil.getAccessorsForField(field);
return shouldReturnThis0(accessors, field.getAst());
}
@@ -1760,9 +1834,12 @@ public class EclipseHandlerUtil {
}
public static AnnotationValues<Accessors> getAccessorsForField(EclipseNode field) {
+ AnnotationValues<Accessors> values = null;
+
for (EclipseNode node : field.down()) {
if (annotationTypeMatches(Accessors.class, node)) {
- return createAnnotation(Accessors.class, node);
+ values = createAnnotation(Accessors.class, node);
+ break;
}
}
@@ -1770,15 +1847,16 @@ public class EclipseHandlerUtil {
while (current != null) {
for (EclipseNode node : current.down()) {
if (annotationTypeMatches(Accessors.class, node)) {
- return createAnnotation(Accessors.class, node);
+ AnnotationValues<Accessors> onType = createAnnotation(Accessors.class, node);
+ values = values == null ? onType : values.integrate(onType);
}
}
current = current.up();
}
- return AnnotationValues.of(Accessors.class, field);
+ return values == null ? AnnotationValues.of(Accessors.class, field) : values;
}
-
+
public static EclipseNode upToTypeNode(EclipseNode node) {
if (node == null) throw new NullPointerException("node");
while (node != null && !(node.get() instanceof TypeDeclaration)) node = node.up();
@@ -2823,7 +2901,7 @@ public class EclipseHandlerUtil {
if (!sectionBased) {
out = stripLinesWithTagFromJavadoc(stripSectionsFromJavadoc(javadoc), JavadocTag.RETURN);
}
- return shouldReturnThis(node) ? addReturnsThisIfNeeded(out) : out;
+ return shouldReturnThis(node, EclipseHandlerUtil.getAccessorsForField(node)) ? addReturnsThisIfNeeded(out) : out;
}
}
diff --git a/src/core/lombok/eclipse/handlers/HandleAccessors.java b/src/core/lombok/eclipse/handlers/HandleAccessors.java
index 6a92dee2..3bb63aa6 100644
--- a/src/core/lombok/eclipse/handlers/HandleAccessors.java
+++ b/src/core/lombok/eclipse/handlers/HandleAccessors.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014-2021 The Project Lombok Authors.
+ * Copyright (C) 2014-2022 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -39,5 +39,6 @@ public class HandleAccessors extends EclipseAnnotationHandler<Accessors> {
// Accessors itself is handled by HandleGetter/Setter; this is just to ensure that usages are flagged if requested.
handleExperimentalFlagUsage(annotationNode, ConfigurationKeys.ACCESSORS_FLAG_USAGE, "@Accessors");
+ if (annotation.isMarking()) annotationNode.addWarning("Accessors on its own does nothing. Set at least one parameter");
}
}
diff --git a/src/core/lombok/eclipse/handlers/HandleGetter.java b/src/core/lombok/eclipse/handlers/HandleGetter.java
index 7f8fdef2..31236d21 100644
--- a/src/core/lombok/eclipse/handlers/HandleGetter.java
+++ b/src/core/lombok/eclipse/handlers/HandleGetter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2021 The Project Lombok Authors.
+ * Copyright (C) 2009-2022 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,6 +34,7 @@ import java.util.Map;
import lombok.AccessLevel;
import lombok.ConfigurationKeys;
+import lombok.experimental.Accessors;
import lombok.experimental.Delegate;
import lombok.spi.Provides;
import lombok.Getter;
@@ -190,7 +191,8 @@ public class HandleGetter extends EclipseAnnotationHandler<Getter> {
TypeReference fieldType = copyType(field.type, source);
boolean isBoolean = isBoolean(fieldType);
- String getterName = toGetterName(fieldNode, isBoolean);
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ String getterName = toGetterName(fieldNode, isBoolean, accessors);
if (getterName == null) {
errorNode.addWarning("Not generating getter for this field: It does not fit your @Accessors prefix list.");
@@ -199,7 +201,7 @@ public class HandleGetter extends EclipseAnnotationHandler<Getter> {
int modifier = toEclipseModifier(level) | (field.modifiers & ClassFileConstants.AccStatic);
- for (String altName : toAllGetterNames(fieldNode, isBoolean)) {
+ for (String altName : toAllGetterNames(fieldNode, isBoolean, accessors)) {
switch (methodExists(altName, fieldNode, false, 0)) {
case EXISTS_BY_LOMBOK:
return;
@@ -247,7 +249,9 @@ public class HandleGetter extends EclipseAnnotationHandler<Getter> {
statements = createSimpleGetterBody(source, fieldNode);
}
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
+ if (shouldMakeFinal(fieldNode, accessors)) modifier |= ClassFileConstants.AccFinal;
method.modifiers = modifier;
method.returnType = returnType;
method.annotations = null;
diff --git a/src/core/lombok/eclipse/handlers/HandleSetter.java b/src/core/lombok/eclipse/handlers/HandleSetter.java
index 0fdd058f..fda1651d 100644
--- a/src/core/lombok/eclipse/handlers/HandleSetter.java
+++ b/src/core/lombok/eclipse/handlers/HandleSetter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2021 The Project Lombok Authors.
+ * Copyright (C) 2009-2022 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -37,6 +37,7 @@ import lombok.core.AST.Kind;
import lombok.core.AnnotationValues;
import lombok.eclipse.EclipseAnnotationHandler;
import lombok.eclipse.EclipseNode;
+import lombok.experimental.Accessors;
import lombok.spi.Provides;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
@@ -150,8 +151,9 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
FieldDeclaration field = (FieldDeclaration) fieldNode.get();
TypeReference fieldType = copyType(field.type, source);
boolean isBoolean = isBoolean(fieldType);
- String setterName = toSetterName(fieldNode, isBoolean);
- boolean shouldReturnThis = shouldReturnThis(fieldNode);
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ String setterName = toSetterName(fieldNode, isBoolean, accessors);
+ boolean shouldReturnThis = shouldReturnThis(fieldNode, accessors);
if (setterName == null) {
fieldNode.addWarning("Not generating setter for this field: It does not fit your @Accessors prefix list.");
@@ -160,7 +162,7 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
int modifier = toEclipseModifier(level) | (field.modifiers & ClassFileConstants.AccStatic);
- for (String altName : toAllSetterNames(fieldNode, isBoolean)) {
+ for (String altName : toAllSetterNames(fieldNode, isBoolean, accessors)) {
switch (methodExists(altName, fieldNode, false, 1)) {
case EXISTS_BY_LOMBOK:
return;
@@ -206,6 +208,8 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
int pS = source.sourceStart, pE = source.sourceEnd;
long p = (long) pS << 32 | pE;
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ if (shouldMakeFinal(fieldNode, accessors)) modifier |= ClassFileConstants.AccFinal;
method.modifiers = modifier;
if (returnType != null) {
method.returnType = returnType;
diff --git a/src/core/lombok/eclipse/handlers/HandleWith.java b/src/core/lombok/eclipse/handlers/HandleWith.java
index bfad682b..153f0c4a 100644
--- a/src/core/lombok/eclipse/handlers/HandleWith.java
+++ b/src/core/lombok/eclipse/handlers/HandleWith.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012-2021 The Project Lombok Authors.
+ * Copyright (C) 2012-2022 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -38,6 +38,7 @@ import lombok.core.configuration.CheckerFrameworkVersion;
import lombok.core.AnnotationValues;
import lombok.eclipse.EclipseAnnotationHandler;
import lombok.eclipse.EclipseNode;
+import lombok.experimental.Accessors;
import lombok.spi.Provides;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
@@ -169,7 +170,8 @@ public class HandleWith extends EclipseAnnotationHandler<With> {
FieldDeclaration field = (FieldDeclaration) fieldNode.get();
TypeReference fieldType = copyType(field.type, source);
boolean isBoolean = isBoolean(fieldType);
- String withName = toWithName(fieldNode, isBoolean);
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ String withName = toWithName(fieldNode, isBoolean, accessors);
if (withName == null) {
fieldNode.addWarning("Not generating a with method for this field: It does not fit your @Accessors prefix list.");
@@ -191,7 +193,7 @@ public class HandleWith extends EclipseAnnotationHandler<With> {
return;
}
- for (String altName : toAllWithNames(fieldNode, isBoolean)) {
+ for (String altName : toAllWithNames(fieldNode, isBoolean, accessors)) {
switch (methodExists(altName, fieldNode, false, 1)) {
case EXISTS_BY_LOMBOK:
return;
@@ -222,7 +224,9 @@ public class HandleWith extends EclipseAnnotationHandler<With> {
int pS = source.sourceStart, pE = source.sourceEnd;
long p = (long) pS << 32 | pE;
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
- if (makeAbstract) modifier = modifier | ClassFileConstants.AccAbstract | ExtraCompilerModifiers.AccSemicolonBody;
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ if (makeAbstract) modifier |= ClassFileConstants.AccAbstract | ExtraCompilerModifiers.AccSemicolonBody;
+ if (shouldMakeFinal(fieldNode, accessors)) modifier |= ClassFileConstants.AccFinal;
method.modifiers = modifier;
method.returnType = cloneSelfType(fieldNode, source);
if (method.returnType == null) return null;
diff --git a/src/core/lombok/eclipse/handlers/HandleWithBy.java b/src/core/lombok/eclipse/handlers/HandleWithBy.java
index a8d13a84..5ab3cf81 100644
--- a/src/core/lombok/eclipse/handlers/HandleWithBy.java
+++ b/src/core/lombok/eclipse/handlers/HandleWithBy.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020-2021 The Project Lombok Authors.
+ * Copyright (C) 2020-2022 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -61,6 +61,7 @@ import lombok.core.handlers.HandlerUtil.FieldAccess;
import lombok.eclipse.Eclipse;
import lombok.eclipse.EclipseAnnotationHandler;
import lombok.eclipse.EclipseNode;
+import lombok.experimental.Accessors;
import lombok.experimental.WithBy;
import lombok.spi.Provides;
@@ -169,7 +170,8 @@ public class HandleWithBy extends EclipseAnnotationHandler<WithBy> {
FieldDeclaration field = (FieldDeclaration) fieldNode.get();
TypeReference fieldType = copyType(field.type, source);
boolean isBoolean = isBoolean(fieldType);
- String withName = toWithByName(fieldNode, isBoolean);
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ String withName = toWithByName(fieldNode, isBoolean, accessors);
if (withName == null) {
fieldNode.addWarning("Not generating a withXBy method for this field: It does not fit your @Accessors prefix list.");
@@ -191,7 +193,7 @@ public class HandleWithBy extends EclipseAnnotationHandler<WithBy> {
return;
}
- for (String altName : toAllWithByNames(fieldNode, isBoolean)) {
+ for (String altName : toAllWithByNames(fieldNode, isBoolean, accessors)) {
switch (methodExists(altName, fieldNode, false, 1)) {
case EXISTS_BY_LOMBOK:
return;
@@ -242,7 +244,9 @@ public class HandleWithBy extends EclipseAnnotationHandler<WithBy> {
int pS = source.sourceStart, pE = source.sourceEnd;
long p = (long) pS << 32 | pE;
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
- if (makeAbstract) modifier = modifier | ClassFileConstants.AccAbstract | ExtraCompilerModifiers.AccSemicolonBody;
+ AnnotationValues<Accessors> accessors = getAccessorsForField(fieldNode);
+ if (makeAbstract) modifier |= ClassFileConstants.AccAbstract | ExtraCompilerModifiers.AccSemicolonBody;
+ if (shouldMakeFinal(fieldNode, accessors)) modifier |= ClassFileConstants.AccFinal;
method.modifiers = modifier;
method.returnType = cloneSelfType(fieldNode, source);
if (method.returnType == null) return null;