private void buildOptionsClass()

in tensorflow-core/tensorflow-core-generator/src/main/java/org/tensorflow/op/generator/ClassGenerator.java [368:447]


  private void buildOptionsClass() {

    if (optionalAttributes.isEmpty()) {
      return;
    }

    TypeSpec.Builder optionsBuilder =
        TypeSpec.classBuilder("Options").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
    optionsBuilder.addJavadoc("$L", "Optional attributes for {@link " + fullClassName() + "}");

    ClassName optionsClassName = ClassName.get(fullPackage, className, "Options");

    for (AttrDef attr : optionalAttributes) {
      ResolvedType type = resolver.typeOf(attr);

      String name = getJavaName(attr);

      ApiDef.Attr apiAttr = attrApis.get(attr);

      String description =
          apiAttr.getDescription().isEmpty()
              ? String.format("the %s option", name)
              : apiAttr.getDescription();

      // add the setter method, adding one with varargs and one with List if the attribute is
      // iterable
      if (type.iterable) {
        optionsBuilder.addMethod(
            MethodSpec.methodBuilder(name)
                .returns(optionsClassName)
                .addModifiers(Modifier.PUBLIC)
                .addParameter(type.classIfGeneric().listIfIterable().javaType, name)
                .addJavadoc("Sets the $L option.\n", name)
                .addJavadoc("\n@param $L $L", name, parseDocumentation(description))
                .addJavadoc("\n@return this Options instance.")
                .addCode("this.$L = $L;\nreturn this;\n", name, name)
                .build());

        optionsBuilder.addMethod(
            MethodSpec.methodBuilder(name)
                .returns(optionsClassName)
                .addModifiers(Modifier.PUBLIC)
                .addParameter(type.classIfGeneric().arrayIfIterable().javaType, name)
                .addJavadoc("Sets the $L option.\n", name)
                .addJavadoc("\n@param $L $L", name, parseDocumentation(description))
                .addJavadoc("\n@return this Options instance.")
                .addCode("this.$L = $T.asList($L);\nreturn this;\n", name, Arrays.class, name)
                .varargs()
                .build());

      } else {
        optionsBuilder.addMethod(
            MethodSpec.methodBuilder(name)
                .returns(optionsClassName)
                .addModifiers(Modifier.PUBLIC)
                .addParameter(type.classIfGeneric().javaType, name)
                .addJavadoc("Sets the $L option.\n", name)
                .addJavadoc("\n@param $L $L", name, parseDocumentation(description))
                .addJavadoc("\n@return this Options instance.")
                .addCode("this.$L = $L;\nreturn this;\n", name, name)
                .build());
      }

      FieldSpec.Builder field =
          FieldSpec.builder(type.classIfGeneric().listIfIterable().javaType, name);
      if (!isStateSelector) {
        field.addModifiers(Modifier.PRIVATE);
      }

      // add the field
      optionsBuilder.addField(field.build());
    }

    // add a private constructor
    optionsBuilder.addMethod(
        MethodSpec.constructorBuilder().addModifiers(Modifier.PRIVATE).build());

    optionsClass = optionsBuilder.build();
    builder.addType(optionsClass);
  }