diff --git a/scripts/ts/test.add.ts b/scripts/ts/test.add.ts index e26f8d5..7295467 100644 --- a/scripts/ts/test.add.ts +++ b/scripts/ts/test.add.ts @@ -1,3 +1,5 @@ +import { type int } from "./type.aliases"; + class Test { public add(a: int, b: int): int { return a + b; diff --git a/scripts/ts/test.sum.ts b/scripts/ts/test.sum.ts index 9f8027b..0a6fb81 100644 --- a/scripts/ts/test.sum.ts +++ b/scripts/ts/test.sum.ts @@ -1,3 +1,5 @@ +import { type int } from "./type.aliases"; + function sum(n: int): int { let sum: int = 0; for (let i: int = 0; i < n; i++) { diff --git a/scripts/ts/type.aliases.ts b/scripts/ts/type.aliases.ts index 61b835c..91cc057 100644 --- a/scripts/ts/type.aliases.ts +++ b/scripts/ts/type.aliases.ts @@ -1 +1 @@ -type int = number; +export type int = number; diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2Java.java b/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2Java.java index 1f7817f..f3eba70 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2Java.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2Java.java @@ -62,7 +62,7 @@ public String getTsCode() { return tsCode; } - public void transpile() throws Swc4jCoreException, Ts2JavaException { + public void transpile() throws Swc4jCoreException { classes.clear(); Swc4jParseOutput output = swc4j.parse(getTsCode(), swc4jParseOptions); Swc4jAstScript script = (Swc4jAstScript) output.getProgram(); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaException.java b/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaException.java index 3840517..cf2c602 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaException.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaException.java @@ -16,7 +16,7 @@ package com.caoccao.javet.buddy.ts2java; -public class Ts2JavaException extends Exception { +public class Ts2JavaException extends RuntimeException { public Ts2JavaException(String message) { super(message); } diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/BaseTs2JavaAst.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/BaseTs2JavaAst.java index f005af1..9658e32 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/BaseTs2JavaAst.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/BaseTs2JavaAst.java @@ -16,10 +16,9 @@ package com.caoccao.javet.buddy.ts2java.ast; -import com.caoccao.javet.buddy.ts2java.Ts2JavaException; import com.caoccao.javet.swc4j.ast.Swc4jAst; import net.bytebuddy.dynamic.DynamicType; public abstract class BaseTs2JavaAst { - public abstract DynamicType.Builder transpile(DynamicType.Builder builder, AST ast) throws Ts2JavaException; + public abstract DynamicType.Builder transpile(DynamicType.Builder builder, AST ast); } diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBindingIdent.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBindingIdent.java index 13673cc..8ae7c0e 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBindingIdent.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBindingIdent.java @@ -29,6 +29,6 @@ public static Class getClass(Swc4jAstBindingIdent ast) { } public static String getIdent(Swc4jAstBindingIdent ast) { - return ast.getId().getSym(); + return Ts2JavaAstIdent.getSym(ast.getId()); } } diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClass.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClass.java index 132418d..5340b4e 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClass.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClass.java @@ -16,7 +16,6 @@ package com.caoccao.javet.buddy.ts2java.ast; -import com.caoccao.javet.buddy.ts2java.Ts2JavaException; import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstClass; import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstClassMethod; import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstClassMember; @@ -26,8 +25,7 @@ public final class Ts2JavaAstClass extends BaseTs2JavaAst { @Override public DynamicType.Builder transpile( DynamicType.Builder builder, - Swc4jAstClass ast) - throws Ts2JavaException { + Swc4jAstClass ast) { for (ISwc4jAstClassMember classMember : ast.getBody()) { switch (classMember.getType()) { case ClassMethod: diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassDecl.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassDecl.java index d8f0966..59467fe 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassDecl.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassDecl.java @@ -16,7 +16,6 @@ package com.caoccao.javet.buddy.ts2java.ast; -import com.caoccao.javet.buddy.ts2java.Ts2JavaException; import com.caoccao.javet.swc4j.ast.stmt.Swc4jAstClassDecl; import com.caoccao.javet.utils.StringUtils; import net.bytebuddy.dynamic.DynamicType; @@ -35,11 +34,10 @@ public String getPackageName() { @Override public DynamicType.Builder transpile( DynamicType.Builder builder, - Swc4jAstClassDecl ast) - throws Ts2JavaException { + Swc4jAstClassDecl ast) { String className = StringUtils.isEmpty(packageName) - ? ast.getIdent().getSym() - : packageName + "." + ast.getIdent().getSym(); + ? Ts2JavaAstIdent.getSym(ast.getIdent()) + : packageName + "." + Ts2JavaAstIdent.getSym(ast.getIdent()); builder = builder.name(className); builder = new Ts2JavaAstClass().transpile(builder, ast.getClazz()); return builder; diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassFunction.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassFunction.java index 9402658..67b00eb 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassFunction.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassFunction.java @@ -16,7 +16,6 @@ package com.caoccao.javet.buddy.ts2java.ast; -import com.caoccao.javet.buddy.ts2java.Ts2JavaException; import com.caoccao.javet.buddy.ts2java.compiler.JavaStackFrame; import com.caoccao.javet.buddy.ts2java.compiler.JavaStackObject; import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstFunction; @@ -25,10 +24,11 @@ import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.MethodDelegation; -import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Stack; +import java.util.stream.Collectors; +import java.util.stream.IntStream; public final class Ts2JavaAstClassFunction extends BaseTs2JavaAst { private final Swc4jAstAccessibility accessibility; @@ -50,19 +50,15 @@ public String getName() { @Override public DynamicType.Builder transpile( DynamicType.Builder builder, - Swc4jAstFunction ast) - throws Ts2JavaException { + Swc4jAstFunction ast) { final Visibility visibility = Ts2JavaAstAccessibility.getVisibility(accessibility); final Class returnType = ast.getReturnType() .map(Ts2JavaAstTsTypeAnn::getClass) .orElse((Class) Object.class); final Stack stackFrames = new Stack<>(); - final List stackObjects = new ArrayList<>(); - final int size = ast.getParams().size(); - for (int i = 0; i < size; i++) { - JavaStackObject stackObject = Ts2JavaAstParam.getStackObject(i + 1, ast.getParams().get(i)); - stackObjects.add(stackObject); - } + final List stackObjects = IntStream.range(0, ast.getParams().size()) + .mapToObj(i -> Ts2JavaAstParam.getStackObject(i + 1, ast.getParams().get(i))) + .collect(Collectors.toList()); final JavaStackFrame stackFrame = new JavaStackFrame(stackObjects); stackFrames.push(stackFrame); final Class[] parameters = stackFrame.getObjects().stream() diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassMethod.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassMethod.java index f78bc4d..773b71d 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassMethod.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstClassMethod.java @@ -27,8 +27,7 @@ public final class Ts2JavaAstClassMethod extends BaseTs2JavaAst transpile( DynamicType.Builder builder, - Swc4jAstClassMethod ast) - throws Ts2JavaException { + Swc4jAstClassMethod ast) { if (ast.isStatic()) { throw new Ts2JavaException("Not implemented"); } @@ -38,7 +37,7 @@ public DynamicType.Builder transpile( if (!(ast.getKey() instanceof Swc4jAstIdentName)) { throw new Ts2JavaException("Function ident type " + ast.getKey().getClass().getSimpleName() + " is not supported"); } - String name = ast.getKey().as(Swc4jAstIdentName.class).getSym(); + String name = Ts2JavaAstIdentName.getSym(ast.getKey().as(Swc4jAstIdentName.class)); Swc4jAstAccessibility accessibility = ast.getAccessibility().orElse(Swc4jAstAccessibility.Public); builder = new Ts2JavaAstClassFunction(name, accessibility).transpile(builder, ast.getFunction()); return builder; diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstIdent.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstIdent.java new file mode 100644 index 0000000..798e872 --- /dev/null +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstIdent.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024-2024. caoccao.com Sam Cao + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.caoccao.javet.buddy.ts2java.ast; + +import com.caoccao.javet.swc4j.ast.expr.Swc4jAstIdent; + +public final class Ts2JavaAstIdent { + private Ts2JavaAstIdent() { + } + + public static String getSym(Swc4jAstIdent ast) { + return ast.getSym(); + } +} diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstIdentName.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstIdentName.java new file mode 100644 index 0000000..609ad2b --- /dev/null +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstIdentName.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024-2024. caoccao.com Sam Cao + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.caoccao.javet.buddy.ts2java.ast; + +import com.caoccao.javet.swc4j.ast.expr.Swc4jAstIdentName; + +public final class Ts2JavaAstIdentName { + private Ts2JavaAstIdentName() { + } + + public static String getSym(Swc4jAstIdentName ast) { + return ast.getSym(); + } +} diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstParam.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstParam.java index 77d81d2..41e44f3 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstParam.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstParam.java @@ -25,7 +25,7 @@ public final class Ts2JavaAstParam { private Ts2JavaAstParam() { } - public static JavaStackObject getStackObject(int index, Swc4jAstParam ast) throws Ts2JavaException { + public static JavaStackObject getStackObject(int index, Swc4jAstParam ast) { switch (ast.getPat().getType()) { case BindingIdent: String ident = Ts2JavaAstBindingIdent.getIdent(ast.getPat().as(Swc4jAstBindingIdent.class)); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstTsEntityName.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstTsEntityName.java index c0c6688..7fc4d97 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstTsEntityName.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstTsEntityName.java @@ -26,8 +26,7 @@ private Ts2JavaAstTsEntityName() { public static String getName(ISwc4jAstTsEntityName ast) { switch (ast.getType()) { case Ident: - Swc4jAstIdent ident = ast.as(Swc4jAstIdent.class); - return ident.getSym(); + return Ts2JavaAstIdent.getSym(ast.as(Swc4jAstIdent.class)); default: return null; }