From e478e72237da795931c3813034b824cac4abf184 Mon Sep 17 00:00:00 2001 From: emcmanus Date: Fri, 15 Sep 2017 13:28:51 -0700 Subject: [PATCH] Rewrite MemoizeExtension so that it functions even if javax.annotation.Generated is unavailable. Fixes https://github.com/google/auto/issues/503. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=168879489 --- .../extension/memoized/MemoizeExtension.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/value/src/main/java/com/google/auto/value/extension/memoized/MemoizeExtension.java b/value/src/main/java/com/google/auto/value/extension/memoized/MemoizeExtension.java index 2727eea9db..9dd94dba7a 100644 --- a/value/src/main/java/com/google/auto/value/extension/memoized/MemoizeExtension.java +++ b/value/src/main/java/com/google/auto/value/extension/memoized/MemoizeExtension.java @@ -36,7 +36,6 @@ import com.google.auto.service.AutoService; import com.google.auto.value.extension.AutoValueExtension; import com.google.common.base.Joiner; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.AnnotationSpec; @@ -52,7 +51,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import javax.annotation.Generated; +import java.util.Optional; import javax.annotation.processing.Messager; import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.ExecutableElement; @@ -68,11 +67,6 @@ public final class MemoizeExtension extends AutoValueExtension { private static final ImmutableSet DO_NOT_PULL_DOWN_ANNOTATIONS = ImmutableSet.of(Override.class.getCanonicalName(), Memoized.class.getCanonicalName()); - private static final AnnotationSpec GENERATED = - AnnotationSpec.builder(Generated.class) - .addMember("value", "$S", MemoizeExtension.class.getCanonicalName()) - .build(); - private static final ClassName LAZY_INIT = ClassName.get("com.google.errorprone.annotations.concurrent", "LazyInit"); @@ -123,9 +117,8 @@ String generate() { .superclass(superType()) .addTypeVariables(typeVariableNames()) .addModifiers(isFinal ? FINAL : ABSTRACT) - .addAnnotation(GENERATED) .addMethod(constructor()); - + generatedAnnotation().ifPresent(generated::addAnnotation); for (ExecutableElement method : memoizedMethods(context)) { MethodOverrider methodOverrider = new MethodOverrider(method); generated.addFields(methodOverrider.fields()); @@ -137,6 +130,19 @@ String generate() { return JavaFile.builder(context.packageName(), generated.build()).build().toString(); } + private Optional generatedAnnotation() { + TypeElement generatedAnnotationElement = + elements.getTypeElement("javax.annotation.Generated"); + if (generatedAnnotationElement == null) { + return Optional.empty(); + } + ClassName generatedName = ClassName.get(generatedAnnotationElement); + return Optional.of( + AnnotationSpec.builder(generatedName) + .addMember("value", "$S", MemoizeExtension.class.getCanonicalName()) + .build()); + } + private TypeName superType() { ClassName superType = ClassName.get(context.packageName(), classToExtend); ImmutableList typeVariableNames = typeVariableNames(); @@ -360,7 +366,7 @@ CodeBlock setMemoized() { /** Returns the errorprone {@code @LazyInit} annotation if it is found on the classpath. */ private static Optional getLazyInitAnnotation(Elements elements) { if (elements.getTypeElement(LAZY_INIT.toString()) == null) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(AnnotationSpec.builder(LAZY_INIT).build()); }