private static List validateResType()

in litho-processor/src/main/java/com/facebook/litho/specmodels/model/PropValidation.java [475:569]


  private static List<SpecModelValidationError> validateResType(PropModel prop) {
    List<SpecModelValidationError> validationErrors = new ArrayList<>();

    final ResType resType = prop.getResType();
    if (resType.equals(ResType.NONE)) {
      return validationErrors;
    }

    final boolean hasVarArgs = prop.hasVarArgs();
    final List<TypeName> validResTypes = new ArrayList<>();
    switch (resType) {
      case STRING:
        validResTypes.add(
            hasVarArgs
                ? ParameterizedTypeName.get(List.class, String.class)
                : TypeName.get(String.class));
        validResTypes.add(
            hasVarArgs
                ? ParameterizedTypeName.get(List.class, CharSequence.class)
                : TypeName.get(CharSequence.class));
        break;
      case STRING_ARRAY:
        validResTypes.add(
            hasVarArgs
                ? ParameterizedTypeName.get(List.class, String[].class)
                : TypeName.get(String[].class));
        break;
      case INT:
      case COLOR:
        if (hasVarArgs) {
          validResTypes.add(ParameterizedTypeName.get(List.class, Integer.class));
        } else {
          validResTypes.add(TypeName.get(int.class));
          validResTypes.add(TypeName.get(Integer.class));
        }
        break;
      case INT_ARRAY:
        validResTypes.add(
            hasVarArgs
                ? ParameterizedTypeName.get(List.class, Integer[].class)
                : TypeName.get(int[].class));
        break;
      case BOOL:
        if (hasVarArgs) {
          validResTypes.add(ParameterizedTypeName.get(List.class, Boolean.class));
        } else {
          validResTypes.add(TypeName.get(boolean.class));
          validResTypes.add(TypeName.get(Boolean.class));
        }
        break;
      case DIMEN_SIZE:
      case DIMEN_TEXT:
      case DIMEN_OFFSET:
        if (hasVarArgs) {
          validResTypes.add(ParameterizedTypeName.get(List.class, Integer.class));
          validResTypes.add(ParameterizedTypeName.get(List.class, Float.class));
        } else {
          validResTypes.add(TypeName.get(int.class));
          validResTypes.add(TypeName.get(Integer.class));
          validResTypes.add(TypeName.get(float.class));
          validResTypes.add(TypeName.get(Float.class));
        }
        break;
      case FLOAT:
        if (hasVarArgs) {
          validResTypes.add(ParameterizedTypeName.get(List.class, Float.class));
        } else {
          validResTypes.add(TypeName.get(float.class));
          validResTypes.add(TypeName.get(Float.class));
        }
        break;
      case DRAWABLE:
        validResTypes.add(
            hasVarArgs
                ? ParameterizedTypeName.get(ClassNames.LIST, ClassNames.DRAWABLE)
                : ClassNames.DRAWABLE);
        break;
      case NONE:
        break;
    }

    if (!validResTypes.contains(prop.getTypeName())) {
      validationErrors.add(
          new SpecModelValidationError(
              prop.getRepresentedObject(),
              (prop.hasVarArgs() ? "A variable argument" : "A prop")
                  + " declared with resType "
                  + prop.getResType()
                  + " must be one of the following types: "
                  + Arrays.toString(validResTypes.toArray())
                  + "."));
    }

    return validationErrors;
  }