Skip to content

Commit

Permalink
🦄 refactor: Resign ast 4
Browse files Browse the repository at this point in the history
  • Loading branch information
caoccao committed Nov 27, 2024
1 parent 697beb4 commit 44340ae
Show file tree
Hide file tree
Showing 17 changed files with 120 additions and 104 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,34 @@
package com.caoccao.javet.buddy.ts2java.ast;

import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAst;

import java.util.Objects;

public abstract class BaseTs2JavaAst<AST extends ISwc4jAst>
implements ITs2JavaAst<AST> {
public abstract class BaseTs2JavaAst<AST extends ISwc4jAst, Memo extends Ts2JavaMemo>
implements ITs2JavaAst<AST, Memo> {
protected AST ast;
protected Memo memo;
protected ITs2JavaAst<?, ?> parent;

public BaseTs2JavaAst(AST ast) {
public BaseTs2JavaAst(ITs2JavaAst<?, ?> parent, AST ast, Memo memo) {
this.ast = Objects.requireNonNull(ast);
this.memo = Objects.requireNonNull(memo);
this.parent = parent;
}

@Override
public AST getAst() {
return ast;
}

@Override
public Memo getMemo() {
return memo;
}

public ITs2JavaAst<?, ?> getParent() {
return parent;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@

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

import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAstWithBuilderStore;
import com.caoccao.javet.buddy.ts2java.ast.Ts2JavaDynamicTypeBuilderStore;
import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAst;
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;
Expand All @@ -30,16 +31,16 @@
import java.util.List;

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

public Ts2JavaAstClass(Ts2JavaDynamicTypeBuilderStore builderStore, Swc4jAstClass ast) {
super(builderStore, ast);
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(builderStore, classMember.as(Swc4jAstClassMethod.class)));
body.add(new Ts2JavaAstClassMethod(this, classMember.as(Swc4jAstClassMethod.class), memo));
break;
default:
throw new Ts2JavaAstException(
Expand All @@ -55,7 +56,7 @@ public void compile() {
body.forEach(ITs2JavaAstClassMember::compile);
}

public List<ITs2JavaAstClassMember<?>> getBody() {
public List<ITs2JavaAstClassMember<?, ?>> getBody() {
return body;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@

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

import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAstWithBuilderStore;
import com.caoccao.javet.buddy.ts2java.ast.Ts2JavaDynamicTypeBuilderStore;
import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAst;
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.Swc4jAstClassMethod;
import com.caoccao.javet.swc4j.ast.enums.Swc4jAstAccessibility;
Expand All @@ -28,12 +29,12 @@
import com.caoccao.javet.utils.SimpleMap;

public class Ts2JavaAstClassMethod
extends BaseTs2JavaAstWithBuilderStore<Swc4jAstClassMethod>
implements ITs2JavaAstClassMember<Swc4jAstClassMethod> {
extends BaseTs2JavaAst<Swc4jAstClassMethod, Ts2JavaMemoDynamicType>
implements ITs2JavaAstClassMember<Swc4jAstClassMethod, Ts2JavaMemoDynamicType> {
protected final Ts2JavaAstFunction function;

public Ts2JavaAstClassMethod(Ts2JavaDynamicTypeBuilderStore builderStore, Swc4jAstClassMethod ast) {
super(builderStore, ast);
public Ts2JavaAstClassMethod(ITs2JavaAst<?, ?> parent, Swc4jAstClassMethod ast, Ts2JavaMemoDynamicType memo) {
super(parent, ast, memo);
if (ast.isStatic()) {
throw new Ts2JavaAstException(
ast,
Expand All @@ -55,7 +56,7 @@ public Ts2JavaAstClassMethod(Ts2JavaDynamicTypeBuilderStore builderStore, Swc4jA
String name = ast.getKey().as(Swc4jAstIdentName.class).getSym();
boolean _static = ast.isStatic();
Swc4jAstAccessibility accessibility = ast.getAccessibility().orElse(Swc4jAstAccessibility.Public);
function = new Ts2JavaAstFunction(builderStore, ast.getFunction(), name, _static, accessibility);
function = new Ts2JavaAstFunction(this, ast.getFunction(), memo, name, _static, accessibility);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,32 +16,37 @@

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

import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAstWithBuilderStore;
import com.caoccao.javet.buddy.ts2java.ast.Ts2JavaDynamicTypeBuilderStore;
import com.caoccao.javet.buddy.ts2java.ast.BaseTs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.buddy.ts2java.ast.stmt.Ts2JavaAstBlockStmt;
import com.caoccao.javet.swc4j.ast.clazz.Swc4jAstFunction;
import com.caoccao.javet.swc4j.ast.enums.Swc4jAstAccessibility;

import java.util.Optional;

public class Ts2JavaAstFunction
extends BaseTs2JavaAstWithBuilderStore<Swc4jAstFunction> {
extends BaseTs2JavaAst<Swc4jAstFunction, Ts2JavaMemoDynamicType> {
protected final boolean _static;
protected final Swc4jAstAccessibility accessibility;
protected final Optional<Ts2JavaAstBlockStmt> body;
protected final Ts2JavaMemoFunction memoFunction;
protected final String name;

public Ts2JavaAstFunction(
Ts2JavaDynamicTypeBuilderStore builderStore,
ITs2JavaAst<?, ?> parent,
Swc4jAstFunction ast,
Ts2JavaMemoDynamicType memo,
String name,
boolean _static,
Swc4jAstAccessibility accessibility) {
super(builderStore, ast);
super(parent, ast, memo);
this._static = _static;
this.accessibility = accessibility;
memoFunction = new Ts2JavaMemoFunction();
this.name = name;
body = ast.getBody().map(Ts2JavaAstBlockStmt::new);
body = ast.getBody().map(stmt -> new Ts2JavaAstBlockStmt(this, stmt, memoFunction));
}

@Override
Expand All @@ -57,6 +62,10 @@ public Optional<Ts2JavaAstBlockStmt> getBody() {
return body;
}

public Ts2JavaMemoFunction getMemoFunction() {
return memoFunction;
}

public String getName() {
return name;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

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

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.buddy.ts2java.exceptions.Ts2JavaException;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAst;
import com.caoccao.javet.utils.SimpleFreeMarkerFormat;
Expand All @@ -24,7 +25,7 @@
import net.bytebuddy.implementation.bytecode.StackManipulation;
import net.bytebuddy.jar.asm.MethodVisitor;

public interface ITs2JavaAst<AST extends ISwc4jAst>
public interface ITs2JavaAst<AST extends ISwc4jAst, Memo extends Ts2JavaMemo>
extends StackManipulation {
@Override
default Size apply(MethodVisitor methodVisitor, Implementation.Context context) {
Expand All @@ -37,6 +38,8 @@ default Size apply(MethodVisitor methodVisitor, Implementation.Context context)

AST getAst();

Memo getMemo();

@Override
default boolean isValid() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@

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

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstBlockStmtOrExpr;

public interface ITs2JavaAstBlockStmtOrExpr<AST extends ISwc4jAstBlockStmtOrExpr>
extends ITs2JavaAst<AST> {
public interface ITs2JavaAstBlockStmtOrExpr<AST extends ISwc4jAstBlockStmtOrExpr, Memo extends Ts2JavaMemo>
extends ITs2JavaAst<AST, Memo> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@

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

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstClassMember;

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

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@

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

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoDynamicType;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstDecl;

public interface ITs2JavaAstDecl<AST extends ISwc4jAstDecl>
extends ITs2JavaAstStmt<AST> {
public interface ITs2JavaAstDecl<AST extends ISwc4jAstDecl, Memo extends Ts2JavaMemoDynamicType>
extends ITs2JavaAstStmt<AST, Memo> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@

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

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstModuleItem;

public interface ITs2JavaAstModuleItem<AST extends ISwc4jAstModuleItem>
extends ITs2JavaAst<AST> {
public interface ITs2JavaAstModuleItem<AST extends ISwc4jAstModuleItem, Memo extends Ts2JavaMemo>
extends ITs2JavaAst<AST, Memo> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@

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

import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemo;
import com.caoccao.javet.swc4j.ast.interfaces.ISwc4jAstStmt;

public interface ITs2JavaAstStmt<AST extends ISwc4jAstStmt>
extends ITs2JavaAstModuleItem<AST> {
public interface ITs2JavaAstStmt<AST extends ISwc4jAstStmt, Memo extends Ts2JavaMemo>
extends ITs2JavaAstModuleItem<AST, Memo> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@
* limitations under the License.
*/

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

import com.caoccao.javet.buddy.ts2java.ast.Ts2JavaDynamicTypeBuilderStore;

public interface ITs2JavaBuilderStore {
Ts2JavaDynamicTypeBuilderStore getBuilderStore();
public abstract class Ts2JavaMemo {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024. caoccao.com Sam Cao
* 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.
Expand All @@ -14,16 +14,16 @@
* limitations under the License.
*/

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

import net.bytebuddy.dynamic.DynamicType;

import java.util.Objects;

public final class Ts2JavaDynamicTypeBuilderStore {
private DynamicType.Builder<?> builder;
public class Ts2JavaMemoDynamicType extends Ts2JavaMemo {
protected DynamicType.Builder<?> builder;

public Ts2JavaDynamicTypeBuilderStore(DynamicType.Builder<?> builder) {
public Ts2JavaMemoDynamicType(DynamicType.Builder<?> builder) {
setBuilder(builder);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* 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.memo;

public class Ts2JavaMemoFunction extends Ts2JavaMemo {
}
Loading

0 comments on commit 44340ae

Please sign in to comment.