Skip to content

Commit e9c0bf7

Browse files
committed
Add @JsonInclude(NON_NULL) to all generated event classes and warn on Object fallbacks
The code generator (scripts/codegen/java.ts) had two gaps identified during report-card grading against the Epic #69 rubric: 1. Silent Object fallbacks: When schemaTypeToJava() fell back to List<Object> (untyped array) or Map<String, Object> (untyped object without properties or additionalProperties), it did so silently. Added console.warn() at both sites so type erasure is visible during generation, matching the existing warnings for anyOf and unrecognized schema patterns. 2. Missing @JsonInclude(NON_NULL) on outer event classes: The annotation was present on inner data records and RPC records but missing from the SessionEvent sealed base class and all outer event variant classes (e.g., AssistantMessageEvent, ToolExecutionStartEvent). Added the import and annotation to generateSessionEventBaseClass() and generateEventVariantClass(). After regenerating, all 75 session event files and 111 RPC type files were updated. mvn verify passes with 556 tests, 0 failures, 0 errors.
1 parent 75e5dba commit e9c0bf7

File tree

77 files changed

+82
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+82
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ examples-test/
55
blog-copilotsdk/
66
.claude/worktrees
77
smoke-test
8-
*job-logs.txt
8+
*job-logs.txt*
99
temporary-prompts/
1010
changebundle.txt*
1111
.classpath

scripts/codegen/java.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ function schemaTypeToJava(
179179
return { javaType: `List<${itemResult.javaType}>`, imports };
180180
}
181181
imports.add("java.util.List");
182+
console.warn(`[codegen] ${context}.${propName}: array without typed items — falling back to List<Object>`);
182183
return { javaType: "List<Object>", imports };
183184
}
184185

@@ -205,6 +206,7 @@ function schemaTypeToJava(
205206
return { javaType: `Map<String, ${valueResult.javaType}>`, imports };
206207
}
207208
imports.add("java.util.Map");
209+
console.warn(`[codegen] ${context}.${propName}: object without typed properties or additionalProperties — falling back to Map<String, Object>`);
208210
return { javaType: "Map<String, Object>", imports };
209211
}
210212

@@ -291,6 +293,7 @@ async function generateSessionEventBaseClass(
291293
lines.push(`package ${packageName};`);
292294
lines.push("");
293295
lines.push(`import com.fasterxml.jackson.annotation.JsonIgnoreProperties;`);
296+
lines.push(`import com.fasterxml.jackson.annotation.JsonInclude;`);
294297
lines.push(`import com.fasterxml.jackson.annotation.JsonProperty;`);
295298
lines.push(`import com.fasterxml.jackson.annotation.JsonSubTypes;`);
296299
lines.push(`import com.fasterxml.jackson.annotation.JsonTypeInfo;`);
@@ -304,6 +307,7 @@ async function generateSessionEventBaseClass(
304307
lines.push(` * @since 1.0.0`);
305308
lines.push(` */`);
306309
lines.push(`@JsonIgnoreProperties(ignoreUnknown = true)`);
310+
lines.push(`@JsonInclude(JsonInclude.Include.NON_NULL)`);
307311
lines.push(`@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl = UnknownSessionEvent.class)`);
308312
lines.push(`@JsonSubTypes({`);
309313
for (let i = 0; i < variants.length; i++) {
@@ -539,6 +543,7 @@ async function generateEventVariantClass(
539543
lines.push(` */`);
540544
}
541545
lines.push(`@JsonIgnoreProperties(ignoreUnknown = true)`);
546+
lines.push(`@JsonInclude(JsonInclude.Include.NON_NULL)`);
542547
lines.push(GENERATED_ANNOTATION);
543548
lines.push(`public final class ${variant.className} extends SessionEvent {`);
544549
lines.push("");

src/generated/java/com/github/copilot/sdk/generated/AbortEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantIntentEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantMessageDeltaEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantReasoningDeltaEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantReasoningEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantStreamingDeltaEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantTurnEndEvent.java

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)