From 622e07eb0859fcf0eb9537ea5657277b7f3b18af Mon Sep 17 00:00:00 2001 From: Daniel Santiago Date: Mon, 20 Apr 2020 08:53:48 -0700 Subject: Don't copy parameter annotations when creating a ParameterSpec. (#770) * Don't copy parameter annotations when creating a ParameterSpec. This further preserves the behaviour discussed in https://github.com/square/javapoet/issues/482. Unifying it for both MethodSpec.overriding and ParameterSpec.get. * Add compilation test for when overriding a method with private annotations. * Address PR comments: * Remove unused import * Rename newly added test --- .../java/com/squareup/javapoet/MethodSpecTest.java | 26 ++++++++++++++++++++++ .../com/squareup/javapoet/ParameterSpecTest.java | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) (limited to 'src/test') diff --git a/src/test/java/com/squareup/javapoet/MethodSpecTest.java b/src/test/java/com/squareup/javapoet/MethodSpecTest.java index b768351..824f476 100644 --- a/src/test/java/com/squareup/javapoet/MethodSpecTest.java +++ b/src/test/java/com/squareup/javapoet/MethodSpecTest.java @@ -15,6 +15,7 @@ */ package com.squareup.javapoet; +import com.google.testing.compile.Compilation; import com.google.testing.compile.CompilationRule; import java.io.Closeable; import java.io.IOException; @@ -30,14 +31,19 @@ import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.type.DeclaredType; +import javax.lang.model.util.ElementFilter; import javax.lang.model.util.Elements; import javax.lang.model.util.Types; +import javax.tools.JavaFileObject; + +import com.google.testing.compile.CompilationSubject; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.truth.Truth.assertThat; +import static com.google.testing.compile.Compiler.javac; import static com.squareup.javapoet.MethodSpec.CONSTRUCTOR; import static com.squareup.javapoet.TestUtil.findFirst; import static javax.lang.model.util.ElementFilter.methodsIn; @@ -247,6 +253,26 @@ public final class MethodSpecTest { } } + abstract static class AbstractClassWithPrivateAnnotation { + + private @interface PrivateAnnotation{ } + + abstract void foo(@PrivateAnnotation final String bar); + } + + @Test public void overrideDoesNotCopyParameterAnnotations() { + TypeElement abstractTypeElement = getElement(AbstractClassWithPrivateAnnotation.class); + ExecutableElement fooElement = ElementFilter.methodsIn(abstractTypeElement.getEnclosedElements()).get(0); + ClassName implClassName = ClassName.get("com.squareup.javapoet", "Impl"); + TypeSpec type = TypeSpec.classBuilder(implClassName) + .superclass(abstractTypeElement.asType()) + .addMethod(MethodSpec.overriding(fooElement).build()) + .build(); + JavaFileObject jfo = JavaFile.builder(implClassName.packageName, type).build().toJavaFileObject(); + Compilation compilation = javac().compile(jfo); + CompilationSubject.assertThat(compilation).succeeded(); + } + @Test public void equalsAndHashCode() { MethodSpec a = MethodSpec.constructorBuilder().build(); MethodSpec b = MethodSpec.constructorBuilder().build(); diff --git a/src/test/java/com/squareup/javapoet/ParameterSpecTest.java b/src/test/java/com/squareup/javapoet/ParameterSpecTest.java index c3effca..8585986 100644 --- a/src/test/java/com/squareup/javapoet/ParameterSpecTest.java +++ b/src/test/java/com/squareup/javapoet/ParameterSpecTest.java @@ -99,7 +99,7 @@ public class ParameterSpecTest { VariableElement parameterElement = element.getParameters().get(0); assertThat(ParameterSpec.get(parameterElement).toString()) - .isEqualTo("@javax.annotation.Nullable java.lang.String arg0"); + .isEqualTo("java.lang.String arg0"); } @Test public void addNonFinalModifier() { -- cgit v1.2.3