aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/squareup/javapoet/ClassName.java
diff options
context:
space:
mode:
authorJesse Wilson <jwilson@squareup.com>2018-04-28 20:18:33 -0400
committerJesse Wilson <jwilson@squareup.com>2018-04-28 20:18:33 -0400
commit1c897e44ddd6b50e22180b6d32e4a3c69223614a (patch)
treeb010db407a157c5f5a310fe2bfbc43915aa35ca9 /src/main/java/com/squareup/javapoet/ClassName.java
parent3f4d5c2c2eebc3915ab0f705f38d11a9f9b4237b (diff)
downloadjavapoet-1c897e44ddd6b50e22180b6d32e4a3c69223614a.tar.gz
Avoid TypeElement.getKind() in ClassName.get().
There's some bug that's triggered by Buck's ABI builds and avoiding this API avoids triggering that bug.
Diffstat (limited to 'src/main/java/com/squareup/javapoet/ClassName.java')
-rw-r--r--src/main/java/com/squareup/javapoet/ClassName.java30
1 files changed, 10 insertions, 20 deletions
diff --git a/src/main/java/com/squareup/javapoet/ClassName.java b/src/main/java/com/squareup/javapoet/ClassName.java
index e8af154..766d9e2 100644
--- a/src/main/java/com/squareup/javapoet/ClassName.java
+++ b/src/main/java/com/squareup/javapoet/ClassName.java
@@ -20,15 +20,12 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Name;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import static com.squareup.javapoet.Util.checkArgument;
import static com.squareup.javapoet.Util.checkNotNull;
-import static javax.lang.model.element.NestingKind.MEMBER;
-import static javax.lang.model.element.NestingKind.TOP_LEVEL;
/** A fully-qualified class name for top-level and member classes. */
public final class ClassName extends TypeName implements Comparable<ClassName> {
@@ -207,27 +204,20 @@ public final class ClassName extends TypeName implements Comparable<ClassName> {
/** Returns the class name for {@code element}. */
public static ClassName get(TypeElement element) {
checkNotNull(element, "element == null");
- checkArgument(element.getNestingKind() == TOP_LEVEL || element.getNestingKind() == MEMBER,
- "unexpected type nesting");
String simpleName = element.getSimpleName().toString();
- if (isClassOrInterface(element.getEnclosingElement())) {
- return ClassName.get((TypeElement) element.getEnclosingElement()).nestedClass(simpleName);
- }
-
- String packageName = getPackage(element.getEnclosingElement()).getQualifiedName().toString();
- return new ClassName(packageName, null, simpleName);
- }
+ switch (element.getNestingKind()) {
+ case TOP_LEVEL:
+ Name packageName = ((PackageElement) element.getEnclosingElement()).getQualifiedName();
+ return new ClassName(packageName.toString(), null, simpleName);
- private static boolean isClassOrInterface(Element e) {
- return e.getKind().isClass() || e.getKind().isInterface();
- }
+ case MEMBER:
+ ClassName enclosingClass = get((TypeElement) element.getEnclosingElement());
+ return enclosingClass.nestedClass(simpleName);
- private static PackageElement getPackage(Element type) {
- while (type.getKind() != ElementKind.PACKAGE) {
- type = type.getEnclosingElement();
+ default:
+ throw new IllegalArgumentException("unexpected type nesting");
}
- return (PackageElement) type;
}
@Override public int compareTo(ClassName o) {