@Override public String visitDeclared(DeclaredType mirror, Void p) { Name name = mirror.asElement().getSimpleName(); final String prefix; Element enclosingElement = mirror.asElement().getEnclosingElement(); if (mirror.getEnclosingType().getKind() != TypeKind.NONE) { prefix = visit(mirror.getEnclosingType()) + "."; } else if (enclosingElement.getKind() == ElementKind.PACKAGE) { PackageElement pkg = (PackageElement) enclosingElement; prefix = getPrefixForTopLevelClass(pkg.getQualifiedName().toString(), name); } else if (enclosingElement.getKind().isClass() || enclosingElement.getKind().isInterface()) { prefix = shorten((TypeElement) enclosingElement) + "."; } else { prefix = enclosingElement.toString() + "."; } final String suffix; if (!mirror.getTypeArguments().isEmpty()) { List<String> shortTypeArguments = Lists.transform(mirror.getTypeArguments(), this); suffix = "<" + Joiner.on(", ").join(shortTypeArguments) + ">"; } else { suffix = ""; } return prefix + name + suffix; }
@Override public TypeMirror getEnclosingType() { return declaredType.getEnclosingType(); }