diff --git a/playwright/src/main/java/com/microsoft/playwright/Browser.java b/playwright/src/main/java/com/microsoft/playwright/Browser.java
index 4684e2cb3..c87963e03 100644
--- a/playwright/src/main/java/com/microsoft/playwright/Browser.java
+++ b/playwright/src/main/java/com/microsoft/playwright/Browser.java
@@ -1448,7 +1448,7 @@ default Page newPage() {
* @param title Title of the browser server, used for identification.
* @since v1.59
*/
- default Bind bind(String title) {
+ default BindResult bind(String title) {
return bind(title, null);
}
/**
@@ -1457,7 +1457,7 @@ default Bind bind(String title) {
* @param title Title of the browser server, used for identification.
* @since v1.59
*/
- Bind bind(String title, BindOptions options);
+ BindResult bind(String title, BindOptions options);
/**
* NOTE: This API controls Chromium Tracing
* which is a low-level chromium-specific debugging tool. API to control pausedStateChangedHandlers = new ArrayList<>();
- private PausedDetails pausedDetails;
+ private DebuggerPausedDetails pausedDetails;
DebuggerImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
super(parent, type, guid, initializer);
@@ -38,7 +38,7 @@ class DebuggerImpl extends ChannelOwner implements Debugger {
protected void handleEvent(String event, JsonObject params) {
if ("pausedStateChanged".equals(event)) {
if (params.has("pausedDetails") && !params.get("pausedDetails").isJsonNull()) {
- pausedDetails = gson().fromJson(params.get("pausedDetails"), PausedDetails.class);
+ pausedDetails = gson().fromJson(params.get("pausedDetails"), DebuggerPausedDetails.class);
} else {
pausedDetails = null;
}
@@ -59,7 +59,7 @@ public void offPausedStateChanged(Runnable handler) {
}
@Override
- public PausedDetails pausedDetails() {
+ public DebuggerPausedDetails pausedDetails() {
return pausedDetails;
}
diff --git a/playwright/src/main/java/com/microsoft/playwright/options/Bind.java b/playwright/src/main/java/com/microsoft/playwright/options/BindResult.java
similarity index 96%
rename from playwright/src/main/java/com/microsoft/playwright/options/Bind.java
rename to playwright/src/main/java/com/microsoft/playwright/options/BindResult.java
index 51a781810..11e128212 100644
--- a/playwright/src/main/java/com/microsoft/playwright/options/Bind.java
+++ b/playwright/src/main/java/com/microsoft/playwright/options/BindResult.java
@@ -16,7 +16,7 @@
package com.microsoft.playwright.options;
-public class Bind {
+public class BindResult {
public String endpoint;
}
\ No newline at end of file
diff --git a/playwright/src/main/java/com/microsoft/playwright/options/PausedDetails.java b/playwright/src/main/java/com/microsoft/playwright/options/DebuggerPausedDetails.java
similarity index 94%
rename from playwright/src/main/java/com/microsoft/playwright/options/PausedDetails.java
rename to playwright/src/main/java/com/microsoft/playwright/options/DebuggerPausedDetails.java
index 34a2e3986..95a3ff595 100644
--- a/playwright/src/main/java/com/microsoft/playwright/options/PausedDetails.java
+++ b/playwright/src/main/java/com/microsoft/playwright/options/DebuggerPausedDetails.java
@@ -16,7 +16,7 @@
package com.microsoft.playwright.options;
-public class PausedDetails {
+public class DebuggerPausedDetails {
public Location location;
public String title;
diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java
index b34b69aa9..b849293ed 100644
--- a/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java
+++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java
@@ -16,7 +16,7 @@
package com.microsoft.playwright;
-import com.microsoft.playwright.options.Bind;
+import com.microsoft.playwright.options.BindResult;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@@ -24,7 +24,7 @@
public class TestBrowserBind extends TestBase {
@Test
void shouldBindAndUnbindBrowser() {
- Bind serverInfo = browser.bind("default");
+ BindResult serverInfo = browser.bind("default");
try {
assertNotNull(serverInfo);
assertNotNull(serverInfo.endpoint);
@@ -36,7 +36,7 @@ void shouldBindAndUnbindBrowser() {
@Test
void shouldBindWithCustomTitleAndOptions() {
- Bind serverInfo = browser.bind("my-title",
+ BindResult serverInfo = browser.bind("my-title",
new Browser.BindOptions().setHost("127.0.0.1").setPort(0));
try {
assertNotNull(serverInfo);
diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java b/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java
index 189b6aba5..91961d1c5 100644
--- a/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java
+++ b/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java
@@ -16,7 +16,7 @@
package com.microsoft.playwright;
-import com.microsoft.playwright.options.PausedDetails;
+import com.microsoft.playwright.options.DebuggerPausedDetails;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@@ -40,7 +40,7 @@ void shouldPauseAtNextAndResume() {
dbg.onPausedStateChanged(() -> {
if (!paused[0]) {
paused[0] = true;
- PausedDetails details = dbg.pausedDetails();
+ DebuggerPausedDetails details = dbg.pausedDetails();
assertNotNull(details);
assertTrue(details.title.contains("Click"), "title: " + details.title);
dbg.resume();
@@ -63,7 +63,7 @@ void shouldStepWithNext() {
dbg.onPausedStateChanged(() -> {
if (!paused[0]) {
paused[0] = true;
- PausedDetails details = dbg.pausedDetails();
+ DebuggerPausedDetails details = dbg.pausedDetails();
assertNotNull(details);
assertTrue(details.title.contains("Click"), "title: " + details.title);
dbg.next();
@@ -88,7 +88,7 @@ void shouldPauseAtPauseCall() {
dbg.onPausedStateChanged(() -> {
if (!paused[0]) {
paused[0] = true;
- PausedDetails details = dbg.pausedDetails();
+ DebuggerPausedDetails details = dbg.pausedDetails();
assertNotNull(details);
assertTrue(details.title.contains("Pause"), "title: " + details.title);
dbg.resume();
diff --git a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java
index 1b8fdfddf..14a860afe 100644
--- a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java
+++ b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java
@@ -283,40 +283,20 @@ private static String wrapText(String text, int maxColumns, String prefix) {
class TypeRef extends Element {
String customType;
- private static final Map customTypeNames = new HashMap<>();
- static {
- customTypeNames.put("APIRequest.newContext.options.clientCertificates", "ClientCertificate");
- customTypeNames.put("Browser.newContext.options.clientCertificates", "ClientCertificate");
- customTypeNames.put("Browser.newPage.options.clientCertificates", "ClientCertificate");
- customTypeNames.put("BrowserType.launchPersistentContext.options.clientCertificates", "ClientCertificate");
-
- customTypeNames.put("BrowserContext.addCookies.cookies", "Cookie");
- customTypeNames.put("BrowserContext.cookies", "Cookie");
-
- customTypeNames.put("Request.headersArray", "HttpHeader");
- customTypeNames.put("Response.headersArray", "HttpHeader");
- customTypeNames.put("APIResponse.headersArray", "HttpHeader");
-
- customTypeNames.put("Locator.selectOption.values", "SelectOption");
- customTypeNames.put("ElementHandle.selectOption.values", "SelectOption");
- customTypeNames.put("Frame.selectOption.values", "SelectOption");
- customTypeNames.put("Page.selectOption.values", "SelectOption");
-
- customTypeNames.put("Locator.setInputFiles.files", "FilePayload");
- customTypeNames.put("ElementHandle.setInputFiles.files", "FilePayload");
- customTypeNames.put("FileChooser.setFiles.files", "FilePayload");
- customTypeNames.put("Frame.setInputFiles.files", "FilePayload");
- customTypeNames.put("Page.setInputFiles.files", "FilePayload");
- customTypeNames.put("Page.setInputFiles.files", "FilePayload");
- customTypeNames.put("FormData.append.value", "FilePayload");
- customTypeNames.put("FormData.set.value", "FilePayload");
-
- customTypeNames.put("Locator.dragTo.options.sourcePosition", "Position");
- customTypeNames.put("Page.dragAndDrop.options.sourcePosition", "Position");
- customTypeNames.put("Frame.dragAndDrop.options.sourcePosition", "Position");
- customTypeNames.put("Locator.dragTo.options.targetPosition", "Position");
- customTypeNames.put("Page.dragAndDrop.options.targetPosition", "Position");
- customTypeNames.put("Frame.dragAndDrop.options.targetPosition", "Position");
+ // Returns the Java-specific type alias declared in the api docs (e.g. `alias-java: Cookie`),
+ // falling back to the language-agnostic `alias` if no Java-specific override is provided.
+ private static String javaAlias(JsonObject jsonType) {
+ if (!jsonType.has("langAliases")) {
+ return null;
+ }
+ JsonObject langAliases = jsonType.getAsJsonObject("langAliases");
+ if (langAliases.has("java")) {
+ return langAliases.get("java").getAsString();
+ }
+ if (langAliases.has("default")) {
+ return langAliases.get("default").getAsString();
+ }
+ return null;
}
TypeRef(Element parent, JsonElement jsonElement) {
@@ -355,8 +335,9 @@ private void createClassesAndEnums(JsonObject jsonObject) {
customType = toTitle(parent.parent.jsonName) + toTitle(parent.jsonName);
typeScope().createNestedClass(customType, this, jsonObject);
} else {
- if (customTypeNames.containsKey(jsonPath)) {
- customType = customTypeNames.get(jsonPath);
+ String alias = javaAlias(jsonObject);
+ if (alias != null) {
+ customType = alias;
} else {
customType = toTitle(parent.jsonName);
}
@@ -534,15 +515,12 @@ private String convertBuiltinType(JsonObject jsonType) {
return convertTemplateParams(jsonType);
}
if ("function".equals(name)) {
+ String alias = javaAlias(jsonType);
+ if (alias != null) {
+ return alias;
+ }
if (!jsonType.has("args")) {
- switch (jsonPath) {
- case "BrowserContext.exposeBinding.callback": return "BindingCallback";
- case "BrowserContext.exposeFunction.callback": return "FunctionCallback";
- case "Page.exposeBinding.callback": return "BindingCallback";
- case "Page.exposeFunction.callback": return "FunctionCallback";
- default:
- throw new RuntimeException("Missing mapping for " + jsonPath);
- }
+ throw new RuntimeException("Missing mapping for " + jsonPath);
}
if ("WebSocketRoute.onClose.handler".equals(jsonPath)) {
return "BiConsumer";