Skip to content

Commit 412c8be

Browse files
committed
Refactor: promote type-safe on(Class, Consumer) event handlers
Update all examples and Javadoc to use the type-safe on(Class, Consumer) overload instead of the catch-all on(Consumer) with if/else instanceof blocks. This makes examples cleaner and more idiomatic. The catch-all on(Consumer) is still available for collecting all events or using switch expressions, but type-safe handlers are now the recommended pattern.
1 parent c7ecec9 commit 412c8be

9 files changed

Lines changed: 75 additions & 95 deletions

File tree

README.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,10 @@ public class Example {
5959
).get();
6060

6161
var done = new CompletableFuture<Void>();
62-
session.on(evt -> {
63-
if (evt instanceof AssistantMessageEvent msg) {
64-
System.out.println(msg.getData().getContent());
65-
} else if (evt instanceof SessionIdleEvent) {
66-
done.complete(null);
67-
}
62+
session.on(AssistantMessageEvent.class, msg -> {
63+
System.out.println(msg.getData().getContent());
6864
});
65+
session.on(SessionIdleEvent.class, idle -> done.complete(null));
6966

7067
session.send(new MessageOptions().setPrompt("What is 2+2?")).get();
7168
done.get();

jbang-example.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,17 @@ public static void main(String[] args) throws Exception {
1818
// Wait for response using session.idle event
1919
var done = new CompletableFuture<Void>();
2020

21-
session.on(evt -> {
22-
if (evt instanceof AssistantMessageEvent msg) {
23-
System.out.println(msg.getData().getContent());
24-
} else if (evt instanceof SessionUsageInfoEvent usage) {
25-
var data = usage.getData();
26-
System.out.println("\n--- Usage Metrics ---");
27-
System.out.println("Current tokens: " + (int) data.getCurrentTokens());
28-
System.out.println("Token limit: " + (int) data.getTokenLimit());
29-
System.out.println("Messages count: " + (int) data.getMessagesLength());
30-
} else if (evt instanceof SessionIdleEvent) {
31-
done.complete(null);
32-
}
21+
session.on(AssistantMessageEvent.class, msg -> {
22+
System.out.println(msg.getData().getContent());
3323
});
24+
session.on(SessionUsageInfoEvent.class, usage -> {
25+
var data = usage.getData();
26+
System.out.println("\n--- Usage Metrics ---");
27+
System.out.println("Current tokens: " + (int) data.getCurrentTokens());
28+
System.out.println("Token limit: " + (int) data.getTokenLimit());
29+
System.out.println("Messages count: " + (int) data.getMessagesLength());
30+
});
31+
session.on(SessionIdleEvent.class, idle -> done.complete(null));
3432

3533
// Send a message and wait for completion
3634
session.send(new MessageOptions().setPrompt("What is 2+2?")).get();

src/main/java/com/github/copilot/sdk/CopilotClient.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,13 @@
6262
* Example usage:
6363
*
6464
* <pre>{@code
65-
* try (CopilotClient client = new CopilotClient()) {
65+
* try (var client = new CopilotClient()) {
6666
* client.start().get();
6767
*
68-
* CopilotSession session = client.createSession(new SessionConfig().setModel("gpt-5")).get();
68+
* var session = client.createSession(new SessionConfig().setModel("gpt-5")).get();
6969
*
70-
* session.on(evt -> {
71-
* if (evt instanceof AssistantMessageEvent msg) {
72-
* System.out.println(msg.getData().getContent());
73-
* }
70+
* session.on(AssistantMessageEvent.class, msg -> {
71+
* System.out.println(msg.getData().getContent());
7472
* });
7573
*
7674
* session.send(new MessageOptions().setPrompt("Hello!")).get();

src/main/java/com/github/copilot/sdk/CopilotSession.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,14 @@
5959
*
6060
* <pre>{@code
6161
* // Create a session
62-
* CopilotSession session = client.createSession(new SessionConfig().setModel("gpt-5")).get();
62+
* var session = client.createSession(new SessionConfig().setModel("gpt-5")).get();
6363
*
64-
* // Register event handlers
65-
* session.on(evt -> {
66-
* if (evt instanceof AssistantMessageEvent msg) {
67-
* System.out.println(msg.getData().getContent());
68-
* }
64+
* // Register type-safe event handlers
65+
* session.on(AssistantMessageEvent.class, msg -> {
66+
* System.out.println(msg.getData().getContent());
67+
* });
68+
* session.on(SessionIdleEvent.class, idle -> {
69+
* System.out.println("Session is idle");
6970
* });
7071
*
7172
* // Send messages
@@ -288,28 +289,26 @@ public CompletableFuture<AssistantMessageEvent> sendAndWait(MessageOptions optio
288289
}
289290

290291
/**
291-
* Registers a callback for session events.
292+
* Registers a callback for all session events.
292293
* <p>
293-
* The handler will be invoked for all events in this session, including
294-
* assistant messages, tool calls, and session state changes.
294+
* The handler will be invoked for every event in this session, including
295+
* assistant messages, tool calls, and session state changes. For type-safe
296+
* handling of specific event types, prefer {@link #on(Class, Consumer)}
297+
* instead.
295298
*
296299
* <p>
297300
* <b>Example:</b>
298301
*
299302
* <pre>{@code
300-
* Closeable subscription = session.on(evt -> {
301-
* if (evt instanceof AssistantMessageEvent msg) {
302-
* System.out.println(msg.getData().getContent());
303-
* }
304-
* });
305-
*
306-
* // Later, to unsubscribe:
307-
* subscription.close();
303+
* // Collect all events
304+
* var events = new ArrayList<AbstractSessionEvent>();
305+
* session.on(events::add);
308306
* }</pre>
309307
*
310308
* @param handler
311309
* a callback to be invoked when a session event occurs
312310
* @return a Closeable that, when closed, unsubscribes the handler
311+
* @see #on(Class, Consumer)
313312
* @see AbstractSessionEvent
314313
*/
315314
public Closeable on(Consumer<AbstractSessionEvent> handler) {

src/main/java/com/github/copilot/sdk/package-info.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@
3333
*
3434
* var session = client.createSession(new SessionConfig().setModel("gpt-4.1")).get();
3535
*
36-
* session.on(evt -> {
37-
* if (evt instanceof AssistantMessageEvent msg) {
38-
* System.out.println(msg.getData().getContent());
39-
* }
36+
* session.on(AssistantMessageEvent.class, msg -> {
37+
* System.out.println(msg.getData().getContent());
4038
* });
4139
*
4240
* session.send(new MessageOptions().setPrompt("Hello, Copilot!")).get();

src/site/markdown/advanced.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,13 @@ var workspace = session.getWorkspacePath();
135135
When compaction occurs, the session emits events that you can listen for:
136136

137137
```java
138-
session.on(event -> {
139-
if (event instanceof SessionCompactionStartEvent start) {
140-
System.out.println("Compaction started");
141-
} else if (event instanceof SessionCompactionCompleteEvent complete) {
142-
var data = complete.getData();
143-
System.out.println("Compaction completed - success: " + data.isSuccess()
144-
+ ", tokens removed: " + data.getTokensRemoved());
145-
}
138+
session.on(SessionCompactionStartEvent.class, start -> {
139+
System.out.println("Compaction started");
140+
});
141+
session.on(SessionCompactionCompleteEvent.class, complete -> {
142+
var data = complete.getData();
143+
System.out.println("Compaction completed - success: " + data.isSuccess()
144+
+ ", tokens removed: " + data.getTokensRemoved());
146145
});
147146
```
148147

src/site/markdown/documentation.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,14 @@ var session = client.createSession(
194194

195195
var done = new CompletableFuture<Void>();
196196

197-
session.on(event -> {
198-
if (event instanceof AssistantMessageDeltaEvent delta) {
199-
// Print each chunk as it arrives
200-
System.out.print(delta.getData().getDeltaContent());
201-
} else if (event instanceof SessionIdleEvent) {
202-
System.out.println(); // Newline at end
203-
done.complete(null);
204-
}
197+
session.on(AssistantMessageDeltaEvent.class, delta -> {
198+
// Print each chunk as it arrives
199+
System.out.print(delta.getData().getDeltaContent());
200+
});
201+
202+
session.on(SessionIdleEvent.class, idle -> {
203+
System.out.println(); // Newline at end
204+
done.complete(null);
205205
});
206206

207207
session.send("Write a haiku about Java").get();

src/site/markdown/getting-started.md

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,12 @@ public class StreamingExample {
127127
var done = new CompletableFuture<Void>();
128128

129129
// Listen for response chunks
130-
session.on(event -> {
131-
if (event instanceof AssistantMessageDeltaEvent delta) {
132-
System.out.print(delta.getData().getDeltaContent());
133-
} else if (event instanceof SessionIdleEvent) {
134-
System.out.println(); // New line when done
135-
done.complete(null);
136-
}
130+
session.on(AssistantMessageDeltaEvent.class, delta -> {
131+
System.out.print(delta.getData().getDeltaContent());
132+
});
133+
session.on(SessionIdleEvent.class, idle -> {
134+
System.out.println(); // New line when done
135+
done.complete(null);
137136
});
138137

139138
session.send(
@@ -204,13 +203,12 @@ public class ToolExample {
204203

205204
var done = new CompletableFuture<Void>();
206205

207-
session.on(event -> {
208-
if (event instanceof AssistantMessageDeltaEvent delta) {
209-
System.out.print(delta.getData().getDeltaContent());
210-
} else if (event instanceof SessionIdleEvent) {
211-
System.out.println();
212-
done.complete(null);
213-
}
206+
session.on(AssistantMessageDeltaEvent.class, delta -> {
207+
System.out.print(delta.getData().getDeltaContent());
208+
});
209+
session.on(SessionIdleEvent.class, idle -> {
210+
System.out.println();
211+
done.complete(null);
214212
});
215213

216214
session.send(
@@ -284,14 +282,13 @@ public class WeatherAssistant {
284282
var done = new AtomicReference<CompletableFuture<Void>>();
285283

286284
// Register listener once, outside the loop
287-
session.on(event -> {
288-
if (event instanceof AssistantMessageDeltaEvent delta) {
289-
System.out.print(delta.getData().getDeltaContent());
290-
} else if (event instanceof SessionIdleEvent) {
291-
System.out.println();
292-
var f = done.get();
293-
if (f != null) f.complete(null);
294-
}
285+
session.on(AssistantMessageDeltaEvent.class, delta -> {
286+
System.out.print(delta.getData().getDeltaContent());
287+
});
288+
session.on(SessionIdleEvent.class, idle -> {
289+
System.out.println();
290+
var f = done.get();
291+
if (f != null) f.complete(null);
295292
});
296293

297294
while (true) {

src/site/markdown/index.md

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,10 @@ public class Example {
4949
).get();
5050

5151
var done = new CompletableFuture<Void>();
52-
session.on(evt -> {
53-
if (evt instanceof AssistantMessageEvent msg) {
54-
System.out.println(msg.getData().getContent());
55-
} else if (evt instanceof SessionIdleEvent) {
56-
done.complete(null);
57-
}
52+
session.on(AssistantMessageEvent.class, msg -> {
53+
System.out.println(msg.getData().getContent());
5854
});
55+
session.on(SessionIdleEvent.class, idle -> done.complete(null));
5956

6057
session.send(new MessageOptions().setPrompt("What is 2+2?")).get();
6158
done.get();
@@ -96,13 +93,10 @@ class hello {
9693
client.start().get();
9794
var session = client.createSession(new SessionConfig()).get();
9895
var done = new CompletableFuture<Void>();
99-
session.on(evt -> {
100-
if (evt instanceof AssistantMessageEvent msg) {
101-
System.out.print(msg.getData().getContent());
102-
} else if (evt instanceof SessionIdleEvent) {
103-
done.complete(null);
104-
}
96+
session.on(AssistantMessageEvent.class, msg -> {
97+
System.out.print(msg.getData().getContent());
10598
});
99+
session.on(SessionIdleEvent.class, idle -> done.complete(null));
106100
session.send(new MessageOptions().setPrompt("Say hello!")).get();
107101
done.get();
108102
}

0 commit comments

Comments
 (0)