@Override
        public Boolean visitType(TypeMirror type, TypeMirror ignored) {
          // We could check assignability here, but would require a Types instance. Since this
          // isn't really the sort of thing that shows up in a bad AST from upstream compilation
          // we ignore the expected type and just validate the type.  It might be wrong, but
          // it's valid.
          return validateType(type);
        }
Returns true if the given type is fully defined. This means that the type itself is defined, as
are any types it references, such as any type arguments or type bounds. For an {@link
ExecutableType}, the parameter and return types must be fully defined, as must types declared
in a {@code throws} clause or in the bounds of any type parameters.
common/src/main/java/com/google/auto/common/SuperficialValidation.java