Skip to content

Commit

Permalink
🦄 refactor: Redesign ast 10
Browse files Browse the repository at this point in the history
  • Loading branch information
caoccao committed Nov 29, 2024
1 parent 95ea32b commit d1303dc
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,37 +20,22 @@
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstClassMember;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstClass;
import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstClassMethod;
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;
import java.util.stream.Collectors;

public class Ts2JavaAstClass
extends BaseTs2JavaAst<Swc4jAstClass, Ts2JavaMemoDynamicType> {
protected final List<ITs2JavaAstClassMember<?, ?>> body;

public Ts2JavaAstClass(ITs2JavaAst<?, ?> parent, Swc4jAstClass ast, Ts2JavaMemoDynamicType memo) {
super(parent, ast, memo);
body = new ArrayList<>();
for (ISwc4jAstClassMember classMember : ast.getBody()) {
switch (classMember.getType()) {
case ClassMethod:
body.add(new Ts2JavaAstClassMethod(this, classMember.as(Swc4jAstClassMethod.class), memo));
break;
default:
throw new Ts2JavaAstException(
classMember,
SimpleFreeMarkerFormat.format("Class body type ${type} is not supported.",
SimpleMap.of("type", classMember.getType().name())));
}
}
body = ast.getBody().stream()
.map(classMember -> ITs2JavaAstClassMember.cast(this, classMember, memo))
.collect(Collectors.toList());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,11 @@
package com.caoccao.javet.buddy.ts2java.ast.expr;

import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.expr.lit.Ts2JavaAstNumber;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstExpr;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstSimpleAssignTarget;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.expr.Swc4jAstParenExpr;
import com.caoccao.javet.swc4j.ast.expr.lit.Swc4jAstNumber;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstExpr;
import com.caoccao.javet.utils.SimpleFreeMarkerFormat;
import com.caoccao.javet.utils.SimpleMap;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.implementation.Implementation;
import net.bytebuddy.jar.asm.MethodVisitor;
Expand All @@ -43,20 +37,7 @@ public Ts2JavaAstParenExpr(
Swc4jAstParenExpr ast,
Ts2JavaMemoFunction memo) {
super(parent, ast, memo);
ISwc4jAstExpr astExpr = ast.getExpr();
switch (astExpr.getType()) {
case Number:
expr = new Ts2JavaAstNumber(this, astExpr.as(Swc4jAstNumber.class), null, memo);
break;
case ParenExpr:
expr = new Ts2JavaAstParenExpr(this, astExpr.as(Swc4jAstParenExpr.class), memo);
break;
default:
throw new Ts2JavaAstException(
astExpr,
SimpleFreeMarkerFormat.format("ParentExpr expr type ${exprType} is not supported.",
SimpleMap.of("exprType", astExpr.getType().name())));
}
expr = ITs2JavaAstExpr.cast(this, ast.getExpr(), memo);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,28 @@

package com.caoccao.javet.buddy.ts2java.ast.interfaces;

import com.caoccao.javet.buddy.ts2java.ast.clazz.Ts2JavaAstClassMethod;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstClassMethod;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstClassMember;
import com.caoccao.javet.utils.SimpleFreeMarkerFormat;
import com.caoccao.javet.utils.SimpleMap;

public interface ITs2JavaAstClassMember<AST extends ISwc4jAstClassMember, Memo extends Ts2JavaMemoDynamicType>
extends ITs2JavaAst<AST, Memo> {

static ITs2JavaAstClassMember<?, ?> cast(
ITs2JavaAst<?, ?> parent,
ISwc4jAstClassMember ast,
Ts2JavaMemoDynamicType memo) {
switch (ast.getType()) {
case ClassMethod:
return new Ts2JavaAstClassMethod(parent, ast.as(Swc4jAstClassMethod.class), memo);
default:
throw new Ts2JavaAstException(
ast,
SimpleFreeMarkerFormat.format("ClassMember type ${type} is not supported.",
SimpleMap.of("type", ast.getType().name())));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,38 @@

package com.caoccao.javet.buddy.ts2java.ast.interfaces;

import com.caoccao.javet.buddy.ts2java.ast.expr.Ts2JavaAstParenExpr;
import com.caoccao.javet.buddy.ts2java.ast.expr.lit.Ts2JavaAstNumber;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.expr.Swc4jAstParenExpr;
import com.caoccao.javet.swc4j.ast.expr.lit.Swc4jAstNumber;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstExpr;
import com.caoccao.javet.utils.SimpleFreeMarkerFormat;
import com.caoccao.javet.utils.SimpleMap;

public interface ITs2JavaAstExpr<AST extends ISwc4jAstExpr, Memo extends Ts2JavaMemo>
extends ITs2JavaAstVarDeclOrExpr<AST, Memo>, ITs2JavaAstPat<AST, Memo>, ITs2JavaAstJsxExpr<AST, Memo>,
ITs2JavaAstCallee<AST, Memo>, ITs2JavaAstBlockStmtOrExpr<AST, Memo>, ITs2JavaAstAssignTarget<AST, Memo> {
static ITs2JavaAstExpr<?, ?> cast(
ITs2JavaAst<?, ?> parent,
ISwc4jAstExpr ast,
Ts2JavaMemoFunction memo) {
switch (ast.getType()) {
case Number:
return new Ts2JavaAstNumber(parent, ast.as(Swc4jAstNumber.class), null, memo);
case ParenExpr:
return new Ts2JavaAstParenExpr(parent, ast.as(Swc4jAstParenExpr.class), memo);
case BinExpr:
case Ident:
case UnaryExpr:
default:
throw new Ts2JavaAstException(
ast,
SimpleFreeMarkerFormat.format("Expr type ${type} is not supported.",
SimpleMap.of("type", ast.getType().name())));
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,29 @@
package com.caoccao.javet.buddy.ts2java.ast.interfaces;

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.buddy.ts2java.ast.stmt.Ts2JavaAstReturnStmt;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstStmt;
import com.caoccao.javet.swc4j.ast.stmt.Swc4jAstReturnStmt;
import com.caoccao.javet.utils.SimpleFreeMarkerFormat;
import com.caoccao.javet.utils.SimpleMap;

public interface ITs2JavaAstStmt<AST extends ISwc4jAstStmt, Memo extends Ts2JavaMemo>
extends ITs2JavaAstModuleItem<AST, Memo> {
static ITs2JavaAstStmt<?, ?> cast(
ITs2JavaAst<?, ?> parent,
ISwc4jAstStmt ast,
Ts2JavaMemoFunction memo) {
switch (ast.getType()) {
case ReturnStmt:
return new Ts2JavaAstReturnStmt(parent, ast.as(Swc4jAstReturnStmt.class), memo);
case VarDecl:
default:
throw new Ts2JavaAstException(
ast,
SimpleFreeMarkerFormat.format("Stmt type ${type} is not supported.",
SimpleMap.of("type", ast.getType().name())));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,12 @@
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstBlockStmtOrExpr;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstStmt;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstStmt;
import com.caoccao.javet.swc4j.ast.stmt.Swc4jAstBlockStmt;
import com.caoccao.javet.swc4j.ast.stmt.Swc4jAstReturnStmt;
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;
import java.util.stream.Collectors;

public class Ts2JavaAstBlockStmt
extends BaseTs2JavaAst<Swc4jAstBlockStmt, Ts2JavaMemoFunction>
Expand All @@ -44,22 +39,9 @@ public Ts2JavaAstBlockStmt(
Swc4jAstBlockStmt ast,
Ts2JavaMemoFunction memo) {
super(parent, ast, memo);
stmts = new ArrayList<>();
for (ISwc4jAstStmt stmt : ast.getStmts()) {
switch (stmt.getType()) {
case VarDecl:
// TODO
break;
case ReturnStmt:
stmts.add(new Ts2JavaAstReturnStmt(this, stmt.as(Swc4jAstReturnStmt.class), memo));
break;
default:
throw new Ts2JavaAstException(
stmt,
SimpleFreeMarkerFormat.format("BlockStmt type ${type} is not supported.",
SimpleMap.of("type", stmt.getType().name())));
}
}
stmts = ast.getStmts().stream()
.map(stmt -> ITs2JavaAstStmt.cast(this, stmt, memo))
.collect(Collectors.toList());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,12 @@
package com.caoccao.javet.buddy.ts2java.ast.stmt;

import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.expr.Ts2JavaAstParenExpr;
import com.caoccao.javet.buddy.ts2java.ast.expr.lit.Ts2JavaAstNumber;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstExpr;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstStmt;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.buddy.ts2java.compiler.JavaClassCast;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaAstException;
import com.caoccao.javet.swc4j.ast.expr.Swc4jAstParenExpr;
import com.caoccao.javet.swc4j.ast.expr.lit.Swc4jAstNumber;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstExpr;
import com.caoccao.javet.swc4j.ast.stmt.Swc4jAstReturnStmt;
import com.caoccao.javet.utils.SimpleFreeMarkerFormat;
import com.caoccao.javet.utils.SimpleMap;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.implementation.Implementation;
import net.bytebuddy.implementation.bytecode.member.MethodReturn;
Expand All @@ -48,35 +40,7 @@ public Ts2JavaAstReturnStmt(
Swc4jAstReturnStmt ast,
Ts2JavaMemoFunction memo) {
super(parent, ast, memo);
if (ast.getArg().isPresent()) {
ISwc4jAstExpr astExpr = ast.getArg().get();
ITs2JavaAstExpr<?, ?> arg = null;
switch (astExpr.getType()) {
case BinExpr:
// TODO
break;
case Number:
arg = new Ts2JavaAstNumber(this, astExpr.as(Swc4jAstNumber.class), null, memo);
break;
case Ident:
// TODO
break;
case ParenExpr:
arg = new Ts2JavaAstParenExpr(this, astExpr.as(Swc4jAstParenExpr.class), memo);
break;
case UnaryExpr:
// TODO
break;
default:
throw new Ts2JavaAstException(
astExpr,
SimpleFreeMarkerFormat.format("ReturnStmt arg type ${argType} is not supported.",
SimpleMap.of("argType", astExpr.getType().name())));
}
this.arg = Optional.ofNullable(arg);
} else {
arg = Optional.empty();
}
arg = ast.getArg().map(arg -> ITs2JavaAstExpr.cast(this, arg, memo));
}

@Override
Expand Down

0 comments on commit d1303dc

Please sign in to comment.