MCPcopy Index your code
hub / github.com/github/copilot-sdk / generatePolymorphicResultClass

Function generatePolymorphicResultClass

java/scripts/codegen/java.ts:322–398  ·  view source on GitHub ↗

* Generate a polymorphic base class and variant subclasses for a discriminated union result type.

(
    className: string,
    schema: JSONSchema7,
    packageName: string,
    packageDir: string
)

Source from the content-addressed store, hash-verified

320 * Generate a polymorphic base class and variant subclasses for a discriminated union result type.
321 */
322async function generatePolymorphicResultClass(
323 className: string,
324 schema: JSONSchema7,
325 packageName: string,
326 packageDir: string
327): Promise<void> {
328 const anyOf = schema.anyOf as JSONSchema7[];
329 const variants = resolveAnyOfVariants(anyOf);
330 const discriminator = findDiscriminator(variants);
331
332 if (!discriminator) {
333 console.warn(`[codegen] Cannot find discriminator for ${className} — skipping polymorphic generation`);
334 return;
335 }
336
337 // Collect variant info
338 interface VariantInfo {
339 discriminatorValue: string;
340 variantClassName: string;
341 schema: JSONSchema7;
342 }
343
344 const variantInfos: VariantInfo[] = [];
345 for (const [discValue, { schema: variantSchema }] of discriminator.mapping) {
346 const variantClassName = (variantSchema as JSONSchema7 & { title?: string }).title ?? `${className}${toPascalCase(discValue)}`;
347 variantInfos.push({ discriminatorValue: discValue, variantClassName, schema: variantSchema });
348 }
349
350 // Generate the abstract base class
351 const baseLines: string[] = [];
352 baseLines.push(COPYRIGHT);
353 baseLines.push("");
354 baseLines.push(AUTO_GENERATED_HEADER);
355 baseLines.push(GENERATED_FROM_API);
356 baseLines.push("");
357 baseLines.push(`package ${packageName};`);
358 baseLines.push("");
359 baseLines.push(`import com.fasterxml.jackson.annotation.JsonIgnoreProperties;`);
360 baseLines.push(`import com.fasterxml.jackson.annotation.JsonSubTypes;`);
361 baseLines.push(`import com.fasterxml.jackson.annotation.JsonTypeInfo;`);
362 baseLines.push(`import javax.annotation.processing.Generated;`);
363 baseLines.push("");
364 if (schema.description) {
365 baseLines.push(`/**`);
366 baseLines.push(` * ${schema.description}`);
367 baseLines.push(` *`);
368 baseLines.push(` * @since 1.0.0`);
369 baseLines.push(` */`);
370 }
371 baseLines.push(`@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "${discriminator.property}", visible = true)`);
372 baseLines.push(`@JsonSubTypes({`);
373 for (let i = 0; i < variantInfos.length; i++) {
374 const v = variantInfos[i];
375 const comma = i < variantInfos.length - 1 ? "," : "";
376 baseLines.push(` @JsonSubTypes.Type(value = ${v.variantClassName}.class, name = "${v.discriminatorValue}")${comma}`);
377 }
378 baseLines.push(`})`);
379 baseLines.push(`@JsonIgnoreProperties(ignoreUnknown = true)`);

Callers 2

generateRpcTypesFunction · 0.85

Calls 7

resolveAnyOfVariantsFunction · 0.85
joinMethod · 0.80
findDiscriminatorFunction · 0.70
toPascalCaseFunction · 0.70
writeGeneratedFileFunction · 0.70
pushMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…