aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaibo Huang <hhb@google.com>2020-07-15 19:24:11 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-07-15 19:24:11 +0000
commit5b07e66ebfcd5f6b5185f57b786dfb251340fa41 (patch)
treeba3af13de44a0ffce1c9cb045a5464cda8d1a99b
parentaf08e733b5a565848e101f117b908d0672e8b408 (diff)
parent4fbd72dc0e5cebccf953f2087ffdf25178ab3bb9 (diff)
downloadjavapoet-5b07e66ebfcd5f6b5185f57b786dfb251340fa41.tar.gz
Upgrade javapoet to javapoet-1.13.0 am: fc695240b7 am: 58d780c682 am: d20f30f913 am: 6e83df90ab am: 4fbd72dc0e
Original change: https://android-review.googlesource.com/c/platform/external/javapoet/+/1360668 Change-Id: I2009e4787a2f7d84b064738563d6f644535312aa
-rw-r--r--CHANGELOG.md13
-rw-r--r--METADATA6
-rw-r--r--README.md4
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/com/squareup/javapoet/MethodSpec.java12
-rw-r--r--src/main/java/com/squareup/javapoet/ParameterSpec.java21
-rw-r--r--src/test/java/com/squareup/javapoet/MethodSpecTest.java27
-rw-r--r--src/test/java/com/squareup/javapoet/ParameterSpecTest.java21
8 files changed, 78 insertions, 28 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e02a975..4b88c59 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,19 @@
Change Log
==========
+JavaPoet 1.13.0 *(2020-06-18)*
+-----------------------------
+
+ * New: Add support for explicit receiver parameters.
+ * Fix: Don't copy parameter annotations when creating a `ParameterSpec`.
+
+
+JavaPoet 1.12.1 *(2020-01-20)*
+-----------------------------
+
+ * Fix: Ignore parameter annotations in `MethodSpec.overriding()`.
+
+
JavaPoet 1.12.0 *(2020-01-09)*
-----------------------------
diff --git a/METADATA b/METADATA
index d633669..bee8549 100644
--- a/METADATA
+++ b/METADATA
@@ -9,11 +9,11 @@ third_party {
type: GIT
value: "https://github.com/square/javapoet.git"
}
- version: "javapoet-1.12.1"
+ version: "javapoet-1.13.0"
license_type: NOTICE
last_upgrade_date {
year: 2020
- month: 2
- day: 1
+ month: 7
+ day: 10
}
}
diff --git a/README.md b/README.md
index 0b627aa..b38a5d1 100644
--- a/README.md
+++ b/README.md
@@ -892,12 +892,12 @@ Download [the latest .jar][dl] or depend via Maven:
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
- <version>1.12.0</version>
+ <version>1.12.1</version>
</dependency>
```
or Gradle:
```groovy
-compile 'com.squareup:javapoet:1.12.0'
+compile 'com.squareup:javapoet:1.12.1'
```
Snapshots of the development version are available in [Sonatype's `snapshots` repository][snap].
diff --git a/pom.xml b/pom.xml
index 6011c8d..04ecc62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
- <version>1.12.1</version>
+ <version>1.13.0</version>
<name>JavaPoet</name>
<description>Use beautiful Java code to generate beautiful Java code.</description>
diff --git a/src/main/java/com/squareup/javapoet/MethodSpec.java b/src/main/java/com/squareup/javapoet/MethodSpec.java
index 2284ef5..67722c7 100644
--- a/src/main/java/com/squareup/javapoet/MethodSpec.java
+++ b/src/main/java/com/squareup/javapoet/MethodSpec.java
@@ -24,7 +24,6 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.stream.Collectors;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@@ -233,16 +232,7 @@ public final class MethodSpec {
}
methodBuilder.returns(TypeName.get(method.getReturnType()));
- // Copying parameter annotations from the overridden method can be incorrect so we're
- // deliberately dropping them. See https://github.com/square/javapoet/issues/482.
- methodBuilder.addParameters(ParameterSpec.parametersOf(method)
- .stream()
- .map(parameterSpec -> {
- ParameterSpec.Builder builder = parameterSpec.toBuilder();
- builder.annotations.clear();
- return builder.build();
- })
- .collect(Collectors.toList()));
+ methodBuilder.addParameters(ParameterSpec.parametersOf(method));
methodBuilder.varargs(method.isVarArgs());
for (TypeMirror thrownType : method.getThrownTypes()) {
diff --git a/src/main/java/com/squareup/javapoet/ParameterSpec.java b/src/main/java/com/squareup/javapoet/ParameterSpec.java
index b8f3129..8b2b6ed 100644
--- a/src/main/java/com/squareup/javapoet/ParameterSpec.java
+++ b/src/main/java/com/squareup/javapoet/ParameterSpec.java
@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
-import java.util.stream.Collectors;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
@@ -87,17 +86,12 @@ public final class ParameterSpec {
public static ParameterSpec get(VariableElement element) {
checkArgument(element.getKind().equals(ElementKind.PARAMETER), "element is not a parameter");
- // Copy over any annotations from element.
- List<AnnotationSpec> annotations = element.getAnnotationMirrors()
- .stream()
- .map((mirror) -> AnnotationSpec.get(mirror))
- .collect(Collectors.toList());
-
TypeName type = TypeName.get(element.asType());
String name = element.getSimpleName().toString();
+ // Copying parameter annotations can be incorrect so we're deliberately not including them.
+ // See https://github.com/square/javapoet/issues/482.
return ParameterSpec.builder(type, name)
.addModifiers(element.getModifiers())
- .addAnnotations(annotations)
.build();
}
@@ -109,9 +103,18 @@ public final class ParameterSpec {
return result;
}
+ private static boolean isValidParameterName(String name) {
+ // Allow "this" for explicit receiver parameters
+ // See https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1.
+ if (name.endsWith(".this")) {
+ return SourceVersion.isIdentifier(name.substring(0, name.length() - ".this".length()));
+ }
+ return name.equals("this") || SourceVersion.isName(name);
+ }
+
public static Builder builder(TypeName type, String name, Modifier... modifiers) {
checkNotNull(type, "type == null");
- checkArgument(SourceVersion.isName(name), "not a valid name: %s", name);
+ checkArgument(isValidParameterName(name), "not a valid name: %s", name);
return new Builder(type, name)
.addModifiers(modifiers);
}
diff --git a/src/test/java/com/squareup/javapoet/MethodSpecTest.java b/src/test/java/com/squareup/javapoet/MethodSpecTest.java
index b768351..e180f20 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,15 +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 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.squareup.javapoet.MethodSpec.CONSTRUCTOR;
+import static com.google.testing.compile.CompilationSubject.assertThat;
+import static com.google.testing.compile.Compiler.javac;
import static com.squareup.javapoet.TestUtil.findFirst;
import static javax.lang.model.util.ElementFilter.methodsIn;
import static org.junit.Assert.fail;
@@ -247,6 +252,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);
+ 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..561eebf 100644
--- a/src/test/java/com/squareup/javapoet/ParameterSpecTest.java
+++ b/src/test/java/com/squareup/javapoet/ParameterSpecTest.java
@@ -60,6 +60,25 @@ public class ParameterSpecTest {
assertThat(a.toString()).isEqualTo(b.toString());
}
+ @Test public void receiverParameterInstanceMethod() {
+ ParameterSpec.Builder builder = ParameterSpec.builder(int.class, "this");
+ assertThat(builder.build().name).isEqualTo("this");
+ }
+
+ @Test public void receiverParameterNestedClass() {
+ ParameterSpec.Builder builder = ParameterSpec.builder(int.class, "Foo.this");
+ assertThat(builder.build().name).isEqualTo("Foo.this");
+ }
+
+ @Test public void keywordName() {
+ try {
+ ParameterSpec.builder(int.class, "super");
+ fail();
+ } catch (Exception e) {
+ assertThat(e.getMessage()).isEqualTo("not a valid name: super");
+ }
+ }
+
@Test public void nullAnnotationsAddition() {
try {
ParameterSpec.builder(int.class, "foo").addAnnotations(null);
@@ -99,7 +118,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() {