diff options
Diffstat (limited to 'src/main/java/com/squareup/javapoet/ParameterSpec.java')
-rw-r--r-- | src/main/java/com/squareup/javapoet/ParameterSpec.java | 21 |
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); } |