onGenerate method

  1. @override
Future<$BuildOutput> onGenerate(
  1. ArtifactBuilder builder,
  2. ClassElement clazz,
  3. ConstructorElement ctor,
  4. List<FormalParameterElement> params,
  5. BuildStep step,
  6. List<String>? eFields,
)
override

Implementation

@override
Future<$BuildOutput> onGenerate(
  ArtifactBuilder builder,
  ClassElement clazz,
  ConstructorElement ctor,
  List<FormalParameterElement> params,
  BuildStep step,
  List<String>? eFields,
) async {
  if (params.isEmpty) return (<Uri>[], StringBuffer());
  StringBuffer buf = StringBuffer();
  buf.write("  static Map<String,dynamic> get schema=>{");
  buf.write("${builder.stringD("type")}:${builder.stringD("object")},");
  buf.write("${builder.stringD("properties")}:{");

  for (FormalParameterElement param in params) {
    String renamed = builder.guardGeneration(
      clazz: clazz,
      stage: "schema.rename",
      param: param,
      run:
          () => builder.renamedParamName(
            clazz,
            param,
            includeParamAnnotation: false,
          ),
    );

    FieldElement? field = builder.fieldForParam(clazz, param);
    String? description =
        field == null
            ? null
            : ArtifactBuilder.$describeChecker
                .firstAnnotationOf(field)
                ?.getField("description")
                ?.toStringValue();

    String schemaLiteral = builder.guardGeneration(
      clazz: clazz,
      stage: "schema.property_literal",
      param: param,
      run: () => _schemaLiteralForType(builder, param.type),
    );

    buf.write(
      "${builder.stringD(renamed)}:${_withOptionalDescription(builder, schemaLiteral, description)},",
    );
  }

  buf.write("},");

  List<FormalParameterElement> requiredParams =
      params.where(builder.isRequiredParam).toList();
  buf.write(
    "${builder.stringD("required")}:[${requiredParams.map((param) {
      String rn = builder.guardGeneration(clazz: clazz, stage: "schema.required.rename", param: param, run: () => builder.renamedParamName(clazz, param, includeParamAnnotation: false));
      return builder.stringD(rn);
    }).join(",")}],",
  );

  buf.write("${builder.stringD("additionalProperties")}:_F");
  buf.writeln("};");

  return (<Uri>[], buf);
}