aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/javac
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/lombok/javac')
-rw-r--r--src/core/lombok/javac/handlers/HandleBuilder.java16
-rw-r--r--src/core/lombok/javac/handlers/HandleSetter.java2
-rw-r--r--src/core/lombok/javac/handlers/HandleSuperBuilder.java4
-rw-r--r--src/core/lombok/javac/handlers/JavacHandlerUtil.java8
-rw-r--r--src/core/lombok/javac/handlers/JavacSingularsRecipes.java48
5 files changed, 25 insertions, 53 deletions
diff --git a/src/core/lombok/javac/handlers/HandleBuilder.java b/src/core/lombok/javac/handlers/HandleBuilder.java
index 75f3de2c..5c4b4297 100644
--- a/src/core/lombok/javac/handlers/HandleBuilder.java
+++ b/src/core/lombok/javac/handlers/HandleBuilder.java
@@ -61,7 +61,6 @@ import lombok.Builder;
import lombok.Builder.ObtainVia;
import lombok.ConfigurationKeys;
import lombok.Singular;
-import lombok.Singular.NullCollectionBehavior;
import lombok.ToString;
import lombok.core.AST.Kind;
import lombok.core.AnnotationValues;
@@ -908,22 +907,9 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
return null;
}
- NullCollectionBehavior behavior = getNullBehaviorFor(ann, singularInstance, node);
-
- return new SingularData(child, singularName, pluralName, typeArgs, targetFqn, singularizer, behavior, setterPrefix);
+ return new SingularData(child, singularName, pluralName, typeArgs, targetFqn, singularizer, singularInstance.ignoreNullCollections(), setterPrefix);
}
return null;
}
-
- static NullCollectionBehavior getNullBehaviorFor(AnnotationValues<Singular> ann, Singular singularInstance, JavacNode node) {
- NullCollectionBehavior behavior;
- if (ann.isExplicit("nullBehavior")) {
- behavior = singularInstance.nullBehavior();
- } else {
- behavior = node.getAst().readConfiguration(ConfigurationKeys.SINGULAR_NULL_COLLECTIONS);
- }
- if (behavior == null) return NullCollectionBehavior.NULL_POINTER_EXCEPTION;
- return behavior;
- }
}
diff --git a/src/core/lombok/javac/handlers/HandleSetter.java b/src/core/lombok/javac/handlers/HandleSetter.java
index 9c7ce042..32bf574b 100644
--- a/src/core/lombok/javac/handlers/HandleSetter.java
+++ b/src/core/lombok/javac/handlers/HandleSetter.java
@@ -248,7 +248,7 @@ public class HandleSetter extends JavacAnnotationHandler<Setter> {
if (!hasNonNullAnnotations(field) && !hasNonNullAnnotations(field, onParam)) {
statements.append(treeMaker.Exec(assign));
} else {
- JCStatement nullCheck = generateNullCheck(treeMaker, fieldDecl.vartype, paramName, source);
+ JCStatement nullCheck = generateNullCheck(treeMaker, fieldDecl.vartype, paramName, source, null);
if (nullCheck != null) statements.append(nullCheck);
statements.append(treeMaker.Exec(assign));
}
diff --git a/src/core/lombok/javac/handlers/HandleSuperBuilder.java b/src/core/lombok/javac/handlers/HandleSuperBuilder.java
index 692ee60b..b4b75d79 100644
--- a/src/core/lombok/javac/handlers/HandleSuperBuilder.java
+++ b/src/core/lombok/javac/handlers/HandleSuperBuilder.java
@@ -59,7 +59,6 @@ import com.sun.tools.javac.util.Name;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Builder.ObtainVia;
-import lombok.Singular.NullCollectionBehavior;
import lombok.ConfigurationKeys;
import lombok.Singular;
import lombok.ToString;
@@ -976,8 +975,7 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
return null;
}
- NullCollectionBehavior behavior = HandleBuilder.getNullBehaviorFor(ann, singularInstance, node);
- return new SingularData(child, singularName, pluralName, typeArgs, targetFqn, singularizer, behavior);
+ return new SingularData(child, singularName, pluralName, typeArgs, targetFqn, singularizer, singularInstance.ignoreNullCollections());
}
return null;
diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
index 0ef8c359..3ec9f159 100644
--- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java
+++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
@@ -1537,12 +1537,12 @@ public class JavacHandlerUtil {
* Generates a new statement that checks if the given local is null, and if so, throws a configured exception with the
* local variable name as message.
*/
- public static JCStatement generateNullCheck(JavacTreeMaker maker, JCExpression typeNode, Name varName, JavacNode source) {
+ public static JCStatement generateNullCheck(JavacTreeMaker maker, JCExpression typeNode, Name varName, JavacNode source, String customMessage) {
NullCheckExceptionType exceptionType = source.getAst().readConfiguration(ConfigurationKeys.NON_NULL_EXCEPTION_TYPE);
if (exceptionType == null) exceptionType = NullCheckExceptionType.NULL_POINTER_EXCEPTION;
- if (isPrimitive(typeNode)) return null;
- JCLiteral message = maker.Literal(exceptionType.toExceptionMessage(varName.toString()));
+ if (typeNode != null && isPrimitive(typeNode)) return null;
+ JCLiteral message = maker.Literal(exceptionType.toExceptionMessage(varName.toString(), customMessage));
LombokImmutableList<String> method = exceptionType.getMethod();
if (method != null) {
@@ -1569,7 +1569,7 @@ public class JavacHandlerUtil {
* stripped as a result of @Accessors.prefix.
*/
public static JCStatement generateNullCheck(JavacTreeMaker maker, JCVariableDecl varDecl, JavacNode source) {
- return generateNullCheck(maker, varDecl.vartype, varDecl.name, source);
+ return generateNullCheck(maker, varDecl.vartype, varDecl.name, source, null);
}
/**
diff --git a/src/core/lombok/javac/handlers/JavacSingularsRecipes.java b/src/core/lombok/javac/handlers/JavacSingularsRecipes.java
index 9dab3da5..f4128f12 100644
--- a/src/core/lombok/javac/handlers/JavacSingularsRecipes.java
+++ b/src/core/lombok/javac/handlers/JavacSingularsRecipes.java
@@ -37,7 +37,6 @@ import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
import com.sun.tools.javac.tree.JCTree.JCBlock;
import com.sun.tools.javac.tree.JCTree.JCExpression;
-import com.sun.tools.javac.tree.JCTree.JCLiteral;
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
import com.sun.tools.javac.tree.JCTree.JCModifiers;
import com.sun.tools.javac.tree.JCTree.JCStatement;
@@ -51,7 +50,6 @@ import com.sun.tools.javac.util.Name;
import lombok.AccessLevel;
import lombok.ConfigurationKeys;
-import lombok.Singular.NullCollectionBehavior;
import lombok.core.LombokImmutableList;
import lombok.core.SpiLoadUtil;
import lombok.core.TypeLibrary;
@@ -122,13 +120,13 @@ public class JavacSingularsRecipes {
private final String targetFqn;
private final JavacSingularizer singularizer;
private final String setterPrefix;
- private final NullCollectionBehavior nullCollectionBehavior;
+ private final boolean ignoreNullCollections;
- public SingularData(JavacNode annotation, Name singularName, Name pluralName, List<JCExpression> typeArgs, String targetFqn, JavacSingularizer singularizer, NullCollectionBehavior nullCollectionBehavior) {
- this(annotation, singularName, pluralName, typeArgs, targetFqn, singularizer, nullCollectionBehavior, "");
+ public SingularData(JavacNode annotation, Name singularName, Name pluralName, List<JCExpression> typeArgs, String targetFqn, JavacSingularizer singularizer, boolean ignoreNullCollections) {
+ this(annotation, singularName, pluralName, typeArgs, targetFqn, singularizer, ignoreNullCollections, "");
}
- public SingularData(JavacNode annotation, Name singularName, Name pluralName, List<JCExpression> typeArgs, String targetFqn, JavacSingularizer singularizer, NullCollectionBehavior nullCollectionBehavior, String setterPrefix) {
+ public SingularData(JavacNode annotation, Name singularName, Name pluralName, List<JCExpression> typeArgs, String targetFqn, JavacSingularizer singularizer, boolean ignoreNullCollections, String setterPrefix) {
this.annotation = annotation;
this.singularName = singularName;
this.pluralName = pluralName;
@@ -136,7 +134,7 @@ public class JavacSingularsRecipes {
this.targetFqn = targetFqn;
this.singularizer = singularizer;
this.setterPrefix = setterPrefix;
- this.nullCollectionBehavior = nullCollectionBehavior;
+ this.ignoreNullCollections = ignoreNullCollections;
}
public JavacNode getAnnotation() {
@@ -167,8 +165,8 @@ public class JavacSingularsRecipes {
return singularizer;
}
- public NullCollectionBehavior getNullCollectionBehavior() {
- return nullCollectionBehavior;
+ public boolean isIgnoreNullCollections() {
+ return ignoreNullCollections;
}
public String getTargetSimpleType() {
@@ -273,17 +271,19 @@ public class JavacSingularsRecipes {
generateClearMethod(cfv, deprecate, maker, returnTypeMaker.make(), returnStatementMaker.make(), data, builderType, source, access);
}
- private void finishAndInjectMethod(CheckerFrameworkVersion cfv, JavacTreeMaker maker, JCExpression returnType, JCStatement returnStatement, SingularData data, JavacNode builderType, JCTree source, boolean deprecate, ListBuffer<JCStatement> statements, Name methodName, List<JCVariableDecl> jcVariableDecls, AccessLevel access, NullCollectionBehavior nullBehavior) {
+ private void finishAndInjectMethod(CheckerFrameworkVersion cfv, JavacTreeMaker maker, JCExpression returnType, JCStatement returnStatement, SingularData data, JavacNode builderType, JCTree source, boolean deprecate, ListBuffer<JCStatement> statements, Name methodName, List<JCVariableDecl> jcVariableDecls, AccessLevel access, Boolean ignoreNullCollections) {
if (returnStatement != null) statements.append(returnStatement);
JCBlock body = maker.Block(0, statements.toList());
JCModifiers mods = makeMods(maker, cfv, builderType, deprecate, access);
List<JCTypeParameter> typeParams = List.nil();
List<JCExpression> thrown = List.nil();
- if (nullBehavior == NullCollectionBehavior.IGNORE) {
- for (JCVariableDecl d : jcVariableDecls) createRelevantNullableAnnotation(builderType, d);
- } else if (nullBehavior != null) {
- for (JCVariableDecl d : jcVariableDecls) createRelevantNonNullAnnotation(builderType, d);
+ if (ignoreNullCollections != null) {
+ if (ignoreNullCollections.booleanValue()) {
+ for (JCVariableDecl d : jcVariableDecls) createRelevantNullableAnnotation(builderType, d);
+ } else {
+ for (JCVariableDecl d : jcVariableDecls) createRelevantNonNullAnnotation(builderType, d);
+ }
}
JCMethodDecl method = maker.MethodDef(mods, methodName, returnType, typeParams, jcVariableDecls, thrown, body, null);
@@ -343,33 +343,21 @@ public class JavacSingularsRecipes {
JCExpression paramType = getPluralMethodParamType(builderType);
paramType = addTypeArgs(getTypeArgumentsCount(), true, builderType, paramType, data.getTypeArgs(), source);
long paramFlags = JavacHandlerUtil.addFinalIfNeeded(Flags.PARAMETER, builderType.getContext());
- NullCollectionBehavior behavior = data.getNullCollectionBehavior();
- if (behavior == null) behavior = NullCollectionBehavior.IGNORE;
+ boolean ignoreNullCollections = data.isIgnoreNullCollections();
JCModifiers paramMods = maker.Modifiers(paramFlags);
JCVariableDecl param = maker.VarDef(paramMods, data.getPluralName(), paramType, null);
statements.prepend(createConstructBuilderVarIfNeeded(maker, data, builderType, source));
- if (behavior == NullCollectionBehavior.IGNORE) {
+ if (ignoreNullCollections) {
JCExpression incomingIsNotNull = maker.Binary(CTC_NOT_EQUAL, maker.Ident(data.getPluralName()), maker.Literal(CTC_BOT, null));
JCStatement onNotNull = maker.Block(0, statements.toList());
statements = new ListBuffer<JCStatement>();
statements.add(maker.If(incomingIsNotNull, onNotNull, null));
} else {
- JCLiteral message = maker.Literal(behavior.toExceptionMessage(data.getPluralName().toString()));
- if (behavior.getExceptionType() != null) {
- JCExpression incomingIsNull = maker.Binary(CTC_EQUAL, maker.Ident(data.getPluralName()), maker.Literal(CTC_BOT, null));
- JCExpression exType = genTypeRef(builderType, behavior.getExceptionType());
- JCExpression exception = maker.NewClass(null, List.<JCExpression>nil(), exType, List.<JCExpression>of(message), null);
- JCStatement onNull = maker.Throw(exception);
- statements.prepend(maker.If(incomingIsNull, onNull, null));
- } else {
- LombokImmutableList<String> method = behavior.getMethod();
- JCExpression invoke = maker.Apply(List.<JCExpression>nil(), chainDots(builderType, method), List.of(maker.Ident(data.getPluralName()), message));
- statements.prepend(maker.Exec(invoke));
- }
+ statements.prepend(JavacHandlerUtil.generateNullCheck(maker, null, data.getPluralName(), builderType, "%s cannot be null"));
}
- finishAndInjectMethod(cfv, maker, returnType, returnStatement, data, builderType, source, deprecate, statements, name, List.of(param), access, behavior);
+ finishAndInjectMethod(cfv, maker, returnType, returnStatement, data, builderType, source, deprecate, statements, name, List.of(param), access, ignoreNullCollections);
}
protected ListBuffer<JCStatement> generatePluralMethodStatements(JavacTreeMaker maker, SingularData data, JavacNode builderType, JCTree source) {