aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-23 16:17:29 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-23 16:18:39 -0700
commit4826d379f905839ece35f689b5ec9035cbda3eb6 (patch)
tree9e3dd6f579ebbb2d8c2b031b9738cf992c61bf1d /src/main/java/com/google
parent7383976083bfd66f6bb5c4d4a288111b81731c70 (diff)
Allow AutoValue builder method to have the same name as getter method when using Strategy.AUTO_VALUE_BUILDER, and filter out #toBuilder()-type methods when collecting getters of class.
PiperOrigin-RevId: 190292033
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
index eb8e6c268c..fb945a93b7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
@@ -202,7 +202,7 @@ public class AutoCodecProcessor extends AbstractProcessor {
private TypeSpec.Builder buildClassWithAutoValueBuilderStrategy(
TypeElement encodedType, boolean startMemoizing) {
TypeElement builderType = findBuilderType(encodedType);
- List<ExecutableElement> getters = findGettersFromType(encodedType);
+ List<ExecutableElement> getters = findGettersFromType(encodedType, builderType);
ExecutableElement builderCreationMethod = findBuilderCreationMethod(encodedType, builderType);
ExecutableElement buildMethod = findBuildMethod(encodedType, builderType);
TypeSpec.Builder codecClassBuilder =
@@ -287,14 +287,18 @@ public class AutoCodecProcessor extends AbstractProcessor {
return builderType;
}
- private List<ExecutableElement> findGettersFromType(TypeElement encodedType) {
+ private List<ExecutableElement> findGettersFromType(
+ TypeElement encodedType, TypeElement builderTypeForFiltering) {
List<ExecutableElement> result = new ArrayList<>();
for (ExecutableElement method :
ElementFilter.methodsIn(env.getElementUtils().getAllMembers(encodedType))) {
if (!method.getModifiers().contains(Modifier.STATIC)
&& method.getModifiers().contains(Modifier.ABSTRACT)
&& method.getParameters().isEmpty()
- && method.getReturnType().getKind() != TypeKind.VOID) {
+ && method.getReturnType().getKind() != TypeKind.VOID
+ && (!method.getReturnType().getKind().equals(TypeKind.DECLARED)
+ || !builderTypeForFiltering.equals(
+ env.getTypeUtils().asElement(method.getReturnType())))) {
result.add(method);
}
}
@@ -415,13 +419,13 @@ public class AutoCodecProcessor extends AbstractProcessor {
ElementFilter.methodsIn(env.getElementUtils().getAllMembers(builderType));
String varName = getNameFromGetter(getter);
TypeMirror type = getter.getReturnType();
- String setterName = addCamelCasePrefix(varName, "set");
+ ImmutableSet<String> setterNames = ImmutableSet.of(varName, addCamelCasePrefix(varName, "set"));
ExecutableElement setterMethod = null;
for (ExecutableElement method : methods) {
if (!method.getModifiers().contains(Modifier.STATIC)
&& !method.getModifiers().contains(Modifier.PRIVATE)
- && method.getSimpleName().toString().equals(setterName)
+ && setterNames.contains(method.getSimpleName().toString())
&& method.getReturnType().equals(builderType.asType())
&& method.getParameters().size() == 1
&& env.getTypeUtils()