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;
}