aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/squareup/javapoet/ParameterSpec.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/squareup/javapoet/ParameterSpec.java')
-rw-r--r--src/main/java/com/squareup/javapoet/ParameterSpec.java21
1 files changed, 12 insertions, 9 deletions
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);
}