From 072d94f146adbff5b5aaafb9dff645984b31c0d3 Mon Sep 17 00:00:00 2001 From: Daniel Grima Date: Sat, 18 Oct 2025 14:29:44 +0200 Subject: [PATCH] Updates to tackle Kotlin compatibility issues (#84) --- .../src/main/java/com/telerik/dts/DtsApi.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/dts-generator/src/main/java/com/telerik/dts/DtsApi.java b/dts-generator/src/main/java/com/telerik/dts/DtsApi.java index 9177b68..bfd1ff0 100644 --- a/dts-generator/src/main/java/com/telerik/dts/DtsApi.java +++ b/dts-generator/src/main/java/com/telerik/dts/DtsApi.java @@ -139,7 +139,8 @@ public String generateDtsContent(List javaClasses) { currentFileClassname.contains(".debugger.") || currentFileClassname.endsWith("package-info") || currentFileClassname.endsWith("module-info") || - currentFileClassname.endsWith("Kt")) { + currentFileClassname.endsWith("Kt") || + currentFileClassname.contains("$$serializer")) { continue; } @@ -244,7 +245,9 @@ public String generateDtsContent(List javaClasses) { } private String replaceIgnoredNamespaces(String content) { - String regexFormat = "(?%s(?:(?:\\.[a-zA-Z\\d]*)|<[a-zA-Z\\d\\.<>]*>)*)(?[^a-zA-Z\\d]+)"; + // Updated regex to properly capture generics with commas, spaces, and nested angle brackets + // Also matches end of string or line as valid suffix + String regexFormat = "(?%s(?:(?:\\.[a-zA-Z\\d]*)|<[a-zA-Z\\d\\.<>, ]*>)*)(?[^a-zA-Z\\d]+|$)"; // these namespaces are not known in some android api levels, so we cannot use them in android-support for instance, so we are replacing them with any for (String ignoredNamespace : this.getIgnoredNamespaces()) { String regexString = String.format(regexFormat, ignoredNamespace.replace(".", "\\.")); @@ -960,6 +963,20 @@ private String getMethodParamSignature(JavaClass clazz, TypeDefinition typeDefin if (localVariable != null) { String name = localVariable.getName(); + + // Sanitize Kotlin synthetic parameter names like + if (name.startsWith("<") && name.endsWith(">")) { + // For setter methods, derive parameter name from method name + String methodName = m.getName(); + if (methodName.startsWith("set") && methodName.length() > 3) { + // setInitialDelay -> initialDelay + name = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4); + } else { + // Fallback to "value" for other synthetic names + name = "value"; + } + } + if (reservedJsKeywords.contains(name)) { System.out.println(String.format("Appending _ to reserved JS keyword %s", name)); sb.append(name + "_");