diff --git a/doc/jsweet-language-specifications.tex b/doc/jsweet-language-specifications.tex index 6635f3a5..ad92f075 100644 --- a/doc/jsweet-language-specifications.tex +++ b/doc/jsweet-language-specifications.tex @@ -126,6 +126,7 @@ Here follows the list of allowed Java classes in JSweet: \item \texttt{indexOf(java.lang.String)} \item \texttt{lastIndexOf(java.lang.String)} \item \texttt{lastIndexOf(java.lang.String,int)} + \item \texttt{length()} (transpiles to \texttt{length}) \item \texttt{substring(int)} \item \texttt{substring(int,int)} (with the JavaScript behavior) \item \texttt{replace(java.lang.String,java.lang.String)} diff --git a/src/main/java/org/jsweet/transpiler/TypeChecker.java b/src/main/java/org/jsweet/transpiler/TypeChecker.java index 445b8e69..2213a51c 100644 --- a/src/main/java/org/jsweet/transpiler/TypeChecker.java +++ b/src/main/java/org/jsweet/transpiler/TypeChecker.java @@ -109,6 +109,7 @@ public class TypeChecker { AUTHORIZED_STRING_METHODS.add("trim()"); AUTHORIZED_STRING_METHODS.add("toLowerCase()"); AUTHORIZED_STRING_METHODS.add("toUpperCase()"); + AUTHORIZED_STRING_METHODS.add("length()"); FORBIDDEN_JDK_FUNCTIONAL_METHODS.add("and"); FORBIDDEN_JDK_FUNCTIONAL_METHODS.add("negate"); diff --git a/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java b/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java index 60d401bc..276cbe98 100644 --- a/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java +++ b/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java @@ -282,7 +282,12 @@ public class Java2TypeScriptAdapter extends AbstractPrinterAdapter { getPrinter().print(")"); return true; } + if (matchesMethod(targetClassName, targetMethodName, String.class.getName(), "length")) { + getPrinter().print(invocation.meth); + return true; + } + if (matchesMethod(targetClassName, targetMethodName, null, INDEXED_GET_FUCTION_NAME)) { if (isWithinGlobals(targetClassName)) { report(invocation, JSweetProblem.GLOBAL_INDEXER_GET); diff --git a/src/test/java/org/jsweet/test/transpiler/ApiTests.java b/src/test/java/org/jsweet/test/transpiler/ApiTests.java index 738c5010..c3862786 100644 --- a/src/test/java/org/jsweet/test/transpiler/ApiTests.java +++ b/src/test/java/org/jsweet/test/transpiler/ApiTests.java @@ -55,6 +55,7 @@ public class ApiTests extends AbstractTest { assertEquals("testc", result. get("s4")); assertEquals(2, result. get("i1").intValue()); assertEquals(-1, result. get("i2").intValue()); + assertEquals(4, result. get("l").intValue()); }, getSourceFile(JdkInvocations.class)); } diff --git a/src/test/java/source/api/JdkInvocations.java b/src/test/java/source/api/JdkInvocations.java index 6e8ae4a5..efd56101 100644 --- a/src/test/java/source/api/JdkInvocations.java +++ b/src/test/java/source/api/JdkInvocations.java @@ -36,6 +36,7 @@ public class JdkInvocations { $export("s4", s.concat("c")); $export("i1", s.indexOf("s")); $export("i2", s.lastIndexOf("gg")); + $export("l", s.length()); s.lastIndexOf("", 10); Other4 o2 = new Other4(); o2.toString();