diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaX.java b/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaX.java index a192804..618372c 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaX.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaX.java @@ -18,6 +18,7 @@ import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType; import com.caoccao.javet.buddy.ts2java.ast.stmt.Ts2JavaAstClassDecl; +import com.caoccao.javet.buddy.ts2java.compiler.visitors.JavaLoggingMethodVisitor; import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaException; import com.caoccao.javet.swc4j.Swc4j; import com.caoccao.javet.swc4j.ast.program.Swc4jAstModule; @@ -30,6 +31,7 @@ import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy; +import net.bytebuddy.jar.asm.Opcodes; import java.util.ArrayList; import java.util.List; @@ -42,6 +44,7 @@ public class Ts2JavaX { .setMediaType(Swc4jMediaType.TypeScript) .setParseMode(Swc4jParseMode.Module) .setCaptureAst(true); + protected static boolean logging = false; protected final String packageName; protected final String tsCode; protected List> classes; @@ -52,6 +55,14 @@ public Ts2JavaX(String packageName, String tsCode) { this.tsCode = Objects.requireNonNull(tsCode); } + public static void disableLogging() { + logging = false; + } + + public static void enableLogging() { + logging = true; + } + public List> getClasses() { return classes; } @@ -87,6 +98,10 @@ public void transpile() throws Swc4jCoreException { Ts2JavaMemoDynamicType memo = new Ts2JavaMemoDynamicType(builder); Ts2JavaAstClassDecl ast = new Ts2JavaAstClassDecl(null, classDecl, memo, getPackageName()); ast.compile(); + if (logging) { + JavaLoggingMethodVisitor methodVisitor = new JavaLoggingMethodVisitor(Opcodes.ASM9); + ast.apply(methodVisitor, null); + } builder = memo.getBuilder(); try (DynamicType.Unloaded unloadedType = builder.make()) { classes.add(unloadedType.load(getClass().getClassLoader()).getLoaded()); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClass.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClass.java index 9fda870..ace1288 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClass.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClass.java @@ -26,6 +26,8 @@ import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstClassMember; import com.caoccao.javet.utils.SimpleFreeMarkerFormat; import com.caoccao.javet.utils.SimpleMap; +import net.bytebuddy.implementation.Implementation; +import net.bytebuddy.jar.asm.MethodVisitor; import java.util.ArrayList; import java.util.List; @@ -51,6 +53,14 @@ public Ts2JavaAstClass(ITs2JavaAst parent, Swc4jAstClass ast, Ts2JavaMemoD } } + @Override + public Size apply(MethodVisitor methodVisitor, Implementation.Context context) { + return body.stream() + .map((classMember) -> classMember.apply(methodVisitor, context)) + .reduce(BaseTs2JavaAst::mergeSize) + .orElse(Size.ZERO); + } + @Override public void compile() { body.forEach(ITs2JavaAstClassMember::compile); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClassMethod.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClassMethod.java index ab4cd2b..0992eb5 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClassMethod.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/clazz/Ts2JavaAstClassMethod.java @@ -27,6 +27,8 @@ import com.caoccao.javet.swc4j.ast.expr.Swc4jAstIdentName; import com.caoccao.javet.utils.SimpleFreeMarkerFormat; import com.caoccao.javet.utils.SimpleMap; +import net.bytebuddy.implementation.Implementation; +import net.bytebuddy.jar.asm.MethodVisitor; public class Ts2JavaAstClassMethod extends BaseTs2JavaAst @@ -59,6 +61,11 @@ public Ts2JavaAstClassMethod(ITs2JavaAst parent, Swc4jAstClassMethod ast, function = new Ts2JavaAstFunction(this, ast.getFunction(), memo, name, _static, accessibility); } + @Override + public Size apply(MethodVisitor methodVisitor, Implementation.Context context) { + return function.apply(methodVisitor, context); + } + @Override public void compile() { function.compile(); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/interfaces/ITs2JavaAst.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/interfaces/ITs2JavaAst.java index 37d1aeb..7d97ddd 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/interfaces/ITs2JavaAst.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/interfaces/ITs2JavaAst.java @@ -31,7 +31,7 @@ public interface ITs2JavaAst @Override default Size apply(MethodVisitor methodVisitor, Implementation.Context context) { throw new Ts2JavaException( - SimpleFreeMarkerFormat.format("${type} is not supported.", + SimpleFreeMarkerFormat.format("${type}.apply() is not implemented.", SimpleMap.of("type", getClass().getSimpleName()))); } diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/stmt/Ts2JavaAstClassDecl.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/stmt/Ts2JavaAstClassDecl.java index a24ce59..764a34d 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/stmt/Ts2JavaAstClassDecl.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/stmt/Ts2JavaAstClassDecl.java @@ -23,6 +23,8 @@ import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType; import com.caoccao.javet.swc4j.ast.stmt.Swc4jAstClassDecl; import com.caoccao.javet.utils.StringUtils; +import net.bytebuddy.implementation.Implementation; +import net.bytebuddy.jar.asm.MethodVisitor; public class Ts2JavaAstClassDecl extends BaseTs2JavaAst @@ -40,6 +42,11 @@ public Ts2JavaAstClassDecl( this.packageName = packageName; } + @Override + public Size apply(MethodVisitor methodVisitor, Implementation.Context context) { + return clazz.apply(methodVisitor, context); + } + @Override public void compile() { String className = StringUtils.isEmpty(packageName) diff --git a/src/test/java/com/caoccao/javet/buddy/ts2java/BaseTestTs2Java.java b/src/test/java/com/caoccao/javet/buddy/ts2java/BaseTestTs2Java.java index c4ac644..76a3d39 100644 --- a/src/test/java/com/caoccao/javet/buddy/ts2java/BaseTestTs2Java.java +++ b/src/test/java/com/caoccao/javet/buddy/ts2java/BaseTestTs2Java.java @@ -30,10 +30,12 @@ public class BaseTestTs2Java { protected void disableLogging() { + Ts2JavaX.disableLogging(); Ts2JavaAstClassFunction.setMethodVisitor(null); } protected void enableLogging() { + Ts2JavaX.enableLogging(); Ts2JavaAstClassFunction.setMethodVisitor(new JavaLoggingMethodVisitor(Opcodes.ASM9)); }