mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 20:15:09 +00:00
ecj: setter methods now return self()
This commit is contained in:
1 parent
ee51d77dd6
commit
fb401d4887
8 files changed
+114
-107
No files matched your search
@@ -30,6 +30,7 @@ import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
|
||||
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
|
||||
@@ -46,6 +47,7 @@ import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference
|
||||
import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Reference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ReturnStatement;
|
||||
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Statement;
|
||||
@@ -55,6 +57,7 @@ import org.eclipse.jdt.internal.compiler.ast.Wildcard;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
|
||||
|
||||
import lombok.core.LombokImmutableList;
|
||||
import lombok.core.SpiLoadUtil;
|
||||
@@ -217,7 +220,37 @@ public class EclipseSingularsRecipes {
|
||||
}
|
||||
|
||||
public abstract List<EclipseNode> generateFields(SingularData data, EclipseNode builderType);
|
||||
public abstract void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, boolean chain);
|
||||
|
||||
/**
|
||||
* Generates the singular, plural, and clear methods for the given
|
||||
* {@link SingularData}.<br>
|
||||
* Uses the given <code>builderType</code> as return type if
|
||||
* <code>chain == true</code>, <code>void</code> otherwise. If you need more
|
||||
* control over the return type and value, use
|
||||
* {@link #generateMethods(SingularData, boolean, EclipseNode, boolean, Supplier, Supplier)}.
|
||||
*/
|
||||
public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, boolean chain) {
|
||||
// TODO: Make these lambdas when switching to a source level >= 1.8.
|
||||
Supplier<TypeReference> returnType = new Supplier<TypeReference>() {
|
||||
@Override public TypeReference get() {
|
||||
return chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
}
|
||||
};
|
||||
Supplier<ReturnStatement> returnStatement = new Supplier<ReturnStatement>() {
|
||||
@Override public ReturnStatement get() {
|
||||
return chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
}
|
||||
};
|
||||
generateMethods(data, deprecate, builderType, fluent, returnType, returnStatement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the singular, plural, and clear methods for the given
|
||||
* {@link SingularData}.<br>
|
||||
* Uses the given <code>returnType</code> and <code>returnStatement</code> for the generated methods.
|
||||
*/
|
||||
public abstract void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, Supplier<TypeReference> returnType, Supplier<ReturnStatement> returnStatement);
|
||||
|
||||
public abstract void appendBuildCode(SingularData data, EclipseNode builderType, List<Statement> statements, char[] targetVariableName, String builderVariable);
|
||||
|
||||
public boolean requiresCleaning() {
|
||||
|
||||
@@ -119,7 +119,7 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
|
||||
createSetterForField(level, fieldNode, sourceNode, false, empty, empty);
|
||||
}
|
||||
|
||||
public void handle(AnnotationValues<Setter> annotation, Annotation ast, EclipseNode annotationNode) {
|
||||
@Override public void handle(AnnotationValues<Setter> annotation, Annotation ast, EclipseNode annotationNode) {
|
||||
handleFlagUsage(annotationNode, ConfigurationKeys.SETTER_FLAG_USAGE, "@Setter");
|
||||
|
||||
EclipseNode node = annotationNode.up();
|
||||
@@ -196,22 +196,34 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
|
||||
MethodDeclaration method = createSetter((TypeDeclaration) fieldNode.up().get(), false, fieldNode, setterName, null, shouldReturnThis, modifier, sourceNode, onMethod, onParam);
|
||||
injectMethod(fieldNode.up(), method);
|
||||
}
|
||||
|
||||
|
||||
static MethodDeclaration createSetter(TypeDeclaration parent, boolean deprecate, EclipseNode fieldNode, String name, char[] booleanFieldToSet, boolean shouldReturnThis, int modifier, EclipseNode sourceNode, List<Annotation> onMethod, List<Annotation> onParam) {
|
||||
ASTNode source = sourceNode.get();
|
||||
int pS = source.sourceStart, pE = source.sourceEnd;
|
||||
|
||||
TypeReference returnType = null;
|
||||
ReturnStatement returnThis = null;
|
||||
if (shouldReturnThis) {
|
||||
returnType = cloneSelfType(fieldNode, source);
|
||||
ThisReference thisRef = new ThisReference(pS, pE);
|
||||
returnThis = new ReturnStatement(thisRef, pS, pE);
|
||||
}
|
||||
|
||||
return createSetter(parent, deprecate, fieldNode, name, booleanFieldToSet, returnType, returnThis, modifier, sourceNode, onMethod, onParam);
|
||||
}
|
||||
|
||||
static MethodDeclaration createSetter(TypeDeclaration parent, boolean deprecate, EclipseNode fieldNode, String name, char[] booleanFieldToSet, TypeReference returnType, ReturnStatement returnStatement, int modifier, EclipseNode sourceNode, List<Annotation> onMethod, List<Annotation> onParam) {
|
||||
FieldDeclaration field = (FieldDeclaration) fieldNode.get();
|
||||
ASTNode source = sourceNode.get();
|
||||
int pS = source.sourceStart, pE = source.sourceEnd;
|
||||
long p = (long)pS << 32 | pE;
|
||||
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
|
||||
method.modifiers = modifier;
|
||||
if (shouldReturnThis) {
|
||||
method.returnType = cloneSelfType(fieldNode, source);
|
||||
}
|
||||
|
||||
if (method.returnType == null) {
|
||||
if (returnType != null) {
|
||||
method.returnType = returnType;
|
||||
} else {
|
||||
method.returnType = TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
method.returnType.sourceStart = pS; method.returnType.sourceEnd = pE;
|
||||
shouldReturnThis = false;
|
||||
}
|
||||
Annotation[] deprecated = null;
|
||||
if (isFieldDeprecated(fieldNode) || deprecate) {
|
||||
@@ -248,10 +260,8 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
|
||||
statements.add(new Assignment(new SingleNameReference(booleanFieldToSet, p), new TrueLiteral(pS, pE), pE));
|
||||
}
|
||||
|
||||
if (shouldReturnThis) {
|
||||
ThisReference thisRef = new ThisReference(pS, pE);
|
||||
ReturnStatement returnThis = new ReturnStatement(thisRef, pS, pE);
|
||||
statements.add(returnThis);
|
||||
if (returnType != null && returnStatement != null) {
|
||||
statements.add(returnStatement);
|
||||
}
|
||||
method.statements = statements.toArray(new Statement[0]);
|
||||
param.annotations = copyAnnotations(source, nonNulls, nullables, onParam.toArray(new Annotation[0]));
|
||||
|
||||
@@ -30,6 +30,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
|
||||
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
|
||||
@@ -45,6 +46,7 @@ import org.eclipse.jdt.internal.compiler.ast.Expression;
|
||||
import org.eclipse.jdt.internal.compiler.ast.FalseLiteral;
|
||||
import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
|
||||
import org.eclipse.jdt.internal.compiler.ast.FieldReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.MessageSend;
|
||||
import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
|
||||
@@ -208,7 +210,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
// }
|
||||
if (extendsClause instanceof QualifiedTypeReference) {
|
||||
QualifiedTypeReference qualifiedTypeReference = (QualifiedTypeReference)extendsClause;
|
||||
String superclassClassName = qualifiedTypeReference.getLastToken().toString();
|
||||
String superclassClassName = String.valueOf(qualifiedTypeReference.getLastToken());
|
||||
String superclassBuilderClassName = superclassClassName + "Builder";
|
||||
char[][] tokens = Arrays.copyOf(qualifiedTypeReference.tokens, qualifiedTypeReference.tokens.length + 1);
|
||||
tokens[tokens.length] = superclassBuilderClassName.toCharArray();
|
||||
@@ -216,8 +218,9 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
Arrays.fill(poss, p);
|
||||
superclassBuilderClass = new QualifiedTypeReference(tokens, poss);
|
||||
} else if (extendsClause != null) {
|
||||
String superclassBuilderClassName = extendsClause.getTypeName().toString() + "Builder";
|
||||
char[][] tokens = new char[][] {extendsClause.getTypeName().toString().toCharArray(), superclassBuilderClassName.toCharArray()};
|
||||
String superClass = String.valueOf(extendsClause.getTypeName()[0]);
|
||||
String superclassBuilderClassName = superClass + "Builder";
|
||||
char[][] tokens = new char[][] {superClass.toCharArray(), superclassBuilderClassName.toCharArray()};
|
||||
long[] poss = new long[tokens.length];
|
||||
Arrays.fill(poss, p);
|
||||
superclassBuilderClass = new QualifiedTypeReference(tokens, poss);
|
||||
@@ -563,7 +566,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
// return maker.MethodDef(modifiers, type.toName(buildName), returnType, List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), thrownExceptions, body, null);
|
||||
// }
|
||||
|
||||
public MethodDeclaration generateDefaultProvider(char[] methodName, TypeParameter[] typeParameters, EclipseNode fieldNode, ASTNode source) {
|
||||
private MethodDeclaration generateDefaultProvider(char[] methodName, TypeParameter[] typeParameters, EclipseNode fieldNode, ASTNode source) {
|
||||
int pS = source.sourceStart, pE = source.sourceEnd;
|
||||
|
||||
MethodDeclaration out = new MethodDeclaration(((CompilationUnitDeclaration) fieldNode.top().get()).compilationResult);
|
||||
@@ -591,7 +594,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
// return maker.MethodDef(maker.Modifiers(modifiers), methodName, cloneType(maker, field.vartype, field, fieldNode.getContext()), copyTypeParams(fieldNode, params), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null);
|
||||
// }
|
||||
|
||||
public MethodDeclaration generateBuilderMethod(String builderMethodName, String builderClassName, String builderImplClassName, EclipseNode type, TypeParameter[] typeParams, ASTNode source) {
|
||||
private MethodDeclaration generateBuilderMethod(String builderMethodName, String builderClassName, String builderImplClassName, EclipseNode type, TypeParameter[] typeParams, ASTNode source) {
|
||||
int pS = source.sourceStart, pE = source.sourceEnd;
|
||||
long p = (long) pS << 32 | pE;
|
||||
|
||||
@@ -635,7 +638,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
// return maker.MethodDef(maker.Modifiers(modifiers), type.toName(builderMethodName), returnType, copyTypeParams(source, typeParams), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null);
|
||||
// }
|
||||
|
||||
public void generateBuilderFields(EclipseNode builderType, List<BuilderFieldData> builderFields, ASTNode source) {
|
||||
private void generateBuilderFields(EclipseNode builderType, List<BuilderFieldData> builderFields, ASTNode source) {
|
||||
List<EclipseNode> existing = new ArrayList<EclipseNode>();
|
||||
for (EclipseNode child : builderType.down()) {
|
||||
if (child.getKind() == Kind.FIELD) {
|
||||
@@ -679,28 +682,32 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
}
|
||||
}
|
||||
|
||||
public void makeSetterMethodsForBuilder(EclipseNode builderType, BuilderFieldData bfd, EclipseNode sourceNode, String builderGenericName) {
|
||||
private void makeSetterMethodsForBuilder(EclipseNode builderType, BuilderFieldData bfd, EclipseNode sourceNode, String builderGenericName) {
|
||||
boolean deprecate = isFieldDeprecated(bfd.originalFieldNode);
|
||||
|
||||
// TODO: Make these lambdas when switching to a source level >= 1.8.
|
||||
Supplier<TypeReference> returnType = new Supplier<TypeReference>() {
|
||||
@Override public TypeReference get() {
|
||||
return new SingleTypeReference(builderGenericName.toCharArray(), 0);
|
||||
}
|
||||
};
|
||||
Supplier<ReturnStatement> returnStatement = new Supplier<ReturnStatement>() {
|
||||
@Override public ReturnStatement get() {
|
||||
MessageSend returnCall = new MessageSend();
|
||||
returnCall.receiver = ThisReference.implicitThis();
|
||||
returnCall.selector = SELF_METHOD.toCharArray();
|
||||
return new ReturnStatement(returnCall, 0, 0);
|
||||
}
|
||||
};
|
||||
if (bfd.singularData == null || bfd.singularData.getSingularizer() == null) {
|
||||
makeSimpleSetterMethodForBuilder(builderType, deprecate, bfd.createdFields.get(0), bfd.nameOfSetFlag, sourceNode);
|
||||
makeSimpleSetterMethodForBuilder(builderType, deprecate, bfd.createdFields.get(0), bfd.nameOfSetFlag, returnType.get(), returnStatement.get(), sourceNode);
|
||||
} else {
|
||||
bfd.singularData.getSingularizer().generateMethods(bfd.singularData, deprecate, builderType, true, true);
|
||||
bfd.singularData.getSingularizer().generateMethods(bfd.singularData, deprecate, builderType, true, returnType, returnStatement);
|
||||
}
|
||||
}
|
||||
// public void makeSetterMethodsForBuilder(EclipseNode builderType, BuilderFieldData fieldNode, EclipseNode source, String builderGenericName) {
|
||||
// boolean deprecate = isFieldDeprecated(fieldNode.originalFieldNode);
|
||||
// JavacTreeMaker maker = builderType.getTreeMaker();
|
||||
// JCExpression returnType = maker.Ident(builderType.toName(builderGenericName));
|
||||
// JCReturn returnStatement = maker.Return(maker.Apply(List.<JCExpression>nil(), maker.Ident(builderType.toName(SELF_METHOD)), List.<JCExpression>nil()));
|
||||
// if (fieldNode.singularData == null || fieldNode.singularData.getSingularizer() == null) {
|
||||
// makeSimpleSetterMethodForBuilder(builderType, deprecate, fieldNode.createdFields.get(0), fieldNode.nameOfSetFlag, source, true, true, returnType, returnStatement);
|
||||
// } else {
|
||||
// fieldNode.singularData.getSingularizer().generateMethods(fieldNode.singularData, deprecate, builderType, source.get(), true, returnType, returnStatement);
|
||||
// }
|
||||
// }
|
||||
|
||||
private static final AbstractMethodDeclaration[] EMPTY = {};
|
||||
private void makeSimpleSetterMethodForBuilder(EclipseNode builderType, boolean deprecate, EclipseNode fieldNode, char[] nameOfSetFlag, EclipseNode sourceNode) {
|
||||
private void makeSimpleSetterMethodForBuilder(EclipseNode builderType, boolean deprecate, EclipseNode fieldNode, char[] nameOfSetFlag, TypeReference returnType, ReturnStatement returnStatement, EclipseNode sourceNode) {
|
||||
TypeDeclaration td = (TypeDeclaration) builderType.get();
|
||||
AbstractMethodDeclaration[] existing = td.methods;
|
||||
if (existing == null) {
|
||||
@@ -722,34 +729,12 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
|
||||
String setterName = fieldNode.getName();
|
||||
|
||||
MethodDeclaration setter = HandleSetter.createSetter(td, deprecate, fieldNode, setterName, nameOfSetFlag, true, ClassFileConstants.AccPublic,
|
||||
MethodDeclaration setter = HandleSetter.createSetter(td, deprecate, fieldNode, setterName, nameOfSetFlag, returnType, returnStatement, ClassFileConstants.AccPublic,
|
||||
sourceNode, Collections.<Annotation>emptyList(), Collections.<Annotation>emptyList());
|
||||
injectMethod(builderType, setter);
|
||||
}
|
||||
// private void makeSimpleSetterMethodForBuilder(EclipseNode builderType, boolean deprecate, EclipseNode fieldNode, Name nameOfSetFlag, EclipseNode source, boolean fluent, boolean chain, JCExpression returnType, JCReturn returnStatement) {
|
||||
// Name fieldName = ((JCVariableDecl) fieldNode.get()).name;
|
||||
//
|
||||
// for (EclipseNode child : builderType.down()) {
|
||||
// if (child.getKind() != Kind.METHOD) {
|
||||
// continue;
|
||||
// }
|
||||
// MethodDeclaration methodDecl = (MethodDeclaration) child.get();
|
||||
// Name existingName = methodDecl.name;
|
||||
// if (existingName.equals(fieldName) && !isTolerate(fieldNode, methodDecl)) {
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// String setterName = fluent ? fieldNode.getName() : HandlerUtil.buildAccessorName("set", fieldNode.getName());
|
||||
//
|
||||
// JavacTreeMaker maker = fieldNode.getTreeMaker();
|
||||
//
|
||||
// MethodDeclaration newMethod = HandleSetter.createSetter(Flags.PUBLIC, deprecate, fieldNode, maker, setterName, nameOfSetFlag, returnType, returnStatement, source, List.<JCAnnotation>nil(), List.<JCAnnotation>nil());
|
||||
//
|
||||
// injectMethod(builderType, newMethod);
|
||||
// }
|
||||
|
||||
public EclipseNode findInnerClass(EclipseNode parent, String name) {
|
||||
private EclipseNode findInnerClass(EclipseNode parent, String name) {
|
||||
char[] c = name.toCharArray();
|
||||
for (EclipseNode child : parent.down()) {
|
||||
if (child.getKind() != Kind.TYPE) {
|
||||
@@ -763,7 +748,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
return null;
|
||||
}
|
||||
|
||||
public EclipseNode makeBuilderAbstractClass(EclipseNode tdParent, String builderClass,
|
||||
private EclipseNode makeBuilderAbstractClass(EclipseNode tdParent, String builderClass,
|
||||
TypeReference superclassBuilderClass, TypeParameter[] typeParams,
|
||||
TypeParameter[] superclassTypeParams, ASTNode source, String classGenericName, String builderGenericName) {
|
||||
|
||||
@@ -807,7 +792,7 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
|
||||
return injectType(tdParent, builder);
|
||||
}
|
||||
|
||||
public EclipseNode makeBuilderImplClass(EclipseNode tdParent, String builderImplClass, String builderAbstractClass, TypeParameter[] typeParams, ASTNode source) {
|
||||
private EclipseNode makeBuilderImplClass(EclipseNode tdParent, String builderImplClass, String builderAbstractClass, TypeParameter[] typeParams, ASTNode source) {
|
||||
TypeDeclaration parent = (TypeDeclaration) tdParent.get();
|
||||
TypeDeclaration builder = new TypeDeclaration(parent.compilationResult);
|
||||
builder.bits |= Eclipse.ECLIPSE_DO_NOT_TOUCH_FLAG;
|
||||
|
||||
@@ -27,6 +27,7 @@ import static lombok.eclipse.handlers.EclipseHandlerUtil.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import lombok.core.GuavaTypeMap;
|
||||
import lombok.core.LombokImmutableList;
|
||||
@@ -58,7 +59,6 @@ import org.eclipse.jdt.internal.compiler.ast.Statement;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ThisReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
|
||||
|
||||
abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
|
||||
protected String getSimpleTargetTypeName(SingularData data) {
|
||||
@@ -97,18 +97,10 @@ abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
|
||||
return Collections.singletonList(injectFieldAndMarkGenerated(builderType, buildField));
|
||||
}
|
||||
|
||||
@Override public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, boolean chain) {
|
||||
TypeReference returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
Statement returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generateSingularMethod(deprecate, returnType, returnStatement, data, builderType, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generatePluralMethod(deprecate, returnType, returnStatement, data, builderType, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generateClearMethod(deprecate, returnType, returnStatement, data, builderType);
|
||||
@Override public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, Supplier<TypeReference> returnType, Supplier<ReturnStatement> returnStatement) {
|
||||
generateSingularMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType, fluent);
|
||||
generatePluralMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType, fluent);
|
||||
generateClearMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType);
|
||||
}
|
||||
|
||||
void generateClearMethod(boolean deprecate, TypeReference returnType, Statement returnStatement, SingularData data, EclipseNode builderType) {
|
||||
|
||||
@@ -27,6 +27,7 @@ import static lombok.eclipse.handlers.EclipseHandlerUtil.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import lombok.core.handlers.HandlerUtil;
|
||||
import lombok.eclipse.EclipseNode;
|
||||
@@ -52,7 +53,6 @@ import org.eclipse.jdt.internal.compiler.ast.ThisReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
|
||||
|
||||
abstract class EclipseJavaUtilListSetSingularizer extends EclipseJavaUtilSingularizer {
|
||||
@Override public List<char[]> listFieldsToBeGenerated(SingularData data, EclipseNode builderType) {
|
||||
@@ -88,23 +88,15 @@ abstract class EclipseJavaUtilListSetSingularizer extends EclipseJavaUtilSingula
|
||||
return Collections.singletonList(injectFieldAndMarkGenerated(builderType, buildField));
|
||||
}
|
||||
|
||||
@Override public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, boolean chain) {
|
||||
@Override public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, Supplier<TypeReference> returnType, Supplier<ReturnStatement> returnStatement) {
|
||||
if (useGuavaInstead(builderType)) {
|
||||
guavaListSetSingularizer.generateMethods(data, deprecate, builderType, fluent, chain);
|
||||
guavaListSetSingularizer.generateMethods(data, deprecate, builderType, fluent, returnType, returnStatement);
|
||||
return;
|
||||
}
|
||||
|
||||
TypeReference returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
Statement returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generateSingularMethod(deprecate, returnType, returnStatement, data, builderType, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generatePluralMethod(deprecate, returnType, returnStatement, data, builderType, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generateClearMethod(deprecate, returnType, returnStatement, data, builderType);
|
||||
generateSingularMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType, fluent);
|
||||
generatePluralMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType, fluent);
|
||||
generateClearMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType);
|
||||
}
|
||||
|
||||
private void generateClearMethod(boolean deprecate, TypeReference returnType, Statement returnStatement, SingularData data, EclipseNode builderType) {
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.ast.Annotation;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Argument;
|
||||
@@ -51,7 +52,6 @@ import org.eclipse.jdt.internal.compiler.ast.Statement;
|
||||
import org.eclipse.jdt.internal.compiler.ast.ThisReference;
|
||||
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
|
||||
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
|
||||
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
|
||||
import org.mangosdk.spi.ProviderFor;
|
||||
|
||||
import lombok.core.LombokImmutableList;
|
||||
@@ -133,23 +133,15 @@ public class EclipseJavaUtilMapSingularizer extends EclipseJavaUtilSingularizer
|
||||
return Arrays.asList(keyFieldNode, valueFieldNode);
|
||||
}
|
||||
|
||||
@Override public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, boolean chain) {
|
||||
@Override public void generateMethods(SingularData data, boolean deprecate, EclipseNode builderType, boolean fluent, Supplier<TypeReference> returnType, Supplier<ReturnStatement> returnStatement) {
|
||||
if (useGuavaInstead(builderType)) {
|
||||
guavaMapSingularizer.generateMethods(data, deprecate, builderType, fluent, chain);
|
||||
guavaMapSingularizer.generateMethods(data, deprecate, builderType, fluent, returnType, returnStatement);
|
||||
return;
|
||||
}
|
||||
|
||||
TypeReference returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
Statement returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generateSingularMethod(deprecate, returnType, returnStatement, data, builderType, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generatePluralMethod(deprecate, returnType, returnStatement, data, builderType, fluent);
|
||||
|
||||
returnType = chain ? cloneSelfType(builderType) : TypeReference.baseTypeReference(TypeIds.T_void, 0);
|
||||
returnStatement = chain ? new ReturnStatement(new ThisReference(0, 0), 0, 0) : null;
|
||||
generateClearMethod(deprecate, returnType, returnStatement, data, builderType);
|
||||
generateSingularMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType, fluent);
|
||||
generatePluralMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType, fluent);
|
||||
generateClearMethod(deprecate, returnType.get(), returnStatement.get(), data, builderType);
|
||||
}
|
||||
|
||||
private void generateClearMethod(boolean deprecate, TypeReference returnType, Statement returnStatement, SingularData data, EclipseNode builderType) {
|
||||
|
||||
@@ -200,7 +200,7 @@ public class JavacSingularsRecipes {
|
||||
* Generates the singular, plural, and clear methods for the given
|
||||
* {@link SingularData}.<br>
|
||||
* Uses the given <code>builderType</code> as return type if
|
||||
* <code>chain == true</code>, <code>void</code> otherwise.. If you need more
|
||||
* <code>chain == true</code>, <code>void</code> otherwise. If you need more
|
||||
* control over the return type and value, use
|
||||
* {@link #generateMethods(SingularData, boolean, JavacNode, JCTree, boolean, JCExpression, JCStatement)}.
|
||||
*/
|
||||
|
||||
@@ -10,18 +10,21 @@ public class SuperBuilderBasic {
|
||||
this.field1 = field1;
|
||||
return self();
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") B item(final String item) {
|
||||
if (this.items == null) this.items = new java.util.ArrayList<String>();
|
||||
public @java.lang.SuppressWarnings("all") B item(String item) {
|
||||
if ((this.items == null))
|
||||
this.items = new java.util.ArrayList<String>();
|
||||
this.items.add(item);
|
||||
return self();
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") B items(final java.util.Collection<? extends String> items) {
|
||||
if (this.items == null) this.items = new java.util.ArrayList<String>();
|
||||
public @java.lang.SuppressWarnings("all") B items(java.util.Collection<? extends String> items) {
|
||||
if ((this.items == null))
|
||||
this.items = new java.util.ArrayList<String>();
|
||||
this.items.addAll(items);
|
||||
return self();
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") B clearItems() {
|
||||
if (this.items != null) this.items.clear();
|
||||
if ((this.items != null))
|
||||
this.items.clear();
|
||||
return self();
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
|
||||
Reference in new issue
Block a user