code: @Override
      public R visitPrimitive(PrimitiveType t, P p) {
          TypeKind k = t.getKind();
          switch (k) {
          case BOOLEAN:
              return visitPrimitiveAsBoolean(t, p);
  
          case BYTE:
              return visitPrimitiveAsByte(t, p);
  
          case SHORT:
              return visitPrimitiveAsShort(t, p);
  
          case INT:
              return visitPrimitiveAsInt(t, p);
  
          case LONG:
              return visitPrimitiveAsLong(t, p);
  
          case CHAR:
              return visitPrimitiveAsChar(t, p);
  
          case FLOAT:
              return visitPrimitiveAsFloat(t, p);
  
          case DOUBLE:
              return visitPrimitiveAsDouble(t, p);
  
          default:
              throw new AssertionError("Bad kind " + k + " for PrimitiveType" + t);
          }
      }
docs: Visits a primitive type, dispatching to the visit method for
  the specific {@linkplain TypeKind kind} of primitive type:
  {@code BOOLEAN}, {@code BYTE}, etc.
  
  @param t {@inheritDoc}
  @param p {@inheritDoc}
  @return  the result of the kind-specific visit method