Skip to content

Commit

Permalink
🦄 refactor: Resign ast 7
Browse files Browse the repository at this point in the history
  • Loading branch information
caoccao committed Nov 28, 2024
1 parent 83946e8 commit 99aecf8
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 1 deletion.
15 changes: 15 additions & 0 deletions src/main/java/com/caoccao/javet/buddy/ts2java/Ts2JavaX.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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<Class<?>> classes;
Expand All @@ -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<Class<?>> getClasses() {
return classes;
}
Expand Down Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Swc4jAstClassMethod, Ts2JavaMemoDynamicType>
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public interface ITs2JavaAst<AST extends ISwc4jAst, Memo extends Ts2JavaMemo>
@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())));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Swc4jAstClassDecl, Ts2JavaMemoDynamicType>
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down

0 comments on commit 99aecf8

Please sign in to comment.