private static TypeSpecDataHolder generatePropsBuilderMethods()

in litho-processor/src/main/java/com/facebook/litho/specmodels/generator/testing/MatcherGenerator.java [136:248]


  private static TypeSpecDataHolder generatePropsBuilderMethods(
      SpecModel specModel, final PropModel prop) {
    final TypeSpecDataHolder.Builder dataHolder = TypeSpecDataHolder.newBuilder();

    if (isComponentType(prop)) {
      dataHolder.addField(matcherComponentFieldBuilder(prop));
      dataHolder.addMethod(matcherComponentFieldSetterBuilder(specModel, prop));
    }

    dataHolder.addField(matcherFieldBuilder(prop));
    dataHolder.addMethod(matcherFieldSetterBuilder(specModel, prop));

    if (prop.hasVarArgs()) {
      dataHolder.addMethod(varArgBuilder(specModel, prop));
      if (isComponentType(prop)) {
        dataHolder.addMethod(varArgBuilderBuilder(specModel, prop));
      }
      // fall through to generate builder method for List<T>
    }

    switch (prop.getResType()) {
      case STRING:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.STRING_RES, "resolveString"));
        dataHolder.addMethod(
            resWithVarargsBuilder(
                specModel,
                prop,
                ClassNames.STRING_RES,
                "resolveString",
                TypeName.OBJECT,
                "formatArgs"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.STRING_RES, "resolveString"));
        break;
      case STRING_ARRAY:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(
            resBuilder(specModel, prop, ClassNames.ARRAY_RES, "resolveStringArray"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.ARRAY_RES, "resolveStringArray"));
        break;
      case INT:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.INT_RES, "resolveInt"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.INT_RES, "resolveInt"));
        break;
      case INT_ARRAY:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.ARRAY_RES, "resolveIntArray"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.ARRAY_RES, "resolveIntArray"));
        break;
      case BOOL:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.BOOL_RES, "resolveBool"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.BOOL_RES, "resolveBool"));
        break;
      case COLOR:
        dataHolder.addMethod(regularBuilder(specModel, prop, annotation(ClassNames.COLOR_INT)));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.COLOR_RES, "resolveColor"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.COLOR_RES, "resolveColor"));
        break;
      case DIMEN_SIZE:
        dataHolder.addMethod(pxBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.DIMEN_RES, "resolveDimenSize"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.DIMEN_RES, "resolveDimenSize"));
        dataHolder.addMethod(dipBuilder(specModel, prop));
        break;
      case DIMEN_TEXT:
        dataHolder.addMethod(pxBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.DIMEN_RES, "resolveDimenSize"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.DIMEN_RES, "resolveDimenSize"));
        dataHolder.addMethod(dipBuilder(specModel, prop));
        dataHolder.addMethod(sipBuilder(specModel, prop));
        break;
      case DIMEN_OFFSET:
        dataHolder.addMethod(pxBuilder(specModel, prop));
        dataHolder.addMethod(
            resBuilder(specModel, prop, ClassNames.DIMEN_RES, "resolveDimenOffset"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.DIMEN_RES, "resolveDimenOffset"));
        dataHolder.addMethod(dipBuilder(specModel, prop));
        break;
      case FLOAT:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(resBuilder(specModel, prop, ClassNames.DIMEN_RES, "resolveFloat"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.DIMEN_RES, "resolveFloat"));
        break;
      case DRAWABLE:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        dataHolder.addMethod(
            resBuilder(specModel, prop, ClassNames.DRAWABLE_RES, "resolveDrawable"));
        dataHolder.addTypeSpecDataHolder(
            attrBuilders(specModel, prop, ClassNames.DRAWABLE_RES, "resolveDrawable"));
        break;
      case NONE:
        dataHolder.addMethod(regularBuilder(specModel, prop));
        break;
    }

    if (isComponentType(prop)) {
      dataHolder.addMethod(builderBuilder(specModel, prop, ClassNames.COMPONENT_BUILDER));
    }

    return dataHolder.build();
  }