@Builder gained @Singular support and was promoted to the main lombok package since lombok v1.16.0.
-
+
+ @Builder with @Singular adds a clear method since lombok v1.16.8.
Overview
@@ -82,11 +83,11 @@
By annotating one of the parameters (if annotating a static method or constructor with @Builder) or fields (if annotating a class with @Builder) with the
@Singular annotation, lombok will treat that builder node as a collection, and it generates 2 'adder' methods instead of a 'setter' method. One which adds a single element to the collection, and one
- which adds all elements of another collection to the collection. No setter to just set the collection (replacing whatever was already added) will be generated. These 'singular' builders
+ which adds all elements of another collection to the collection. No setter to just set the collection (replacing whatever was already added) will be generated. A 'clear' method is also generated. These 'singular' builders
are very complicated in order to guarantee the following properties:
When invoking build(), the produced collection will be immutable.
-
Calling one of the 'adder' methods after invoking build() does not modify any already generated objects, and, if build() is later called again, another collection with all the elements added since the creation of the builder is generated.
+
Calling one of the 'adder' methods, or the 'clear' method, after invoking build() does not modify any already generated objects, and, if build() is later called again, another collection with all the elements added since the creation of the builder is generated.
The produced collection will be compacted to the smallest feasible format while remaining efficient.
--
cgit
From b235bb49c57af4d925f58333d0ad631c6ccf924f Mon Sep 17 00:00:00 2001
From: Reinier Zwitserloot
Date: Tue, 17 Nov 2015 02:14:13 +0100
Subject: [issue #937] Refactored the support for guava’s ImmutableTable.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/core/lombok/core/GuavaTypeMap.java | 16 +-
.../singulars/EclipseGuavaMapSingularizer.java | 25 +++-
.../singulars/EclipseGuavaSetListSingularizer.java | 35 +++--
.../singulars/EclipseGuavaSingularizer.java | 162 ++++++++-------------
.../singulars/EclipseGuavaTableSingularizer.java | 51 +++++++
.../singulars/JavacGuavaMapSingularizer.java | 25 +++-
.../singulars/JavacGuavaSetListSingularizer.java | 29 ++--
.../handlers/singulars/JavacGuavaSingularizer.java | 144 ++++++++----------
.../singulars/JavacGuavaTableSingularizer.java | 51 +++++++
.../BuilderSingularGuavaListsSets.java | 13 +-
.../after-delombok/BuilderSingularGuavaMaps.java | 12 +-
.../BuilderSingularRedirectToGuava.java | 4 +-
.../after-ecj/BuilderSingularGuavaListsSets.java | 9 +-
.../after-ecj/BuilderSingularGuavaMaps.java | 12 +-
.../after-ecj/BuilderSingularRedirectToGuava.java | 4 +-
15 files changed, 342 insertions(+), 250 deletions(-)
create mode 100644 src/core/lombok/eclipse/handlers/singulars/EclipseGuavaTableSingularizer.java
create mode 100644 src/core/lombok/javac/handlers/singulars/JavacGuavaTableSingularizer.java
(limited to 'test/transform/resource')
diff --git a/src/core/lombok/core/GuavaTypeMap.java b/src/core/lombok/core/GuavaTypeMap.java
index e84a32be..282d5d81 100644
--- a/src/core/lombok/core/GuavaTypeMap.java
+++ b/src/core/lombok/core/GuavaTypeMap.java
@@ -1,16 +1,16 @@
/*
* Copyright (C) 2015 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -28,7 +28,7 @@ import java.util.Map;
public final class GuavaTypeMap {
private static final Map TYPE_TO_GUAVA_TYPE; static {
Map m = new HashMap();
-
+
m.put("java.util.NavigableSet", "ImmutableSortedSet");
m.put("java.util.NavigableMap", "ImmutableSortedMap");
m.put("java.util.SortedSet", "ImmutableSortedSet");
@@ -37,7 +37,7 @@ public final class GuavaTypeMap {
m.put("java.util.Map", "ImmutableMap");
m.put("java.util.Collection", "ImmutableList");
m.put("java.util.List", "ImmutableList");
-
+
m.put("com.google.common.collect.ImmutableSet", "ImmutableSet");
m.put("com.google.common.collect.ImmutableSortedSet", "ImmutableSortedSet");
m.put("com.google.common.collect.ImmutableMap", "ImmutableMap");
@@ -46,14 +46,14 @@ public final class GuavaTypeMap {
m.put("com.google.common.collect.ImmutableList", "ImmutableList");
m.put("com.google.common.collect.ImmutableCollection", "ImmutableList");
m.put("com.google.common.collect.ImmutableTable", "ImmutableTable");
-
+
TYPE_TO_GUAVA_TYPE = Collections.unmodifiableMap(m);
}
-
+
public static String getGuavaTypeName(String fqn) {
String target = TYPE_TO_GUAVA_TYPE.get(fqn);
return target != null ? target : "ImmutableList";
}
-
+
private GuavaTypeMap() {}
}
diff --git a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaMapSingularizer.java b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaMapSingularizer.java
index 95fd8935..5956c01b 100644
--- a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaMapSingularizer.java
+++ b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaMapSingularizer.java
@@ -32,14 +32,27 @@ public class EclipseGuavaMapSingularizer extends EclipseGuavaSingularizer {
// TODO cgcc.ImmutableClassToInstanceMap
// TODO cgcc.ImmutableRangeMap
+ private static final LombokImmutableList SUFFIXES =
+ LombokImmutableList.of("key", "value");
+ private static final LombokImmutableList SUPPORTED_TYPES = LombokImmutableList.of(
+ "com.google.common.collect.ImmutableMap",
+ "com.google.common.collect.ImmutableBiMap",
+ "com.google.common.collect.ImmutableSortedMap"
+ );
+
@Override public LombokImmutableList getSupportedTypes() {
- return LombokImmutableList.of(
- "com.google.common.collect.ImmutableMap",
- "com.google.common.collect.ImmutableBiMap",
- "com.google.common.collect.ImmutableSortedMap");
+ return SUPPORTED_TYPES;
+ }
+
+ @Override protected LombokImmutableList getArgumentSuffixes() {
+ return SUFFIXES;
+ }
+
+ @Override protected String getAddMethodName() {
+ return "put";
}
- @Override protected boolean isMap() {
- return true;
+ @Override protected String getAddAllTypeName() {
+ return "java.util.Map";
}
}
diff --git a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSetListSingularizer.java b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSetListSingularizer.java
index e2ca1270..326a9179 100644
--- a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSetListSingularizer.java
+++ b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSetListSingularizer.java
@@ -1,16 +1,16 @@
/*
* Copyright (C) 2015 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -30,16 +30,27 @@ import lombok.eclipse.handlers.EclipseSingularsRecipes.EclipseSingularizer;
public class EclipseGuavaSetListSingularizer extends EclipseGuavaSingularizer {
// TODO com.google.common.collect.ImmutableRangeSet
// TODO com.google.common.collect.ImmutableMultiset and com.google.common.collect.ImmutableSortedMultiset
+ private static final LombokImmutableList SUFFIXES = LombokImmutableList.of("");
+ private static final LombokImmutableList SUPPORTED_TYPES = LombokImmutableList.of(
+ "com.google.common.collect.ImmutableCollection",
+ "com.google.common.collect.ImmutableList",
+ "com.google.common.collect.ImmutableSet",
+ "com.google.common.collect.ImmutableSortedSet"
+ );
+
@Override public LombokImmutableList getSupportedTypes() {
- return LombokImmutableList.of(
- "com.google.common.collect.ImmutableCollection",
- "com.google.common.collect.ImmutableList",
- "com.google.common.collect.ImmutableSet",
- "com.google.common.collect.ImmutableSortedSet",
- "com.google.common.collect.ImmutableTable");
+ return SUPPORTED_TYPES;
}
-
- @Override protected boolean isMap() {
- return false;
+
+ @Override protected LombokImmutableList getArgumentSuffixes() {
+ return SUFFIXES;
+ }
+
+ @Override protected String getAddMethodName() {
+ return "add";
+ }
+
+ @Override protected String getAddAllTypeName() {
+ return "java.lang.Iterable";
}
}
diff --git a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSingularizer.java b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSingularizer.java
index d105dd29..242bde1f 100644
--- a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSingularizer.java
+++ b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaSingularizer.java
@@ -1,16 +1,16 @@
/*
* Copyright (C) 2015 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -29,6 +29,7 @@ import java.util.Collections;
import java.util.List;
import lombok.core.GuavaTypeMap;
+import lombok.core.LombokImmutableList;
import lombok.core.handlers.HandlerUtil;
import lombok.eclipse.EclipseNode;
import lombok.eclipse.handlers.EclipseSingularsRecipes.EclipseSingularizer;
@@ -56,29 +57,19 @@ 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.TypeConstants;
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
- protected static final char[][] JAVA_UTIL_MAP = {
- {'j', 'a', 'v', 'a'}, {'u', 't', 'i', 'l'}, {'M', 'a', 'p'}
- };
- protected static final char[][] GUAVA_COLLECT_TABLE = {
- {'c', 'o', 'm'}, {'g', 'o', 'o', 'g', 'l', 'e'}, {'c', 'o', 'm', 'm', 'o', 'n'}, {'c', 'o', 'l', 'l', 'e', 'c', 't'}, {'T', 'a', 'b', 'l', 'e'}
- };
-
protected String getSimpleTargetTypeName(SingularData data) {
return GuavaTypeMap.getGuavaTypeName(data.getTargetFqn());
}
-
+
protected char[] getBuilderMethodName(SingularData data) {
String simpleTypeName = getSimpleTargetTypeName(data);
if ("ImmutableSortedSet".equals(simpleTypeName) || "ImmutableSortedMap".equals(simpleTypeName)) return "naturalOrder".toCharArray();
return "builder".toCharArray();
}
-
- protected abstract boolean isMap();
-
+
protected char[][] makeGuavaTypeName(String simpleName, boolean addBuilder) {
char[][] tokenizedName = new char[addBuilder ? 6 : 5][];
tokenizedName[0] = new char[] {'c', 'o', 'm'};
@@ -89,13 +80,13 @@ abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
if (addBuilder) tokenizedName[5] = new char[] { 'B', 'u', 'i', 'l', 'd', 'e', 'r'};
return tokenizedName;
}
-
+
@Override public List generateFields(SingularData data, EclipseNode builderType) {
String simpleTypeName = getSimpleTargetTypeName(data);
char[][] tokenizedName = makeGuavaTypeName(simpleTypeName, true);
TypeReference type = new QualifiedTypeReference(tokenizedName, NULL_POSS);
- type = addTypeArgs(getTypeArgumentsCount(isMap(), simpleTypeName), false, builderType, type, data.getTypeArgs());
-
+ type = addTypeArgs(getTypeArgumentsCount(), false, builderType, type, data.getTypeArgs());
+
FieldDeclaration buildField = new FieldDeclaration(data.getPluralName(), 0, -1);
buildField.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
buildField.modifiers = ClassFileConstants.AccPrivate;
@@ -104,12 +95,12 @@ abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
data.setGeneratedByRecursive(buildField);
return Collections.singletonList(injectFieldAndMarkGenerated(builderType, buildField));
}
-
+
@Override public void generateMethods(SingularData data, 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(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(returnType, returnStatement, data, builderType, fluent);
@@ -132,115 +123,84 @@ abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
md.returnType = returnType;
injectMethod(builderType, md);
}
-
+
void generateSingularMethod(TypeReference returnType, Statement returnStatement, SingularData data, EclipseNode builderType, boolean fluent) {
- boolean mapMode = isMap();
- char[] keyName = !mapMode ? data.getSingularName() : (new String(data.getSingularName()) + "$key").toCharArray();
- char[] valueName = !mapMode ? null : (new String(data.getSingularName()) + "$value").toCharArray();
-
+ LombokImmutableList suffixes = getArgumentSuffixes();
+ char[][] names = new char[suffixes.size()][];
+ for (int i = 0; i < suffixes.size(); i++) {
+ String s = suffixes.get(i);
+ char[] n = data.getSingularName();
+ names[i] = s.isEmpty() ? n : s.toCharArray();
+ }
+
MethodDeclaration md = new MethodDeclaration(((CompilationUnitDeclaration) builderType.top().get()).compilationResult);
md.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
md.modifiers = ClassFileConstants.AccPublic;
-
+
List statements = new ArrayList();
statements.add(createConstructBuilderVarIfNeeded(data, builderType));
-
+
FieldReference thisDotField = new FieldReference(data.getPluralName(), 0L);
thisDotField.receiver = new ThisReference(0, 0);
MessageSend thisDotFieldDotAdd = new MessageSend();
- if (mapMode) {
- thisDotFieldDotAdd.arguments = new Expression[] {
- new SingleNameReference(keyName, 0L),
- new SingleNameReference(valueName, 0L)};
- } else {
- thisDotFieldDotAdd.arguments = new Expression[] {new SingleNameReference(keyName, 0L)};
+ thisDotFieldDotAdd.arguments = new Expression[suffixes.size()];
+ for (int i = 0; i < suffixes.size(); i++) {
+ thisDotFieldDotAdd.arguments[i] = new SingleNameReference(names[i], 0L);
}
thisDotFieldDotAdd.receiver = thisDotField;
- thisDotFieldDotAdd.selector = (shouldUsePut(data, mapMode) ? "put" : "add").toCharArray();
+ thisDotFieldDotAdd.selector = getAddMethodName().toCharArray();
statements.add(thisDotFieldDotAdd);
if (returnStatement != null) statements.add(returnStatement);
md.statements = statements.toArray(new Statement[statements.size()]);
-
- if (mapMode) {
- TypeReference keyType = cloneParamType(0, data.getTypeArgs(), builderType);
- Argument keyParam = new Argument(keyName, 0, keyType, 0);
- TypeReference valueType = cloneParamType(1, data.getTypeArgs(), builderType);
- Argument valueParam = new Argument(valueName, 0, valueType, 0);
- md.arguments = new Argument[] {keyParam, valueParam};
- } else {
- final Argument param;
-
- if (isSpecialTypeOfListSet(data)) {
- char[][] cellTypeName = makeGuavaTypeName("Table", true);
- cellTypeName[5] = new char[] { 'C', 'e', 'l', 'l' };
- TypeReference type = new QualifiedTypeReference(cellTypeName, NULL_POSS);
- type = addTypeArgs(3, false, builderType, type, data.getTypeArgs());
-
- param = new Argument(keyName, 0, type, 0);
- } else {
- TypeReference paramType = cloneParamType(0, data.getTypeArgs(), builderType);
- param = new Argument(keyName, 0, paramType, 0);
- }
-
- md.arguments = new Argument[] {param};
+ md.arguments = new Argument[suffixes.size()];
+ for (int i = 0; i < suffixes.size(); i++) {
+ TypeReference tr = cloneParamType(i, data.getTypeArgs(), builderType);
+ md.arguments[i] = new Argument(names[i], 0, tr, 0);
}
md.returnType = returnType;
- md.selector = fluent ? data.getSingularName() : HandlerUtil.buildAccessorName(shouldUsePut(data, mapMode) ? "put" : "add", new String(data.getSingularName())).toCharArray();
-
+ md.selector = fluent ? data.getSingularName() : HandlerUtil.buildAccessorName(getAddMethodName(), new String(data.getSingularName())).toCharArray();
+
data.setGeneratedByRecursive(md);
injectMethod(builderType, md);
}
-
+
void generatePluralMethod(TypeReference returnType, Statement returnStatement, SingularData data, EclipseNode builderType, boolean fluent) {
- boolean mapMode = isMap();
-
MethodDeclaration md = new MethodDeclaration(((CompilationUnitDeclaration) builderType.top().get()).compilationResult);
md.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
md.modifiers = ClassFileConstants.AccPublic;
-
+
List statements = new ArrayList();
statements.add(createConstructBuilderVarIfNeeded(data, builderType));
-
+
FieldReference thisDotField = new FieldReference(data.getPluralName(), 0L);
thisDotField.receiver = new ThisReference(0, 0);
MessageSend thisDotFieldDotAddAll = new MessageSend();
thisDotFieldDotAddAll.arguments = new Expression[] {new SingleNameReference(data.getPluralName(), 0L)};
thisDotFieldDotAddAll.receiver = thisDotField;
- thisDotFieldDotAddAll.selector = (shouldUsePut(data, mapMode) ? "putAll" : "addAll").toCharArray();
+ thisDotFieldDotAddAll.selector = (getAddMethodName() + "All").toCharArray();
statements.add(thisDotFieldDotAddAll);
if (returnStatement != null) statements.add(returnStatement);
-
+
md.statements = statements.toArray(new Statement[statements.size()]);
-
+
TypeReference paramType;
- if (mapMode) {
- paramType = new QualifiedTypeReference(JAVA_UTIL_MAP, NULL_POSS);
- paramType = addTypeArgs(2, true, builderType, paramType, data.getTypeArgs());
- } else {
- if (isSpecialTypeOfListSet(data)) {
- paramType = new QualifiedTypeReference(GUAVA_COLLECT_TABLE, NULL_POSS);
- } else {
- paramType = new QualifiedTypeReference(TypeConstants.JAVA_LANG_ITERABLE, NULL_POSS);
- }
-
- paramType = addTypeArgs(getListSetTypeArgumentsCount(getSimpleTargetTypeName(data)), true, builderType, paramType, data.getTypeArgs());
- }
+ paramType = new QualifiedTypeReference(fromQualifiedName(getAddAllTypeName()), NULL_POSS);
+ paramType = addTypeArgs(getTypeArgumentsCount(), true, builderType, paramType, data.getTypeArgs());
Argument param = new Argument(data.getPluralName(), 0, paramType, 0);
md.arguments = new Argument[] {param};
md.returnType = returnType;
- md.selector = fluent ? data.getPluralName() : HandlerUtil.buildAccessorName(shouldUsePut(data, mapMode) ? "putAll" : "addAll", new String(data.getPluralName())).toCharArray();
-
+ md.selector = fluent ? data.getPluralName() : HandlerUtil.buildAccessorName(getAddMethodName() + "All", new String(data.getPluralName())).toCharArray();
+
data.setGeneratedByRecursive(md);
injectMethod(builderType, md);
}
-
+
@Override public void appendBuildCode(SingularData data, EclipseNode builderType, List statements, char[] targetVariableName) {
- boolean mapMode = isMap();
TypeReference varType = new QualifiedTypeReference(fromQualifiedName(data.getTargetFqn()), NULL_POSS);
String simpleTypeName = getSimpleTargetTypeName(data);
- int agrumentsCount = getTypeArgumentsCount(mapMode, simpleTypeName);
+ int agrumentsCount = getTypeArgumentsCount();
varType = addTypeArgs(agrumentsCount, false, builderType, varType, data.getTypeArgs());
-
+
MessageSend emptyInvoke; {
//ImmutableX.of()
emptyInvoke = new MessageSend();
@@ -248,7 +208,7 @@ abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
emptyInvoke.receiver = new QualifiedNameReference(makeGuavaTypeName(simpleTypeName, false), NULL_POSS, 0, 0);
emptyInvoke.typeArguments = createTypeArgs(agrumentsCount, false, builderType, data.getTypeArgs());
}
-
+
MessageSend invokeBuild; {
//this.pluralName.build();
invokeBuild = new MessageSend();
@@ -257,48 +217,40 @@ abstract class EclipseGuavaSingularizer extends EclipseSingularizer {
thisDotField.receiver = new ThisReference(0, 0);
invokeBuild.receiver = thisDotField;
}
-
+
Expression isNull; {
//this.pluralName == null
FieldReference thisDotField = new FieldReference(data.getPluralName(), 0L);
thisDotField.receiver = new ThisReference(0, 0);
isNull = new EqualExpression(thisDotField, new NullLiteral(0, 0), OperatorIds.EQUAL_EQUAL);
}
-
+
Expression init = new ConditionalExpression(isNull, emptyInvoke, invokeBuild);
LocalDeclaration varDefStat = new LocalDeclaration(data.getPluralName(), 0, 0);
varDefStat.type = varType;
varDefStat.initialization = init;
statements.add(varDefStat);
}
-
+
protected Statement createConstructBuilderVarIfNeeded(SingularData data, EclipseNode builderType) {
FieldReference thisDotField = new FieldReference(data.getPluralName(), 0L);
thisDotField.receiver = new ThisReference(0, 0);
FieldReference thisDotField2 = new FieldReference(data.getPluralName(), 0L);
thisDotField2.receiver = new ThisReference(0, 0);
Expression cond = new EqualExpression(thisDotField, new NullLiteral(0, 0), OperatorIds.EQUAL_EQUAL);
-
+
MessageSend createBuilderInvoke = new MessageSend();
char[][] tokenizedName = makeGuavaTypeName(getSimpleTargetTypeName(data), false);
createBuilderInvoke.receiver = new QualifiedNameReference(tokenizedName, NULL_POSS, 0, 0);
createBuilderInvoke.selector = getBuilderMethodName(data);
return new IfStatement(cond, new Assignment(thisDotField2, createBuilderInvoke, 0), 0, 0);
}
-
- private int getTypeArgumentsCount(boolean isMap, String simpleTypeName) {
- return isMap ? 2 : getListSetTypeArgumentsCount(simpleTypeName);
- }
-
- private int getListSetTypeArgumentsCount(String simpleTypeName) {
- return "ImmutableTable".equals(simpleTypeName) ? 3 : 1;
- }
-
- private boolean shouldUsePut(SingularData data, boolean mapMode) {
- return mapMode || isSpecialTypeOfListSet(data);
- }
-
- private boolean isSpecialTypeOfListSet(SingularData data) {
- return "ImmutableTable".equals(getSimpleTargetTypeName(data));
+
+ protected abstract LombokImmutableList getArgumentSuffixes();
+ protected abstract String getAddMethodName();
+ protected abstract String getAddAllTypeName();
+
+ protected int getTypeArgumentsCount() {
+ return getArgumentSuffixes().size();
}
}
diff --git a/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaTableSingularizer.java b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaTableSingularizer.java
new file mode 100644
index 00000000..4d25811b
--- /dev/null
+++ b/src/core/lombok/eclipse/handlers/singulars/EclipseGuavaTableSingularizer.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2015 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
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package lombok.eclipse.handlers.singulars;
+
+import org.mangosdk.spi.ProviderFor;
+
+import lombok.core.LombokImmutableList;
+import lombok.eclipse.handlers.EclipseSingularsRecipes.EclipseSingularizer;
+
+@ProviderFor(EclipseSingularizer.class)
+public class EclipseGuavaTableSingularizer extends EclipseGuavaSingularizer {
+ private static final LombokImmutableList SUFFIXES =
+ LombokImmutableList.of("rowKey", "columnKey", "value");
+ private static final LombokImmutableList SUPPORTED_TYPES =
+ LombokImmutableList.of("com.google.common.collect.ImmutableTable");
+
+ @Override public LombokImmutableList getSupportedTypes() {
+ return SUPPORTED_TYPES;
+ }
+
+ @Override protected LombokImmutableList getArgumentSuffixes() {
+ return SUFFIXES;
+ }
+
+ @Override protected String getAddMethodName() {
+ return "put";
+ }
+
+ @Override protected String getAddAllTypeName() {
+ return "com.google.common.collect.Table";
+ }
+}
diff --git a/src/core/lombok/javac/handlers/singulars/JavacGuavaMapSingularizer.java b/src/core/lombok/javac/handlers/singulars/JavacGuavaMapSingularizer.java
index 0700e2e5..e0621cf7 100644
--- a/src/core/lombok/javac/handlers/singulars/JavacGuavaMapSingularizer.java
+++ b/src/core/lombok/javac/handlers/singulars/JavacGuavaMapSingularizer.java
@@ -32,14 +32,27 @@ public class JavacGuavaMapSingularizer extends JavacGuavaSingularizer {
// TODO cgcc.ImmutableClassToInstanceMap
// TODO cgcc.ImmutableRangeMap
+ private static final LombokImmutableList SUFFIXES =
+ LombokImmutableList.of("key", "value");
+ private static final LombokImmutableList SUPPORTED_TYPES = LombokImmutableList.of(
+ "com.google.common.collect.ImmutableMap",
+ "com.google.common.collect.ImmutableBiMap",
+ "com.google.common.collect.ImmutableSortedMap"
+ );
+
@Override public LombokImmutableList getSupportedTypes() {
- return LombokImmutableList.of(
- "com.google.common.collect.ImmutableMap",
- "com.google.common.collect.ImmutableBiMap",
- "com.google.common.collect.ImmutableSortedMap");
+ return SUPPORTED_TYPES;
+ }
+
+ @Override protected LombokImmutableList getArgumentSuffixes() {
+ return SUFFIXES;
+ }
+
+ @Override protected String getAddMethodName() {
+ return "put";
}
- @Override protected boolean isMap() {
- return true;
+ @Override protected String getAddAllTypeName() {
+ return "java.util.Map";
}
}
diff --git a/src/core/lombok/javac/handlers/singulars/JavacGuavaSetListSingularizer.java b/src/core/lombok/javac/handlers/singulars/JavacGuavaSetListSingularizer.java
index fe8e8dc0..5c7fcab5 100644
--- a/src/core/lombok/javac/handlers/singulars/JavacGuavaSetListSingularizer.java
+++ b/src/core/lombok/javac/handlers/singulars/JavacGuavaSetListSingularizer.java
@@ -30,16 +30,27 @@ import lombok.javac.handlers.JavacSingularsRecipes.JavacSingularizer;
public class JavacGuavaSetListSingularizer extends JavacGuavaSingularizer {
// TODO com.google.common.collect.ImmutableRangeSet
// TODO com.google.common.collect.ImmutableMultiset and com.google.common.collect.ImmutableSortedMultiset
+ private static final LombokImmutableList SUFFIXES = LombokImmutableList.of("");
+ private static final LombokImmutableList SUPPORTED_TYPES = LombokImmutableList.of(
+ "com.google.common.collect.ImmutableCollection",
+ "com.google.common.collect.ImmutableList",
+ "com.google.common.collect.ImmutableSet",
+ "com.google.common.collect.ImmutableSortedSet"
+ );
+
@Override public LombokImmutableList getSupportedTypes() {
- return LombokImmutableList.of(
- "com.google.common.collect.ImmutableCollection",
- "com.google.common.collect.ImmutableList",
- "com.google.common.collect.ImmutableSet",
- "com.google.common.collect.ImmutableSortedSet",
- "com.google.common.collect.ImmutableTable");
+ return SUPPORTED_TYPES;
}
-
- @Override protected boolean isMap() {
- return false;
+
+ @Override protected LombokImmutableList getArgumentSuffixes() {
+ return SUFFIXES;
+ }
+
+ @Override protected String getAddMethodName() {
+ return "add";
+ }
+
+ @Override protected String getAddAllTypeName() {
+ return "java.lang.Iterable";
}
}
diff --git a/src/core/lombok/javac/handlers/singulars/JavacGuavaSingularizer.java b/src/core/lombok/javac/handlers/singulars/JavacGuavaSingularizer.java
index ba661eff..4de39d98 100644
--- a/src/core/lombok/javac/handlers/singulars/JavacGuavaSingularizer.java
+++ b/src/core/lombok/javac/handlers/singulars/JavacGuavaSingularizer.java
@@ -27,6 +27,7 @@ import static lombok.javac.handlers.JavacHandlerUtil.*;
import java.util.Collections;
import lombok.core.GuavaTypeMap;
+import lombok.core.LombokImmutableList;
import lombok.core.handlers.HandlerUtil;
import lombok.javac.JavacNode;
import lombok.javac.JavacTreeMaker;
@@ -51,25 +52,23 @@ abstract class JavacGuavaSingularizer extends JavacSingularizer {
protected String getSimpleTargetTypeName(SingularData data) {
return GuavaTypeMap.getGuavaTypeName(data.getTargetFqn());
}
-
+
protected String getBuilderMethodName(SingularData data) {
String simpleTypeName = getSimpleTargetTypeName(data);
if ("ImmutableSortedSet".equals(simpleTypeName) || "ImmutableSortedMap".equals(simpleTypeName)) return "naturalOrder";
return "builder";
}
-
- protected abstract boolean isMap();
-
+
@Override public java.util.List generateFields(SingularData data, JavacNode builderType, JCTree source) {
JavacTreeMaker maker = builderType.getTreeMaker();
String simpleTypeName = getSimpleTargetTypeName(data);
JCExpression type = JavacHandlerUtil.chainDots(builderType, "com", "google", "common", "collect", simpleTypeName, "Builder");
- type = addTypeArgs(getTypeArgumentsCount(isMap(), simpleTypeName), false, builderType, type, data.getTypeArgs(), source);
-
+ type = addTypeArgs(getTypeArgumentsCount(), false, builderType, type, data.getTypeArgs(), source);
+
JCVariableDecl buildField = maker.VarDef(maker.Modifiers(Flags.PRIVATE), data.getPluralName(), type, null);
return Collections.singletonList(injectFieldAndMarkGenerated(builderType, buildField));
}
-
+
@Override public void generateMethods(SingularData data, JavacNode builderType, JCTree source, boolean fluent, boolean chain) {
JavacTreeMaker maker = builderType.getTreeMaker();
JCExpression returnType = chain ? cloneSelfType(builderType) : maker.Type(createVoidType(maker, CTC_VOID));
@@ -100,146 +99,123 @@ abstract class JavacGuavaSingularizer extends JavacSingularizer {
JCMethodDecl method = maker.MethodDef(mods, methodName, returnType, typeParams, params, thrown, body, null);
injectMethod(builderType, method);
}
-
+
void generateSingularMethod(JavacTreeMaker maker, JCExpression returnType, JCStatement returnStatement, SingularData data, JavacNode builderType, JCTree source, boolean fluent) {
List typeParams = List.nil();
List thrown = List.nil();
- boolean mapMode = isMap();
-
- Name keyName = !mapMode ? data.getSingularName() : builderType.toName(data.getSingularName() + "$key");
- Name valueName = !mapMode ? null : builderType.toName(data.getSingularName() + "$value");
-
+
+ LombokImmutableList suffixes = getArgumentSuffixes();
+ Name[] names = new Name[suffixes.size()];
+ for (int i = 0; i < suffixes.size(); i++) {
+ String s = suffixes.get(i);
+ Name n = data.getSingularName();
+ names[i] = s.isEmpty() ? n : builderType.toName(s);
+ }
+
JCModifiers mods = maker.Modifiers(Flags.PUBLIC);
ListBuffer statements = new ListBuffer();
- statements.append(createConstructBuilderVarIfNeeded(maker, data, builderType, mapMode, source));
- JCExpression thisDotFieldDotAdd = chainDots(builderType, "this", data.getPluralName().toString(), shouldUsePut(data, mapMode) ? "put" : "add");
- List invokeAddExpr;
- if (mapMode) {
- invokeAddExpr = List.of(maker.Ident(keyName), maker.Ident(valueName));
- } else {
- invokeAddExpr = List.of(maker.Ident(keyName));
+ statements.append(createConstructBuilderVarIfNeeded(maker, data, builderType, source));
+ JCExpression thisDotFieldDotAdd = chainDots(builderType, "this", data.getPluralName().toString(), getAddMethodName());
+ ListBuffer invokeAddExprBuilder = new ListBuffer();
+ for (int i = 0; i < suffixes.size(); i++) {
+ invokeAddExprBuilder.append(maker.Ident(names[i]));
}
+ List invokeAddExpr = invokeAddExprBuilder.toList();
JCExpression invokeAdd = maker.Apply(List.nil(), thisDotFieldDotAdd, invokeAddExpr);
statements.append(maker.Exec(invokeAdd));
if (returnStatement != null) statements.append(returnStatement);
JCBlock body = maker.Block(0, statements.toList());
Name methodName = data.getSingularName();
long paramFlags = JavacHandlerUtil.addFinalIfNeeded(Flags.PARAMETER, builderType.getContext());
- if (!fluent) methodName = builderType.toName(HandlerUtil.buildAccessorName(shouldUsePut(data, mapMode) ? "put" : "add", methodName.toString()));
- List params;
- if (mapMode) {
- JCExpression keyType = cloneParamType(0, maker, data.getTypeArgs(), builderType, source);
- JCExpression valueType = cloneParamType(1, maker, data.getTypeArgs(), builderType, source);
- JCVariableDecl paramKey = maker.VarDef(maker.Modifiers(paramFlags), keyName, keyType, null);
- JCVariableDecl paramValue = maker.VarDef(maker.Modifiers(paramFlags), valueName, valueType, null);
- params = List.of(paramKey, paramValue);
- } else {
- final JCExpression paramType;
-
- if (isSpecialTypeOfListSet(data)) {
- JCExpression cellType = JavacHandlerUtil.chainDots(builderType, "com", "google", "common", "collect", "Table", "Cell");
- paramType = addTypeArgs(3, false, builderType, cellType, data.getTypeArgs(), source);
- } else {
- paramType = cloneParamType(0, maker, data.getTypeArgs(), builderType, source);
- }
- params = List.of(maker.VarDef(maker.Modifiers(paramFlags), data.getSingularName(), paramType, null));
+ if (!fluent) methodName = builderType.toName(HandlerUtil.buildAccessorName(getAddMethodName(), methodName.toString()));
+ ListBuffer params = new ListBuffer();
+ for (int i = 0; i < suffixes.size(); i++) {
+ JCExpression pt = cloneParamType(i, maker, data.getTypeArgs(), builderType, source);
+ JCVariableDecl p = maker.VarDef(maker.Modifiers(paramFlags), names[i], pt, null);
+ params.append(p);
}
- JCMethodDecl method = maker.MethodDef(mods, methodName, returnType, typeParams, params, thrown, body, null);
+
+ JCMethodDecl method = maker.MethodDef(mods, methodName, returnType, typeParams, params.toList(), thrown, body, null);
injectMethod(builderType, method);
}
-
+
protected void generatePluralMethod(JavacTreeMaker maker, JCExpression returnType, JCStatement returnStatement, SingularData data, JavacNode builderType, JCTree source, boolean fluent) {
List typeParams = List.nil();
List thrown = List.nil();
- boolean mapMode = isMap();
-
+
JCModifiers mods = maker.Modifiers(Flags.PUBLIC);
ListBuffer statements = new ListBuffer();
- statements.append(createConstructBuilderVarIfNeeded(maker, data, builderType, mapMode, source));
- JCExpression thisDotFieldDotAddAll = chainDots(builderType, "this", data.getPluralName().toString(), shouldUsePut(data, mapMode) ? "putAll" : "addAll");
+ statements.append(createConstructBuilderVarIfNeeded(maker, data, builderType, source));
+ JCExpression thisDotFieldDotAddAll = chainDots(builderType, "this", data.getPluralName().toString(), getAddMethodName() + "All");
JCExpression invokeAddAll = maker.Apply(List.nil(), thisDotFieldDotAddAll, List.of(maker.Ident(data.getPluralName())));
statements.append(maker.Exec(invokeAddAll));
if (returnStatement != null) statements.append(returnStatement);
JCBlock body = maker.Block(0, statements.toList());
Name methodName = data.getPluralName();
long paramFlags = JavacHandlerUtil.addFinalIfNeeded(Flags.PARAMETER, builderType.getContext());
- if (!fluent) methodName = builderType.toName(HandlerUtil.buildAccessorName(shouldUsePut(data, mapMode) ? "putAll" : "addAll", methodName.toString()));
+ if (!fluent) methodName = builderType.toName(HandlerUtil.buildAccessorName(getAddMethodName() + "All", methodName.toString()));
JCExpression paramType;
- if (mapMode) {
- paramType = chainDots(builderType, "java", "util", "Map");
+ String aaTypeName = getAddAllTypeName();
+ if (aaTypeName.startsWith("java.lang.") && aaTypeName.indexOf('.', 11) == -1) {
+ paramType = genJavaLangTypeRef(builderType, aaTypeName.substring(10));
} else {
- if (isSpecialTypeOfListSet(data)) {
- paramType = chainDots(builderType, "com", "google", "common", "collect", "Table");
- } else {
- paramType = genJavaLangTypeRef(builderType, "Iterable");
- }
+ paramType = chainDotsString(builderType, aaTypeName);
}
- String simpleTypeName = getSimpleTargetTypeName(data);
- paramType = addTypeArgs(getTypeArgumentsCount(mapMode, simpleTypeName), true, builderType, paramType, data.getTypeArgs(), source);
+ paramType = addTypeArgs(getTypeArgumentsCount(), true, builderType, paramType, data.getTypeArgs(), source);
JCVariableDecl param = maker.VarDef(maker.Modifiers(paramFlags), data.getPluralName(), paramType, null);
JCMethodDecl method = maker.MethodDef(mods, methodName, returnType, typeParams, List.of(param), thrown, body, null);
injectMethod(builderType, method);
}
-
+
@Override public void appendBuildCode(SingularData data, JavacNode builderType, JCTree source, ListBuffer statements, Name targetVariableName) {
JavacTreeMaker maker = builderType.getTreeMaker();
List jceBlank = List.nil();
- boolean mapMode = isMap();
-
- String simpleTypeName = getSimpleTargetTypeName(data);
+
JCExpression varType = chainDotsString(builderType, data.getTargetFqn());
- int agrumentsCount = getTypeArgumentsCount(mapMode, simpleTypeName);
+ int agrumentsCount = getTypeArgumentsCount();
varType = addTypeArgs(agrumentsCount, false, builderType, varType, data.getTypeArgs(), source);
-
+
JCExpression empty; {
//ImmutableX.of()
JCExpression emptyMethod = chainDots(builderType, "com", "google", "common", "collect", getSimpleTargetTypeName(data), "of");
List invokeTypeArgs = createTypeArgs(agrumentsCount, false, builderType, data.getTypeArgs(), source);
empty = maker.Apply(invokeTypeArgs, emptyMethod, jceBlank);
}
-
+
JCExpression invokeBuild; {
//this.pluralName.build();
invokeBuild = maker.Apply(jceBlank, chainDots(builderType, "this", data.getPluralName().toString(), "build"), jceBlank);
}
-
+
JCExpression isNull; {
//this.pluralName == null
isNull = maker.Binary(CTC_EQUAL, maker.Select(maker.Ident(builderType.toName("this")), data.getPluralName()), maker.Literal(CTC_BOT, null));
}
-
+
JCExpression init = maker.Conditional(isNull, empty, invokeBuild); // this.pluralName == null ? ImmutableX.of() : this.pluralName.build()
-
+
JCStatement jcs = maker.VarDef(maker.Modifiers(0), data.getPluralName(), varType, init);
statements.append(jcs);
}
-
- protected JCStatement createConstructBuilderVarIfNeeded(JavacTreeMaker maker, SingularData data, JavacNode builderType, boolean mapMode, JCTree source) {
+
+ protected JCStatement createConstructBuilderVarIfNeeded(JavacTreeMaker maker, SingularData data, JavacNode builderType, JCTree source) {
List jceBlank = List.nil();
-
+
JCExpression thisDotField = maker.Select(maker.Ident(builderType.toName("this")), data.getPluralName());
JCExpression thisDotField2 = maker.Select(maker.Ident(builderType.toName("this")), data.getPluralName());
JCExpression cond = maker.Binary(CTC_EQUAL, thisDotField, maker.Literal(CTC_BOT, null));
-
+
JCExpression create = maker.Apply(jceBlank, chainDots(builderType, "com", "google", "common", "collect", getSimpleTargetTypeName(data), getBuilderMethodName(data)), jceBlank);
JCStatement thenPart = maker.Exec(maker.Assign(thisDotField2, create));
-
+
return maker.If(cond, thenPart, null);
}
-
- private int getTypeArgumentsCount(boolean isMap, String simpleTypeName) {
- return isMap ? 2 : getListSetTypeArgumentsCount(simpleTypeName);
- }
-
- private int getListSetTypeArgumentsCount(String simpleTypeName) {
- return "ImmutableTable".equals(simpleTypeName) ? 3 : 1;
- }
-
- private boolean shouldUsePut(SingularData data, boolean mapMode) {
- return mapMode || isSpecialTypeOfListSet(data);
- }
-
- private boolean isSpecialTypeOfListSet(SingularData data) {
- return "ImmutableTable".equals(getSimpleTargetTypeName(data));
+
+ protected abstract LombokImmutableList getArgumentSuffixes();
+ protected abstract String getAddMethodName();
+ protected abstract String getAddAllTypeName();
+
+ protected int getTypeArgumentsCount() {
+ return getArgumentSuffixes().size();
}
}
diff --git a/src/core/lombok/javac/handlers/singulars/JavacGuavaTableSingularizer.java b/src/core/lombok/javac/handlers/singulars/JavacGuavaTableSingularizer.java
new file mode 100644
index 00000000..080266b8
--- /dev/null
+++ b/src/core/lombok/javac/handlers/singulars/JavacGuavaTableSingularizer.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2015 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
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package lombok.javac.handlers.singulars;
+
+import org.mangosdk.spi.ProviderFor;
+
+import lombok.core.LombokImmutableList;
+import lombok.javac.handlers.JavacSingularsRecipes.JavacSingularizer;
+
+@ProviderFor(JavacSingularizer.class)
+public class JavacGuavaTableSingularizer extends JavacGuavaSingularizer {
+ private static final LombokImmutableList SUFFIXES =
+ LombokImmutableList.of("rowKey", "columnKey", "value");
+ private static final LombokImmutableList SUPPORTED_TYPES =
+ LombokImmutableList.of("com.google.common.collect.ImmutableTable");
+
+ @Override public LombokImmutableList getSupportedTypes() {
+ return SUPPORTED_TYPES;
+ }
+
+ @Override protected LombokImmutableList getArgumentSuffixes() {
+ return SUFFIXES;
+ }
+
+ @Override protected String getAddMethodName() {
+ return "put";
+ }
+
+ @Override protected String getAddAllTypeName() {
+ return "com.google.common.collect.Table";
+ }
+}
diff --git a/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java b/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java
index 7f1e7149..79ffbc8b 100644
--- a/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java
+++ b/test/transform/resource/after-delombok/BuilderSingularGuavaListsSets.java
@@ -119,10 +119,13 @@ class BuilderSingularGuavaListsSets {
@javax.annotation.Generated("lombok")
public BuilderSingularGuavaListsSetsBuilder clearPasses() {
this.passes = null;
+ return this;
}
- public BuilderSingularGuavaListsSetsBuilder user(final com.google.common.collect.Table.Cell user) {
+ @java.lang.SuppressWarnings("all")
+ @javax.annotation.Generated("lombok")
+ public BuilderSingularGuavaListsSetsBuilder user(final Number rowKey, final Number columnKey, final String value) {
if (this.users == null) this.users = com.google.common.collect.ImmutableTable.builder();
- this.users.put(user);
+ this.users.put(rowKey, columnKey, value);
return this;
}
@java.lang.SuppressWarnings("all")
@@ -134,6 +137,12 @@ class BuilderSingularGuavaListsSets {
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
+ public BuilderSingularGuavaListsSetsBuilder clearUsers() {
+ this.users = null;
+ return this;
+ }
+ @java.lang.SuppressWarnings("all")
+ @javax.annotation.Generated("lombok")
public BuilderSingularGuavaListsSets build() {
com.google.common.collect.ImmutableList cards = this.cards == null ? com.google.common.collect.ImmutableList.of() : this.cards.build();
com.google.common.collect.ImmutableCollection frogs = this.frogs == null ? com.google.common.collect.ImmutableList.of() : this.frogs.build();
diff --git a/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java b/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java
index 10545a8f..1ad8fa83 100644
--- a/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java
+++ b/test/transform/resource/after-delombok/BuilderSingularGuavaMaps.java
@@ -31,9 +31,9 @@ class BuilderSingularGuavaMaps {
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
- public BuilderSingularGuavaMapsBuilder battleaxe(final K battleaxe$key, final V battleaxe$value) {
+ public BuilderSingularGuavaMapsBuilder battleaxe(final K key, final V value) {
if (this.battleaxes == null) this.battleaxes = com.google.common.collect.ImmutableMap.builder();
- this.battleaxes.put(battleaxe$key, battleaxe$value);
+ this.battleaxes.put(key, value);
return this;
}
@java.lang.SuppressWarnings("all")
@@ -51,9 +51,9 @@ class BuilderSingularGuavaMaps {
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
- public BuilderSingularGuavaMapsBuilder vertex(final Integer vertex$key, final V vertex$value) {
+ public BuilderSingularGuavaMapsBuilder vertex(final Integer key, final V value) {
if (this.vertices == null) this.vertices = com.google.common.collect.ImmutableSortedMap.naturalOrder();
- this.vertices.put(vertex$key, vertex$value);
+ this.vertices.put(key, value);
return this;
}
@java.lang.SuppressWarnings("all")
@@ -71,9 +71,9 @@ class BuilderSingularGuavaMaps {
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
- public BuilderSingularGuavaMapsBuilder rawMap(final java.lang.Object rawMap$key, final java.lang.Object rawMap$value) {
+ public BuilderSingularGuavaMapsBuilder rawMap(final java.lang.Object key, final java.lang.Object value) {
if (this.rawMap == null) this.rawMap = com.google.common.collect.ImmutableBiMap.builder();
- this.rawMap.put(rawMap$key, rawMap$value);
+ this.rawMap.put(key, value);
return this;
}
@java.lang.SuppressWarnings("all")
diff --git a/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java b/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java
index 506a8b4c..7ffa647b 100644
--- a/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java
+++ b/test/transform/resource/after-delombok/BuilderSingularRedirectToGuava.java
@@ -50,9 +50,9 @@ class BuilderSingularRedirectToGuava {
}
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
- public BuilderSingularRedirectToGuavaBuilder thing(final Integer thing$key, final Number thing$value) {
+ public BuilderSingularRedirectToGuavaBuilder thing(final Integer key, final Number value) {
if (this.things == null) this.things = com.google.common.collect.ImmutableSortedMap.naturalOrder();
- this.things.put(thing$key, thing$value);
+ this.things.put(key, value);
return this;
}
@java.lang.SuppressWarnings("all")
diff --git a/test/transform/resource/after-ecj/BuilderSingularGuavaListsSets.java b/test/transform/resource/after-ecj/BuilderSingularGuavaListsSets.java
index 28dc2fac..5cf9f4ac 100644
--- a/test/transform/resource/after-ecj/BuilderSingularGuavaListsSets.java
+++ b/test/transform/resource/after-ecj/BuilderSingularGuavaListsSets.java
@@ -76,11 +76,12 @@ import lombok.Singular;
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSetsBuilder clearPasses() {
this.passes = null;
+ return this;
}
- public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSetsBuilder user(com.google.common.collect.Table.Cell user) {
+ public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSetsBuilder user(Number rowKey, Number columnKey, String value) {
if ((this.users == null))
this.users = com.google.common.collect.ImmutableTable.builder();
- this.users.put(user);
+ this.users.put(rowKey, columnKey, value);
return this;
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSetsBuilder users(com.google.common.collect.Table extends Number, ? extends Number, ? extends String> users) {
@@ -89,6 +90,10 @@ import lombok.Singular;
this.users.putAll(users);
return this;
}
+ public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSetsBuilder clearUsers() {
+ this.users = null;
+ return this;
+ }
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaListsSets build() {
com.google.common.collect.ImmutableList cards = ((this.cards == null) ? com.google.common.collect.ImmutableList.of() : this.cards.build());
com.google.common.collect.ImmutableCollection frogs = ((this.frogs == null) ? com.google.common.collect.ImmutableList.of() : this.frogs.build());
diff --git a/test/transform/resource/after-ecj/BuilderSingularGuavaMaps.java b/test/transform/resource/after-ecj/BuilderSingularGuavaMaps.java
index 0a031f2a..378ec309 100644
--- a/test/transform/resource/after-ecj/BuilderSingularGuavaMaps.java
+++ b/test/transform/resource/after-ecj/BuilderSingularGuavaMaps.java
@@ -10,10 +10,10 @@ import lombok.Singular;
@java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder() {
super();
}
- public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder battleaxe(K battleaxe$key, V battleaxe$value) {
+ public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder battleaxe(K key, V value) {
if ((this.battleaxes == null))
this.battleaxes = com.google.common.collect.ImmutableMap.builder();
- this.battleaxes.put(battleaxe$key, battleaxe$value);
+ this.battleaxes.put(key, value);
return this;
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder battleaxes(java.util.Map extends K, ? extends V> battleaxes) {
@@ -26,10 +26,10 @@ import lombok.Singular;
this.battleaxes = null;
return this;
}
- public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder vertex(Integer vertex$key, V vertex$value) {
+ public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder vertex(Integer key, V value) {
if ((this.vertices == null))
this.vertices = com.google.common.collect.ImmutableSortedMap.naturalOrder();
- this.vertices.put(vertex$key, vertex$value);
+ this.vertices.put(key, value);
return this;
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder vertices(java.util.Map extends Integer, ? extends V> vertices) {
@@ -42,10 +42,10 @@ import lombok.Singular;
this.vertices = null;
return this;
}
- public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder rawMap(java.lang.Object rawMap$key, java.lang.Object rawMap$value) {
+ public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder rawMap(java.lang.Object key, java.lang.Object value) {
if ((this.rawMap == null))
this.rawMap = com.google.common.collect.ImmutableBiMap.builder();
- this.rawMap.put(rawMap$key, rawMap$value);
+ this.rawMap.put(key, value);
return this;
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularGuavaMapsBuilder rawMap(java.util.Map, ?> rawMap) {
diff --git a/test/transform/resource/after-ecj/BuilderSingularRedirectToGuava.java b/test/transform/resource/after-ecj/BuilderSingularRedirectToGuava.java
index 02a915d2..84335f46 100644
--- a/test/transform/resource/after-ecj/BuilderSingularRedirectToGuava.java
+++ b/test/transform/resource/after-ecj/BuilderSingularRedirectToGuava.java
@@ -26,10 +26,10 @@ import lombok.Singular;
this.dangerMice = null;
return this;
}
- public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularRedirectToGuavaBuilder thing(Integer thing$key, Number thing$value) {
+ public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularRedirectToGuavaBuilder thing(Integer key, Number value) {
if ((this.things == null))
this.things = com.google.common.collect.ImmutableSortedMap.naturalOrder();
- this.things.put(thing$key, thing$value);
+ this.things.put(key, value);
return this;
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") BuilderSingularRedirectToGuavaBuilder things(java.util.Map extends Integer, ? extends Number> things) {
--
cgit