From b1204fe88f83da3cdcab07bfcc4fa0e24f56cc78 Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 17:36:57 +0800 Subject: [PATCH 1/8] add baseobject in grammer Signed-off-by: wangshi --- .../src/main/java/grammar/ClassObj.java | 46 ++++-- .../src/main/java/grammar/EnumObj.java | 47 ++++-- .../src/main/java/grammar/FuncObj.java | 45 +++++- .../src/main/java/grammar/GBaseObject.java | 87 ++++++++++ .../main/java/grammar/InterfaceObject.java | 151 ++++++++++++++++++ .../src/main/java/grammar/ParamObj.java | 2 +- .../src/main/java/grammar/ParseObj.java | 2 +- .../src/main/java/grammar/StructObj.java | 2 +- .../src/main/java/grammar/TypeObj.java | 48 ++++-- .../src/main/java/grammar/UnionObj.java | 2 +- 10 files changed, 392 insertions(+), 40 deletions(-) create mode 100644 src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java create mode 100644 src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java index ada22c3b..2e8ec924 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java @@ -15,6 +15,9 @@ package grammar; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + /** *

类名:该类用于xxx

* description class grammar @@ -24,21 +27,24 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class ClassObj { +public class ClassObj extends GBaseObject { private String name; private String alias; - private ParamObj[] paramList; - private FuncObj[] funcList; + private List paramList; + private List funcList; /** * 构造函数 */ - public ClassObj() {} + public ClassObj() { + this.paramList = new CopyOnWriteArrayList<>(); + this.funcList = new CopyOnWriteArrayList<>(); + } /** * 构造函数 */ - public ClassObj(String nv, String av, ParamObj[] pl, FuncObj[] fl) { + public ClassObj(String nv, String av, List pl, List fl) { this.name = nv; this.alias = av; this.paramList = pl; @@ -86,7 +92,7 @@ public class ClassObj { * * @param funcList 方法列表 */ - public void setFuncList(FuncObj[] funcList) { + public void setFuncList(List funcList) { this.funcList = funcList; } @@ -95,7 +101,7 @@ public class ClassObj { * * @return 方法列表 */ - public FuncObj[] getFuncList() { + public List getFuncList() { return funcList; } @@ -104,7 +110,7 @@ public class ClassObj { * * @param paramList 参数列表 */ - public void setParamList(ParamObj[] paramList) { + public void setParamList(List paramList) { this.paramList = paramList; } @@ -113,7 +119,29 @@ public class ClassObj { * * @return 方法列表 */ - public ParamObj[] getParamList() { + public List getParamList() { return paramList; } + + public void addParam(ParamObj po) { + this.paramList.add(po); + } + + public void addParam(String name, String type) { + ParamObj po = new ParamObj(); + po.setType(type); + po.setName(name); + this.paramList.add(po); + } + + public void addFunc(FuncObj fo) { + this.funcList.add(fo); + } + + public void addFunc(String name, String ret, List poList) { + FuncObj fo = new FuncObj(); + fo.setName(name); + fo.setRetValue(ret); + fo.setParamList(poList); + } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/EnumObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/EnumObj.java index 4dcc9fec..fb7a8509 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/EnumObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/EnumObj.java @@ -15,6 +15,11 @@ package grammar; +import utils.TsToken; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + /** *

类名:该类用于xxx

* description enum grammar @@ -24,16 +29,20 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class EnumObj { +public class EnumObj extends GBaseObject { private String name; private String alias; - private String[] memberList; - private String[] valueList; + private List memberList; + private List valueList; /** * 构造函数 */ - public EnumObj() {} + public EnumObj() { + this.token = TsToken.TS_TOKEN_ENUM; + this.memberList = new CopyOnWriteArrayList<>(); + this.valueList = new CopyOnWriteArrayList<>(); + } /** * 构造函数 @@ -43,7 +52,7 @@ public class EnumObj { * @param ml 成员 * @param vl 值 */ - public EnumObj(String nv, String av, String[] ml, String[] vl) { + public EnumObj(String nv, String av, List ml, List vl) { this.name = nv; this.alias = av; this.memberList = ml; @@ -91,7 +100,7 @@ public class EnumObj { * * @return 成员列表 */ - public String[] getMemberList() { + public List getMemberList() { return memberList; } @@ -100,7 +109,7 @@ public class EnumObj { * * @param memberList 成员列表 */ - public void setMemberList(String[] memberList) { + public void setMemberList(List memberList) { this.memberList = memberList; } @@ -109,7 +118,7 @@ public class EnumObj { * * @return 值列表 */ - public String[] getValueList() { + public List getValueList() { return valueList; } @@ -118,7 +127,27 @@ public class EnumObj { * * @param valueList 值列表 */ - public void setValueList(String[] valueList) { + public void setValueList(List valueList) { this.valueList = valueList; } + + /** + * 添加成员 + * + * @param memName 成员名称 + */ + public void addMemberItem(String memName) { + this.memberList.add(memName); + } + + /** + * 添加成员值 + * + * @param memValue 成员值 + */ + public void addMemberValue(String memValue) { + this.valueList.add(memValue); + } + + } diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java index 76174fa6..ac32eacc 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java @@ -15,6 +15,11 @@ package grammar; +import utils.TsToken; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + /** *

类名:该类用于xxx

* description function of grammar @@ -24,16 +29,20 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class FuncObj { +public class FuncObj extends GBaseObject { private String type; private String name; private String retValue; - private ParamObj[] paramList; + private List paramList; /** * 构造函数 */ - public FuncObj() {} + public FuncObj() { + this.token = TsToken.TS_TOKEN_FUNCTION; + + this.paramList = new CopyOnWriteArrayList<>(); + } /** * 构造函数 @@ -43,7 +52,9 @@ public class FuncObj { * @param rv 返回值 * @param pl 参数 */ - public FuncObj(String tv, String nv, String rv, ParamObj[] pl) { + public FuncObj(String tv, String nv, String rv, List pl) { + this.token = TsToken.TS_TOKEN_FUNCTION; + this.type = tv; this.name = nv; this.retValue = rv; @@ -109,7 +120,7 @@ public class FuncObj { * * @param paramList 参数 */ - public void setParamList(ParamObj[] paramList) { + public void setParamList(List paramList) { this.paramList = paramList; } @@ -118,7 +129,29 @@ public class FuncObj { * * @return 参数 */ - public ParamObj[] getParamList() { + public List getParamList() { return paramList; } + + /** + * 增加函数参数 + * + * @param po 参数 + */ + public void addParam(ParamObj po) { + this.paramList.add(po); + } + + /** + * 增加函数参数 + * + * @param name 参数名称 + * @param type 参数类型 + */ + public void addParam(String name, String type) { + ParamObj po = new ParamObj(); + po.setName(name); + po.setType(type); + this.paramList.add(po); + } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java new file mode 100644 index 00000000..87eef612 --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 grammar; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import utils.Constants; + +/** + *

类名:该类用于xxx

+ * description grammer base object + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +public class GBaseObject { + /** + * 解析未知代码 + */ + protected int languageType = Constants.PARSE_UNKNOWN_LANGUAGE; + + protected String token = ""; + + /** + * 获取 language type + * + * @return 解析语言类型 + */ + public int getLanguageType() { + return languageType; + } + + /** + * 设置 language type + * + * @param languageType 解析语言类型 + */ + public void setLanguageType(int languageType) { + this.languageType = languageType; + } + + /** + * 获取 token + * + * @return token 关键字 + */ + public String getToken() { + return token; + } + + /** + * 设置 token + * + * @param token 关键字 + */ + public void setToken(String token) { + this.token = token; + } + + /** + * 转JSON字符串 + * + * @return json 字符串 + */ + public String toJsonString() { + // 创建 Gson 实例并启用格式化 + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + String json = gson.toJson(this); + return json; + } +} diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java new file mode 100644 index 00000000..29f31ac9 --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 grammar; + +import utils.TsToken; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + *

类名:该类用于xxx

+ * description interface grammar + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +public class InterfaceObject extends GBaseObject { + private String name; + private String alias; + private List paramList; + private List funcList; + + /** + * 构造函数 + */ + public InterfaceObject() { + this.token = TsToken.TS_TOKEN_INTERFACE; + + this.paramList = new CopyOnWriteArrayList<>(); + this.funcList = new CopyOnWriteArrayList<>(); + } + + /** + * 构造函数 + */ + public InterfaceObject(String nv, String av, List pl, List fl) { + this.name = nv; + this.alias = av; + this.paramList = pl; + this.funcList = fl; + } + + /** + * 设名字 + * + * @param name 名字 + */ + public void setName(String name) { + this.name = name; + } + + /** + * 读名字 + * + * @return name 名字 + */ + public String getName() { + return name; + } + + /** + * 设置别名 + * + * @param alias 别名 + */ + public void setAlias(String alias) { + this.alias = alias; + } + + /** + * 读取别名 + * + * @return 别名 + */ + public String getAlias() { + return alias; + } + + /** + * 设置方法 + * + * @param funcList 方法列表 + */ + public void setFuncList(List funcList) { + this.funcList = funcList; + } + + /** + * 获取方法列表 + * + * @return 方法列表 + */ + public List getFuncList() { + return funcList; + } + + /** + * 设置参数 + * + * @param paramList 参数列表 + */ + public void setParamList(List paramList) { + this.paramList = paramList; + } + + /** + * 读取方法 + * + * @return 方法列表 + */ + public List getParamList() { + return paramList; + } + + public void addParam(ParamObj po) { + this.paramList.add(po); + } + + public void addParam(String name, String type) { + ParamObj po = new ParamObj(); + po.setType(type); + po.setName(name); + this.paramList.add(po); + } + + public void addFunc(FuncObj fo) { + this.funcList.add(fo); + } + + public void addFunc(String name, String ret, List poList) { + FuncObj fo = new FuncObj(); + fo.setName(name); + fo.setRetValue(ret); + fo.setParamList(poList); + } +} diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java index 68328928..e8a0ab54 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ParamObj.java @@ -24,7 +24,7 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class ParamObj { +public class ParamObj extends GBaseObject { private String type; private String name; private int arraySize; diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ParseObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ParseObj.java index 6f35ae50..62d6bfcf 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ParseObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ParseObj.java @@ -24,7 +24,7 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class ParseObj { +public class ParseObj extends GBaseObject { private EnumObj[] enumList; private UnionObj[] unionList; private StructObj[] structList; diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/StructObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/StructObj.java index 1661708c..c3760d26 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/StructObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/StructObj.java @@ -24,7 +24,7 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class StructObj { +public class StructObj extends GBaseObject { private String name; private String alias; private ParamObj[] memberList; diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/TypeObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/TypeObj.java index 8233722e..559a5d74 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/TypeObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/TypeObj.java @@ -15,6 +15,11 @@ package grammar; +import utils.TsToken; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + /** *

类名:该类用于xxx

* description type grammar @@ -24,17 +29,23 @@ package grammar; * @version 1.0 * @since 2025-02-28 */ -public class TypeObj { +public class TypeObj extends GBaseObject { private String name; private String alias; - private ParamObj[] paramList; - private FuncObj[] funcList; - private String[] typeList; + private List paramList; + private List funcList; + private List typeList; /** * 构造函数 */ - public TypeObj() {} + public TypeObj() { + this.token = TsToken.TS_TOKEN_TYPE; + + this.paramList = new CopyOnWriteArrayList<>(); + this.funcList = new CopyOnWriteArrayList<>(); + this.typeList = new CopyOnWriteArrayList<>(); + } /** * 构造函数 @@ -45,7 +56,11 @@ public class TypeObj { * @param fl 方法 * @param tl 类型 */ - public TypeObj(String nv, String av, ParamObj[] pl, FuncObj[] fl, String[] tl) { + public TypeObj(String nv, + String av, + List pl, + List fl, + List tl) { this.name = nv; this.alias = av; this.paramList = pl; @@ -94,7 +109,7 @@ public class TypeObj { * * @return 参数 */ - public ParamObj[] getParamList() { + public List getParamList() { return paramList; } @@ -103,7 +118,7 @@ public class TypeObj { * * @param paramList 参数 */ - public void setParamList(ParamObj[] paramList) { + public void setParamList(List paramList) { this.paramList = paramList; } @@ -112,7 +127,7 @@ public class TypeObj { * * @return 类型 */ - public String[] getTypeList() { + public List getTypeList() { return typeList; } @@ -120,7 +135,7 @@ public class TypeObj { * 设置类型 * @param typeList 类型 */ - public void setTypeList(String[] typeList) { + public void setTypeList(List typeList) { this.typeList = typeList; } @@ -129,7 +144,7 @@ public class TypeObj { * * @return 方法 */ - public FuncObj[] getFuncList() { + public List getFuncList() { return funcList; } @@ -138,7 +153,16 @@ public class TypeObj { * * @param funcList 方法 */ - public void setFuncList(FuncObj[] funcList) { + public void setFuncList(List funcList) { this.funcList = funcList; } + + /** + * 设置value + * + * @param value 定义值 + */ + public void addTypeValue(String value) { + this.typeList.add(value); + } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/UnionObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/UnionObj.java index 47d50e3d..73f8dfef 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/UnionObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/UnionObj.java @@ -26,7 +26,7 @@ import kotlinx.html.S; * @version 1.0 * @since 2025-02-28 */ -public class UnionObj { +public class UnionObj extends GBaseObject { private String name; private String alias; private ParamObj[] memList; -- Gitee From ba3aa6305fd4f0646f0a22907d8221f48a396f77 Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 17:37:28 +0800 Subject: [PATCH 2/8] add token Signed-off-by: wangshi --- .../src/main/java/utils/Constants.java | 5 + .../ohosgen/src/main/java/utils/TsToken.java | 349 ++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java diff --git a/src/intellij_plugin/ohosgen/src/main/java/utils/Constants.java b/src/intellij_plugin/ohosgen/src/main/java/utils/Constants.java index af26815d..42eb455c 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/utils/Constants.java +++ b/src/intellij_plugin/ohosgen/src/main/java/utils/Constants.java @@ -25,6 +25,11 @@ package utils; * @version 1.0 */ public class Constants { + /** + * 解析未知代码 + */ + public static final int PARSE_UNKNOWN_LANGUAGE = -1; + /** * 解析c/cpp代码 */ diff --git a/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java b/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java new file mode 100644 index 00000000..e7caba44 --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java @@ -0,0 +1,349 @@ +package utils; + +/** + *

类名:该类用于xxx

+ * description typescript token + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ + +public class TsToken { + /** + * enum token + */ + public static final String TS_TOKEN_ENUM = "enum"; + + /** + * class token + */ + public static final String TS_TOKEN_CLASS = "class"; + + /** + * extends token + */ + public static final String TS_TOKEN_EXTENDS = "extends"; + + /** + * super token + */ + public static final String TS_TOKEN_SUPER = "super"; + + /** + * const token + */ + public static final String TS_TOKEN_CONST = "const"; + + /** + * export token + */ + public static final String TS_TOKEN_EXPORT = "export"; + + /** + * import token + */ + public static final String TS_TOKEN_IMPORT = "import"; + + /** + * implements token + */ + public static final String TS_TOKEN_IMPLEMENT = "implements"; + + /** + * let token + */ + public static final String TS_TOKEN_LET = "let"; + + /** + * private token + */ + public static final String TS_TOKEN_PRIVATE = "private"; + + /** + * public token + */ + public static final String TS_TOKEN_PUBLIC = "public"; + + /** + * interface token + */ + public static final String TS_TOKEN_INTERFACE = "interface"; + + /** + * package token + */ + public static final String TS_TOKEN_PACKAGE = "package"; + + /** + * protected token + */ + public static final String TS_TOKEN_PROTECTED = "protected"; + + /** + * static token + */ + public static final String TS_TOKEN_STATIC = "static"; + + /** + * any token + */ + public static final String TS_TOKEN_ANY = "any"; + + /** + * number token + */ + public static final String TS_TOKEN_NUMBER = "number"; + + /** + * never token + */ + public static final String TS_TOKEN_NEVER = "never"; + + /** + * boolean token + */ + public static final String TS_TOKEN_BOOLEAN = "boolean"; + + /** + * string token + */ + public static final String TS_TOKEN_STRING = "string"; + + /** + * unique token + */ + public static final String TS_TOKEN_UNIQUE = "unique"; + + /** + * symbol token + */ + public static final String TS_TOKEN_SYMBOL = "symbol"; + + /** + * undefined token + */ + public static final String TS_TOKEN_UNDEFINED = "undefined"; + + /** + * object token + */ + public static final String TS_TOKEN_OBJECT = "object"; + + /** + * of token + */ + public static final String TS_TOKEN_OF = "of"; + + /** + * keyof token + */ + public static final String TS_TOKEN_KEYOF = "keyof"; + + /** + * type token + */ + public static final String TS_TOKEN_TYPE = "type"; + + /** + * constructor token + */ + public static final String TS_TOKEN_CONSTRUCTOR = "constructor"; + + /** + * namespace token + */ + public static final String TS_TOKEN_NAMESPACE = "namespace"; + + /** + * require token + */ + public static final String TS_TOKEN_REQUIRE = "require"; + + /** + * module token + */ + public static final String TS_TOKEN_MODULE = "module"; + + /** + * declare token + */ + public static final String TS_TOKEN_DECLARE = "declare"; + + /** + * abstract token + */ + public static final String TS_TOKEN_ABSTRACT = "abstract"; + + /** + * IS token + */ + public static final String TS_TOKEN_IS = "is"; + + /** + * null token + */ + public static final String TS_TOKEN_NULL = "null"; + + /** + * break token + */ + public static final String TS_TOKEN_BREAK = "break"; + + /** + * do token + */ + public static final String TS_TOKEN_DO = "do"; + + /** + * instanceof token + */ + public static final String TS_TOKEN_INSTANCEOF = "instanceof"; + + /** + * typeof token + */ + public static final String TS_TOKEN_TYPEOF = "typeof"; + + /** + * case token + */ + public static final String TS_TOKEN_CASE = "case"; + + /** + * else token + */ + public static final String TS_TOKEN_ELSE = "else"; + + /** + * new token + */ + public static final String TS_TOKEN_NEW = "new"; + + /** + * var token + */ + public static final String TS_TOKEN_VAR = "var"; + + /** + * catch token + */ + public static final String TS_TOKEN_CATCH = "catch"; + + /** + * finally token + */ + public static final String TS_TOKEN_FINALLY = "finally"; + + /** + * return token + */ + public static final String TS_TOKEN_RETURN = "return"; + + /** + * void token + */ + public static final String TS_TOKEN_VOID = "void"; + + /** + * continue token + */ + public static final String TS_TOKEN_CONTINUE = "continue"; + + /** + * for token + */ + public static final String TS_TOKEN_FOR = "for"; + + /** + * switch token + */ + public static final String TS_TOKEN_SWITCH = "switch"; + + /** + * while token + */ + public static final String TS_TOKEN_WHILE = "while"; + + /** + * debugger token + */ + public static final String TS_TOKEN_DEBUGGER = "debugger"; + + /** + * function token + */ + public static final String TS_TOKEN_FUNCTION = "function"; + + /** + * this token + */ + public static final String TS_TOKEN_THIS = "this"; + + /** + * with token + */ + public static final String TS_TOKEN_WITH = "with"; + + /** + * default token + */ + public static final String TS_TOKEN_DEFAULT = "default"; + + /** + * if token + */ + public static final String TS_TOKEN_IF = "if"; + + /** + * throw token + */ + public static final String TS_TOKEN_THROW = "throw"; + + /** + * delete token + */ + public static final String TS_TOKEN_DELETE = "delete"; + + /** + * in token + */ + public static final String TS_TOKEN_IN = "in"; + + /** + * try token + */ + public static final String TS_TOKEN_TRY = "try"; + + /** + * as token + */ + public static final String TS_TOKEN_AS = "as"; + + /** + * from token + */ + public static final String TS_TOKEN_FROM = "from"; + + /** + * readonly token + */ + public static final String TS_TOKEN_READONLY = "readonly"; + + /** + * async token + */ + public static final String TS_TOKEN_ASYNC = "async"; + + /** + * await token + */ + public static final String TS_TOKEN_AWAIT = "await"; + + /** + * yield token + */ + public static final String TS_TOKEN_YIELD = "yield"; + +} -- Gitee From aa9e1ae350030a0246fa6bb1652cc5677d7a5bf0 Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 17:37:56 +0800 Subject: [PATCH 3/8] add event Signed-off-by: wangshi --- .../src/main/java/event/CustomEvent.java | 62 +++++++++++++ .../main/java/event/CustomEventListener.java | 36 ++++++++ .../src/main/java/event/EventEmitter.java | 86 +++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java create mode 100644 src/intellij_plugin/ohosgen/src/main/java/event/CustomEventListener.java create mode 100644 src/intellij_plugin/ohosgen/src/main/java/event/EventEmitter.java diff --git a/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java b/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java new file mode 100644 index 00000000..ea78a503 --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 event; + +import java.util.EventObject; + +/** + *

类名:该类用于xxx

+ * description custom event + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +public class CustomEvent extends EventObject { + private String message; + + /** + * Constructs a prototypical Event. + * + * @param source + * the object on which the Event initially occurred + * @throws IllegalArgumentException + * if source is null + */ + public CustomEvent(Object source, String message) { + super(source); + this.message = message; + } + + /** + * 获取消息 + * + * @return message 消息 + */ + public String getMessage() { + return message; + } + + /** + * 设置消息 + * + * @param message 消息 + */ + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/intellij_plugin/ohosgen/src/main/java/event/CustomEventListener.java b/src/intellij_plugin/ohosgen/src/main/java/event/CustomEventListener.java new file mode 100644 index 00000000..31c97b4f --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/main/java/event/CustomEventListener.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 event; + +import java.util.EventListener; + +/** + *

类名:该类用于xxx

+ * description event listener + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +public interface CustomEventListener extends EventListener { + /** + * 处理事件 + * + * @param event 事件 + */ + void handleEvent(CustomEvent event); +} diff --git a/src/intellij_plugin/ohosgen/src/main/java/event/EventEmitter.java b/src/intellij_plugin/ohosgen/src/main/java/event/EventEmitter.java new file mode 100644 index 00000000..b6bbb6e6 --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/main/java/event/EventEmitter.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 event; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + *

类名:该类用于xxx

+ * description event emitter + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +public class EventEmitter { + // 存储事件类型与对应的监听器列表(线程安全) + private ConcurrentHashMap> eventMap = new ConcurrentHashMap<>(); + + /** + * 注册监听器(on) + * + * @param eventType 事件类型 + * @param listener 事件监听 + */ + public void on(String eventType, CustomEventListener listener) { + eventMap.computeIfAbsent(eventType, k -> new CopyOnWriteArrayList<>()).add(listener); + } + + /** + * 单次监听 + * + * @param eventType 事件类型 + * @param listener 事件监听 + */ + public void once(String eventType, CustomEventListener listener) { + CustomEventListener wrapper = new CustomEventListener() { + @Override + public void handleEvent(CustomEvent event) { + listener.handleEvent(event); + off(eventType, this); // 执行后自动移除监听 + } + }; + on(eventType, wrapper); + } + + /** + * 触发事件(emit) + * + * @param eventType 事件类型 + * @param event 事件 + */ + public void emit(String eventType, CustomEvent event) { + CopyOnWriteArrayList listeners = eventMap.get(eventType); + if (listeners != null) { + listeners.forEach(listener -> listener.handleEvent(event)); + } + } + + /** + * 移除监听器(off) + * + * @param eventType 事件类型 + * @param listener 事件监听 + */ + public void off(String eventType, CustomEventListener listener) { + CopyOnWriteArrayList listeners = eventMap.get(eventType); + if (listeners != null) { + listeners.remove(listener); + } + } +} -- Gitee From da8fc8d0cdfb542112927e3c1fbcb2b21d9c63b0 Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 17:38:16 +0800 Subject: [PATCH 4/8] add event Signed-off-by: wangshi --- .../src/test/java/event/CustomEventTest.java | 50 ++++++++++++ .../src/test/java/event/EventEmitterTest.java | 78 +++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/intellij_plugin/ohosgen/src/test/java/event/CustomEventTest.java create mode 100644 src/intellij_plugin/ohosgen/src/test/java/event/EventEmitterTest.java diff --git a/src/intellij_plugin/ohosgen/src/test/java/event/CustomEventTest.java b/src/intellij_plugin/ohosgen/src/test/java/event/CustomEventTest.java new file mode 100644 index 00000000..9a07c8c3 --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/test/java/event/CustomEventTest.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 event; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +/** + *

类名:该类用于xxx

+ * description + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +class CustomEventTest { + + @BeforeEach + void setUp() { + } + + @AfterEach + void tearDown() { + } + + @Test + void getMessage() { + } + + @Test + void setMessage() { + } +} \ No newline at end of file diff --git a/src/intellij_plugin/ohosgen/src/test/java/event/EventEmitterTest.java b/src/intellij_plugin/ohosgen/src/test/java/event/EventEmitterTest.java new file mode 100644 index 00000000..50b8fdbd --- /dev/null +++ b/src/intellij_plugin/ohosgen/src/test/java/event/EventEmitterTest.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 event; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.EventListener; + +import static org.junit.jupiter.api.Assertions.*; + +/** + *

类名:该类用于xxx

+ * description + * + * @author Administrator + * date 2025-02-28 + * @version 1.0 + * @since 2025-02-28 + */ +class EventEmitterTest { + + @BeforeEach + void setUp() { + } + + @AfterEach + void tearDown() { + } + + @Test + void testEmit() { + EventEmitter emitter = new EventEmitter(); + + // 注册监听器 + emitter.on("message", +event -> { + System.out.println("收到消息:" + event.getMessage()); + assertTrue(true); + } + ); + + // 触发事件 + CustomEvent event = new CustomEvent(emitter, "Hello World"); + emitter.emit("message", event); + } + + @Test + void on() { + + } + + @Test + void once() { + } + + @Test + void emit() { + } + + @Test + void off() { + } +} \ No newline at end of file -- Gitee From c3e5143ba5c0655ded08c328b4b206edc140e6dd Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 17:39:50 +0800 Subject: [PATCH 5/8] add parse obj Signed-off-by: wangshi --- .../src/main/java/parse/ParseBase.java | 19 ++- .../ohosgen/src/main/java/parse/ParseC.java | 28 ++-- .../src/main/java/parse/ParseTask.java | 1 + .../src/main/java/parse/ParseTaskInfo.java | 59 ++++++- .../ohosgen/src/main/java/parse/ParseTs.java | 149 ++++++++++++++++-- 5 files changed, 218 insertions(+), 38 deletions(-) diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java index 0be7e4e8..dbc6fb49 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java @@ -147,9 +147,11 @@ public abstract class ParseBase { /** * 解析enum * + * @param pi2 解析结果 * @return enum */ - protected EnumObj[] parseEnum() { + protected EnumObj[] parseEnum(ParseTaskInfo pi2) { + System.out.println("parse enum: " + pi2.toString()); return new EnumObj[0]; }; @@ -158,7 +160,8 @@ public abstract class ParseBase { * * @return union */ - protected UnionObj[] parseUnion() { + protected UnionObj[] parseUnion(ParseTaskInfo pi2) { + System.out.println("parse union: " + pi2.toString()); return new UnionObj[0]; } @@ -167,7 +170,8 @@ public abstract class ParseBase { * * @return struct */ - protected StructObj[] parseStruct() { + protected StructObj[] parseStruct(ParseTaskInfo pi2) { + System.out.println("parse struct: " + pi2.toString()); return new StructObj[0]; } @@ -176,7 +180,8 @@ public abstract class ParseBase { * * @return class */ - protected ClassObj[] parseClass() { + protected ClassObj[] parseClass(ParseTaskInfo pi2) { + System.out.println("parse class: " + pi2.toString()); return new ClassObj[0]; } @@ -185,7 +190,8 @@ public abstract class ParseBase { * * @return func */ - protected FuncObj[] parseFunc() { + protected FuncObj[] parseFunc(ParseTaskInfo pi2) { + System.out.println("parse function: " + pi2.toString()); return new FuncObj[0]; } @@ -194,7 +200,8 @@ public abstract class ParseBase { * * @return type */ - protected TypeObj[] parseType() { + protected TypeObj[] parseType(ParseTaskInfo pi2) { + System.out.println("parse type: " + pi2.toString()); return new TypeObj[0]; } diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseC.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseC.java index ed81bef6..f03f0b44 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseC.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseC.java @@ -95,7 +95,7 @@ public class ParseC extends ParseBase { public void parseCStream(CharStream fileCStream) { System.out.println("c/cpp parse char stream"); this.fcStream = fileCStream; - SendEvent(Constants.START_STATUS, Constants.C_CPP_START_MSG, 50); + sendEvent(Constants.START_STATUS, Constants.C_CPP_START_MSG, 50); try { // 初始化词法分析器 CPP14Lexer lexer = new CPP14Lexer(this.fcStream); @@ -114,36 +114,36 @@ public class ParseC extends ParseBase { System.out.println("parse cstream e.printStackTrace(): " + e.getMessage()); } - SendEvent(Constants.COMPLETE_STATUS, Constants.C_CPP_COMPLETE_MSG, 50); + sendEvent(Constants.COMPLETE_STATUS, Constants.C_CPP_COMPLETE_MSG, 50); } @Override - protected EnumObj[] parseEnum() { - return super.parseEnum(); + protected EnumObj[] parseEnum(ParseTaskInfo pi2) { + return super.parseEnum(pi2); } @Override - protected UnionObj[] parseUnion() { - return super.parseUnion(); + protected UnionObj[] parseUnion(ParseTaskInfo pi2) { + return super.parseUnion(pi2); } @Override - protected StructObj[] parseStruct() { - return super.parseStruct(); + protected StructObj[] parseStruct(ParseTaskInfo pi2) { + return super.parseStruct(pi2); } @Override - protected ClassObj[] parseClass() { - return super.parseClass(); + protected ClassObj[] parseClass(ParseTaskInfo pi2) { + return super.parseClass(pi2); } @Override - protected FuncObj[] parseFunc() { - return super.parseFunc(); + protected FuncObj[] parseFunc(ParseTaskInfo pi2) { + return super.parseFunc(pi2); } @Override - protected TypeObj[] parseType() { - return super.parseType(); + protected TypeObj[] parseType(ParseTaskInfo pi2) { + return super.parseType(pi2); } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTask.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTask.java index 03e5b850..3e8604d2 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTask.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTask.java @@ -132,6 +132,7 @@ public class ParseTask extends Task.Backgroundable implements BaseListener { ObjectMapper mapper = new ObjectMapper(); try { ParseTaskInfo pi2 = mapper.readValue(jsonStr, ParseTaskInfo.class); + parser.receive(pi2); } catch (JsonProcessingException e) { System.out.println("Test fromJson catch: " + e.getMessage()); } diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTaskInfo.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTaskInfo.java index 6b1c6d1c..df868d33 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTaskInfo.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTaskInfo.java @@ -27,7 +27,8 @@ package parse; public class ParseTaskInfo { private String status; private String message; - private int currentType; + private int lanType; + private int parseType; private String jsonData; private int progress; private int total; @@ -55,7 +56,7 @@ public class ParseTaskInfo { public ParseTaskInfo(String vs, String vm, int ct, String jd) { this.status = vs; this.message = vm; - this.currentType = ct; + this.lanType = ct; this.jsonData = jd; } @@ -95,6 +96,42 @@ public class ParseTaskInfo { return message; } + /** + * 获取解析类型 + * + * @return 解析类型 + */ + public int getLanType() { + return lanType; + } + + /** + * 设置 解析类型 + * + * @param lanType 解析类型 + */ + public void setLanType(int lanType) { + this.lanType = lanType; + } + + /** + * 获取 json data + * + * @return jsonData 解析数据 + */ + public String getJsonData() { + return jsonData; + } + + /** + * 设置 json data + * + * @param jsonData 解析数据 + */ + public void setJsonData(String jsonData) { + this.jsonData = jsonData; + } + /** * 设置进度 * @@ -130,4 +167,22 @@ public class ParseTaskInfo { public int getTotal() { return total; } + + /** + * 读取解析类型 + * + * @return 解析类型 + */ + public int getParseType() { + return parseType; + } + + /** + * 读取解析类型 + * + * @param parseType 解析类型 + */ + public void setParseType(int parseType) { + this.parseType = parseType; + } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java index ed985e45..22b2be53 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java @@ -21,6 +21,10 @@ import antlr.typescript.TypeScriptLexer; import antlr.typescript.TypeScriptParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import event.CustomEvent; +import event.CustomEventListener; import grammar.*; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CommonTokenStream; @@ -39,7 +43,7 @@ import utils.Constants; * @since 2025-02-28 * @version 1.0 */ -public class ParseTs extends ParseBase { +public class ParseTs extends ParseBase implements CustomEventListener { /** * 根据文件名解析 * @@ -72,7 +76,7 @@ public class ParseTs extends ParseBase { public void parseContent(String fileContent) { System.out.println("ts parseContent"); this.fileContent = fileContent; - SendEvent(Constants.COMPLETE_STATUS, Constants.TS_COMPLETE_MSG, 50); + sendEvent(Constants.COMPLETE_STATUS, Constants.TS_COMPLETE_MSG, 50); } /** @@ -85,7 +89,7 @@ public class ParseTs extends ParseBase { System.out.println("ts parse char stream start"); this.fcStream = fileCStream; - SendEvent(Constants.START_STATUS, Constants.TS_START_MSG, 0); + sendEvent(Constants.START_STATUS, Constants.TS_START_MSG, 0); try { // 初始化词法分析器 TypeScriptLexer lexer = new TypeScriptLexer(this.fcStream); @@ -99,41 +103,154 @@ public class ParseTs extends ParseBase { ParseTreeWalker walker = new ParseTreeWalker(); walker.walk(tsc, tree); + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + String json = gson.toJson(tsc); + System.out.println("ts parse result: " +json); + System.out.println("ts parse char stream finish"); } catch (RecognitionException e) { System.out.println("parse cstream e.printStackTrace(): " + e.getMessage()); } - SendEvent(Constants.COMPLETE_STATUS, Constants.TS_COMPLETE_MSG, 50); + sendEvent(Constants.COMPLETE_STATUS, Constants.TS_COMPLETE_MSG, 50); } + /** + * 接收解析结果 + * + * @param pi2 解析结构 + */ + @Override + public void receive(ParseTaskInfo pi2) { + super.receive(pi2); + if (pi2.getLanType() != Constants.PARSE_TS_LANGUAGE) { + System.err.println("Language type is not ts language"); + return; + } + switch (pi2.getParseType()) { + case Constants.PARSE_TS_ABSTRACT: + break; + case Constants.PARSE_TS_CLASS: + parseClass(pi2); + break; + case Constants.PARSE_TS_ENUM: + parseEnum(pi2); + break; + case Constants.PARSE_TS_EXPORT: + break; + case Constants.PARSE_TS_FUNCTION: + parseFunc(pi2); + break; + case Constants.PARSE_TS_GENERIC: + break; + case Constants.PARSE_TS_GENERIC_CLASS: + break; + case Constants.PARSE_TS_GENERIC_INTERFACE: + break; + case Constants.PARSE_TS_IMPORT: + break; + case Constants.PARSE_TS_INTERFACE: + break; + case Constants.PARSE_TS_JS_CLASS: + break; + case Constants.PARSE_TS_LOOP: + break; + case Constants.PARSE_TS_MODULE: + break; + case Constants.PARSE_TS_NON_NULL: + break; + case Constants.PARSE_TS_OBJECT_INITIALIZER: + break; + case Constants.PARSE_TS_STATEMENT: + break; + case Constants.PARSE_TS_TEMPLATE_STRING: + break; + case Constants.PARSE_TS_TYPE: + parseType(pi2); + break; + case Constants.PARSE_TS_VARIABLE: + break; + case Constants.PARSE_TS_EXIT_TRANSLATION: + break; + default: + break; + } + } + + /** + * 解析枚举 + * + * @param pi2 解析结果 + * @return 解析结果 + */ + @Override + protected EnumObj[] parseEnum(ParseTaskInfo pi2) { + return super.parseEnum(pi2); + } + + /** + * 解析联合 + * + * @param pi2 解析结果 + * @return 解析结果 + */ @Override - protected EnumObj[] parseEnum() { - return super.parseEnum(); + protected UnionObj[] parseUnion(ParseTaskInfo pi2) { + return super.parseUnion(pi2); } + /** + * 解析结构体 + * + * @param pi2 解析结果 + * @return 解析结果 + */ @Override - protected UnionObj[] parseUnion() { - return super.parseUnion(); + protected StructObj[] parseStruct(ParseTaskInfo pi2) { + return super.parseStruct(pi2); } + /** + * 解析类 + * + * @param pi2 解析结果 + * @return 解析结果 + */ @Override - protected StructObj[] parseStruct() { - return super.parseStruct(); + protected ClassObj[] parseClass(ParseTaskInfo pi2) { + return super.parseClass(pi2); } + /** + * 解析方法 + * + * @param pi2 解析结果 + * @return 解析结果 + */ @Override - protected ClassObj[] parseClass() { - return super.parseClass(); + protected FuncObj[] parseFunc(ParseTaskInfo pi2) { + return super.parseFunc(pi2); } + /** + * 解析type + * + * @param pi2 解析结果 + * @return 解析结果 + */ @Override - protected FuncObj[] parseFunc() { - return super.parseFunc(); + protected TypeObj[] parseType(ParseTaskInfo pi2) { + return super.parseType(pi2); } + /** + * 处理事件 + * + * @param event 事件 + */ @Override - protected TypeObj[] parseType() { - return super.parseType(); + public void handleEvent(CustomEvent event) { + System.out.println("parse ts handle: " + event.toString()); } } -- Gitee From ac22183b38667d26002da1416b7b5b207495e8e1 Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 17:42:02 +0800 Subject: [PATCH 6/8] add ts grammer parse Signed-off-by: wangshi --- .../typescript/TypeScriptCustomListener.java | 221 ++++++++++++++++-- .../typescript/TypeScriptParserVisitor.java | 2 +- 2 files changed, 201 insertions(+), 22 deletions(-) diff --git a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java index 2c4ee043..7f0277ec 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java +++ b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java @@ -15,9 +15,15 @@ package antlr.typescript; +import grammar.*; +import it.unimi.dsi.fastutil.bytes.F; import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.runtime.ParserRuleContext; +import utils.Constants; +import utils.TsToken; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; /** *

类名:该类用于xxx

@@ -29,6 +35,27 @@ import java.util.List; * @since 2025-02-28 */ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { + private final int currentLanguage = Constants.PARSE_TS_LANGUAGE; + private String currentToken = ""; + private GBaseObject currentObject; + private List enumObjList; + private List classObjList; + private List funcObjList; + private List structObjList; + private List typeObjList; + private List unionObjList; + private List interfaceObjList; + + public TypeScriptCustomListener() { + enumObjList = new CopyOnWriteArrayList<>(); + classObjList = new CopyOnWriteArrayList<>(); + funcObjList = new CopyOnWriteArrayList<>(); + structObjList = new CopyOnWriteArrayList<>(); + typeObjList = new CopyOnWriteArrayList<>(); + unionObjList = new CopyOnWriteArrayList<>(); + interfaceObjList = new CopyOnWriteArrayList<>(); + } + @Override public void enterVariableDeclaration(TypeScriptParser.VariableDeclarationContext ctx) { String varName = ctx.identifierOrKeyWord().getText(); @@ -36,21 +63,123 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { System.out.println("var : " + ctx.getText()); String typeAnno = ctx.typeAnnotation() != null ? ctx.typeAnnotation().getText() : ""; System.out.println("type : " + typeAnno); - List secList = ctx.singleExpression(); - for (TypeScriptParser.SingleExpressionContext sec : secList) { - String value = sec.getText(); - System.out.println("single : " + value); - int cnt = sec.getChildCount(); - System.out.println("single child cnt: " + cnt); - for (int i = 0; i < cnt; i++) { - ParseTree pt = sec.getChild(i); - System.out.println("single child pt: " + pt.getText()); + if (varName.equals(TsToken.TS_TOKEN_TYPE)) { + TypeObj to = new TypeObj(); + List secList = ctx.singleExpression(); + for (TypeScriptParser.SingleExpressionContext sec : secList) { + String value = sec.getText(); + System.out.println("single : " + value); + int cnt = sec.getChildCount(); + System.out.println("single child cnt: " + cnt); + if (cnt == 3) { + ParseTree pt = sec.getChild(0); + to.setName(pt.getText()); + + ParseTree pt2 = sec.getChild(2); + to.addTypeValue(pt2.getText()); + } + for (int i = 0; i < cnt; i++) { + ParseTree pt = sec.getChild(i); + System.out.println("single child pt: " + pt.getText()); + } } + this.typeObjList.add(to); + System.out.println("type: " + to.toJsonString()); + } + System.out.println("------------------------------"); } + @Override + public void enterExpressionStatement(TypeScriptParser.ExpressionStatementContext ctx) { + super.enterExpressionStatement(ctx); +// System.out.println("ExpressionStatement: " + ctx.getText()); +// System.out.println("ExpressionStatement: " + ctx.getParent().getText()); +// System.out.println("ExpressionStatement: " + ctx.getStart().getText()); +// System.out.println("ExpressionStatement: " + ctx.getChildCount()); +// System.out.println("ExpressionStatement: " + ctx.getChild(0).getText()); +// System.out.println("ExpressionStatement: " + ctx.getPayload().getText()); + + } + + @Override + public void enterIdentifierOrPattern(TypeScriptParser.IdentifierOrPatternContext ctx) { + super.enterIdentifierOrPattern(ctx); +// System.out.println("IdentifierOrPattern: " + ctx.getText()); +// System.out.println("IdentifierOrPattern: " + ctx.getParent().getText()); +// System.out.println("IdentifierOrPattern: " + ctx.getStart().getText()); +// System.out.println("IdentifierOrPattern: " + ctx.getChildCount()); +// System.out.println("IdentifierOrPattern: " + ctx.getChild(0).getText()); +// System.out.println("IdentifierOrPattern: " + ctx.getPayload().getText()); + } + + @Override + public void enterObjectLiteralExpression(TypeScriptParser.ObjectLiteralExpressionContext ctx) { + super.enterObjectLiteralExpression(ctx); +// System.out.println("ObjectLiteralExpression: " + ctx.getText()); +// System.out.println("ObjectLiteralExpression: " + ctx.getParent().getText()); +// System.out.println("ObjectLiteralExpression parent.start: " + ctx.getParent().getStart().getText()); +// System.out.println("ObjectLiteralExpression: " + ctx.getStart().getText()); +// System.out.println("ObjectLiteralExpression: " + ctx.getChildCount()); +// System.out.println("ObjectLiteralExpression: " + ctx.getChild(0).getText()); +// System.out.println("ObjectLiteralExpression: " + ctx.getPayload().getText()); + ParserRuleContext prc = ctx.getParent(); + ParserRuleContext fprc = prc.getParent(); + String tokenStr = fprc.getStart().getText(); + if (tokenStr.equals(TsToken.TS_TOKEN_ENUM)) { + EnumObj eo = new EnumObj(); + eo.setName(ctx.getParent().getStart().getText()); + this.enumObjList.add(eo); + this.currentToken = TsToken.TS_TOKEN_ENUM; + this.currentObject = eo; + this.enumObjList.add(eo); + } + + } + + @Override + public void enterLiteralExpression(TypeScriptParser.LiteralExpressionContext ctx) { + super.enterLiteralExpression(ctx); +// System.out.println("LiteralExpressionContext: " + ctx.getText()); +// System.out.println("LiteralExpressionContext: " + ctx.getParent().getText()); +// System.out.println("LiteralExpressionContext parent start: " + ctx.getParent().getStart().getText()); +// System.out.println("LiteralExpressionContext parent stop: " + ctx.getParent().getStop().getText()); +// System.out.println("LiteralExpressionContext: " + ctx.getStart().getText()); +// +// System.out.println("LiteralExpressionContext: " + ctx.getChildCount()); +// System.out.println("LiteralExpressionContext: " + ctx.getChild(0).getText()); +// System.out.println("LiteralExpressionContext: " + ctx.getPayload().getText()); + + String memName = ctx.getParent().getStart().getText(); + String memValue = ctx.getParent().getStop().getText(); + if (this.currentToken.equals(TsToken.TS_TOKEN_ENUM)) { + if (this.currentObject instanceof EnumObj) { + EnumObj eo = (EnumObj)this.currentObject; + eo.addMemberItem(memName); + eo.addMemberValue(memValue); + int lastIndex = this.enumObjList.size() - 1; + this.enumObjList.set(lastIndex, eo); + System.out.println("enum: " + eo.toJsonString()); + } + } + + } + + @Override + public void enterExpressionSequence(TypeScriptParser.ExpressionSequenceContext ctx) { + super.enterExpressionSequence(ctx); +// System.out.println("ExpressionSequence: " + ctx.getText()); +// System.out.println("ExpressionSequence: " + ctx.getParent().getText()); +// System.out.println("ExpressionSequence parent.start: " + ctx.getParent().getStart().getText()); +// System.out.println("ExpressionSequence: " + ctx.getStart().getText()); +// System.out.println("ExpressionSequence: " + ctx.getChildCount()); +// System.out.println("ExpressionSequence: " + ctx.getChild(0).getText()); +// System.out.println("ExpressionSequence: " + ctx.getPayload().getText()); + + } + @Override public void enterConstructorDeclaration(TypeScriptParser.ConstructorDeclarationContext ctx) { // 提取构造函数参数列表 @@ -77,17 +206,22 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { System.out.println("Function callSign: " + callSign); String typeAnno = ctx.callSignature().typeAnnotation().getText(); System.out.println("Function typeAnno: " + typeAnno); + FuncObj fo = new FuncObj(); + fo.setName(funcName); + fo.setRetValue(typeAnno); if (ctx.callSignature().parameterList() != null) { List plc = ctx.callSignature().parameterList().parameter(); for (TypeScriptParser.ParameterContext pc : plc) { System.out.println("Function param: " + pc.getText()); TypeScriptParser. RequiredParameterContext rpc = pc.requiredParameter(); - String ta = rpc.typeAnnotation().getText(); - String iop = rpc.identifierOrPattern().getText(); - System.out.println("Function type: " + ta + " name: " + iop); + String type = rpc.typeAnnotation().getText(); + String name = rpc.identifierOrPattern().getText(); + System.out.println("Function type: " + type + " name: " + name); + fo.addParam(name, type); } } - System.out.println("--------------------"); + System.out.println("--------------------" + fo.toJsonString()); + this.funcObjList.add(fo); } @Override @@ -97,6 +231,11 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { String className = ctx.identifier().getText(); System.out.println("Class: " + className); + ClassObj co = new ClassObj(); + co.setName(className); + this.currentObject = co; + this.currentToken = TsToken.TS_TOKEN_CLASS; + this.classObjList.add(co); // 获取修饰符(如public/abstract) TypeScriptParser.DecoratorListContext dlc = ctx.decoratorList(); @@ -133,14 +272,33 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { System.out.println("Method callSign: " + callSign); String typeAnno = ctx.callSignature().typeAnnotation().getText(); System.out.println("Method typeAnno: " + typeAnno); - List plc = ctx.callSignature().parameterList().parameter(); - for (TypeScriptParser.ParameterContext pc : plc) { - System.out.println("Method param: " + pc.getText()); - TypeScriptParser. RequiredParameterContext rpc = pc.requiredParameter(); - String ta = rpc.typeAnnotation().getText(); - String iop = rpc.identifierOrPattern().getText(); - System.out.println("Method type: " + ta + " name: " + iop); + TypeScriptParser.ParameterListContext plc = ctx.callSignature().parameterList(); + + FuncObj fo = new FuncObj(); + fo.setType(typeAnno); + fo.setName(propertyName); + + if (plc != null) { + List plcList = ctx.callSignature().parameterList().parameter(); + for (TypeScriptParser.ParameterContext pc : plcList) { + System.out.println("Method param: " + pc.getText()); + TypeScriptParser. RequiredParameterContext rpc = pc.requiredParameter(); + String ta = rpc.typeAnnotation().getText(); + String iop = rpc.identifierOrPattern().getText(); + System.out.println("Method type: " + ta + " name: " + iop); + fo.addParam(iop, ta); + } } + + if ((this.currentObject != null) && (this.currentObject instanceof ClassObj)) { + ClassObj co = (ClassObj)this.currentObject; + co.addFunc(fo); + + int lastIndex = this.classObjList.size() - 1; + this.classObjList.set(lastIndex, co); + System.out.println("class: " + co.toJsonString()); + } + int cnt = ctx.getChildCount(); System.out.println("Method param cnt: " + cnt); } @@ -148,10 +306,19 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { @Override public void enterPropertyDeclarationExpression(TypeScriptParser.PropertyDeclarationExpressionContext ctx) { super.enterPropertyDeclarationExpression(ctx); + System.out.println("Property property: " + ctx.getText()); String propertyName = ctx.propertyName().getText(); String typeName = ctx.typeAnnotation().getText(); System.out.println("Property name: " + propertyName + " type: " + typeName); + if ((this.currentObject != null) && (this.currentObject instanceof ClassObj)) { + ClassObj co = (ClassObj)this.currentObject; + co.addParam(propertyName, typeName); + + int lastIndex = this.classObjList.size() - 1; + this.classObjList.set(lastIndex, co); + System.out.println("class: " + co.toJsonString()); + } } @Override @@ -239,11 +406,17 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { TypeScriptParser.TypeBodyContext tbc = otc.typeBody(); TypeScriptParser.TypeMemberListContext tlc = tbc.typeMemberList(); List tmcList = tlc.typeMember(); + InterfaceObject io = new InterfaceObject(); + io.setName(interfaceName); + for (TypeScriptParser.TypeMemberContext tmc : tmcList) { String callSign = tmc.callSignature().getText(); System.out.println("interface callSign: " + callSign); String typeAnno = tmc.callSignature().typeAnnotation().getText(); System.out.println("interface typeAnno: " + typeAnno); + FuncObj fo = new FuncObj(); + fo.setName(""); + fo.setType(typeAnno); List plc = tmc.callSignature().parameterList().parameter(); for (TypeScriptParser.ParameterContext pc : plc) { System.out.println("interface param: " + pc.getText()); @@ -251,9 +424,15 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { String ta = rpc.typeAnnotation().getText(); String iop = rpc.identifierOrPattern().getText(); System.out.println("interface type: " + ta + " name: " + iop); + fo.addParam(iop, ta); } + io.addFunc(fo); } - System.out.println("----------------"); + this.interfaceObjList.add(io); + this.currentObject = io; + this.currentToken = TsToken.TS_TOKEN_INTERFACE; + + System.out.println("----------------" + io.toJsonString()); } @Override diff --git a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptParserVisitor.java b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptParserVisitor.java index 260c10c5..9b1e0d71 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptParserVisitor.java +++ b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptParserVisitor.java @@ -13,7 +13,7 @@ * limitations under the License. */ -package antlr.typescript;// Generated from TypeScriptParser.g4 by ANTLR 4.13.2 +package antlr.typescript; // Generated from TypeScriptParser.g4 by ANTLR 4.13.2 import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** -- Gitee From e507956193188e10c3c81b2713cd8a875c2bfaea Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 18:10:53 +0800 Subject: [PATCH 7/8] fix code check Signed-off-by: wangshi --- .../typescript/TypeScriptCustomListener.java | 43 ++-------------- .../src/main/java/event/CustomEvent.java | 1 + .../src/main/java/grammar/ClassObj.java | 23 +++++++++ .../src/main/java/grammar/GBaseObject.java | 3 ++ .../main/java/grammar/InterfaceObject.java | 28 ++++++++++ .../src/main/java/parse/ParseBase.java | 1 + .../ohosgen/src/main/java/parse/ParseTs.java | 51 +------------------ .../ohosgen/src/main/java/utils/TsToken.java | 15 ++++++ 8 files changed, 77 insertions(+), 88 deletions(-) diff --git a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java index 7f0277ec..5100b8e4 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java +++ b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java @@ -95,36 +95,17 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { @Override public void enterExpressionStatement(TypeScriptParser.ExpressionStatementContext ctx) { super.enterExpressionStatement(ctx); -// System.out.println("ExpressionStatement: " + ctx.getText()); -// System.out.println("ExpressionStatement: " + ctx.getParent().getText()); -// System.out.println("ExpressionStatement: " + ctx.getStart().getText()); -// System.out.println("ExpressionStatement: " + ctx.getChildCount()); -// System.out.println("ExpressionStatement: " + ctx.getChild(0).getText()); -// System.out.println("ExpressionStatement: " + ctx.getPayload().getText()); } @Override public void enterIdentifierOrPattern(TypeScriptParser.IdentifierOrPatternContext ctx) { super.enterIdentifierOrPattern(ctx); -// System.out.println("IdentifierOrPattern: " + ctx.getText()); -// System.out.println("IdentifierOrPattern: " + ctx.getParent().getText()); -// System.out.println("IdentifierOrPattern: " + ctx.getStart().getText()); -// System.out.println("IdentifierOrPattern: " + ctx.getChildCount()); -// System.out.println("IdentifierOrPattern: " + ctx.getChild(0).getText()); -// System.out.println("IdentifierOrPattern: " + ctx.getPayload().getText()); } @Override public void enterObjectLiteralExpression(TypeScriptParser.ObjectLiteralExpressionContext ctx) { super.enterObjectLiteralExpression(ctx); -// System.out.println("ObjectLiteralExpression: " + ctx.getText()); -// System.out.println("ObjectLiteralExpression: " + ctx.getParent().getText()); -// System.out.println("ObjectLiteralExpression parent.start: " + ctx.getParent().getStart().getText()); -// System.out.println("ObjectLiteralExpression: " + ctx.getStart().getText()); -// System.out.println("ObjectLiteralExpression: " + ctx.getChildCount()); -// System.out.println("ObjectLiteralExpression: " + ctx.getChild(0).getText()); -// System.out.println("ObjectLiteralExpression: " + ctx.getPayload().getText()); ParserRuleContext prc = ctx.getParent(); ParserRuleContext fprc = prc.getParent(); String tokenStr = fprc.getStart().getText(); @@ -142,21 +123,12 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { @Override public void enterLiteralExpression(TypeScriptParser.LiteralExpressionContext ctx) { super.enterLiteralExpression(ctx); -// System.out.println("LiteralExpressionContext: " + ctx.getText()); -// System.out.println("LiteralExpressionContext: " + ctx.getParent().getText()); -// System.out.println("LiteralExpressionContext parent start: " + ctx.getParent().getStart().getText()); -// System.out.println("LiteralExpressionContext parent stop: " + ctx.getParent().getStop().getText()); -// System.out.println("LiteralExpressionContext: " + ctx.getStart().getText()); -// -// System.out.println("LiteralExpressionContext: " + ctx.getChildCount()); -// System.out.println("LiteralExpressionContext: " + ctx.getChild(0).getText()); -// System.out.println("LiteralExpressionContext: " + ctx.getPayload().getText()); String memName = ctx.getParent().getStart().getText(); String memValue = ctx.getParent().getStop().getText(); if (this.currentToken.equals(TsToken.TS_TOKEN_ENUM)) { if (this.currentObject instanceof EnumObj) { - EnumObj eo = (EnumObj)this.currentObject; + EnumObj eo = (EnumObj) this.currentObject; eo.addMemberItem(memName); eo.addMemberValue(memValue); int lastIndex = this.enumObjList.size() - 1; @@ -170,13 +142,6 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { @Override public void enterExpressionSequence(TypeScriptParser.ExpressionSequenceContext ctx) { super.enterExpressionSequence(ctx); -// System.out.println("ExpressionSequence: " + ctx.getText()); -// System.out.println("ExpressionSequence: " + ctx.getParent().getText()); -// System.out.println("ExpressionSequence parent.start: " + ctx.getParent().getStart().getText()); -// System.out.println("ExpressionSequence: " + ctx.getStart().getText()); -// System.out.println("ExpressionSequence: " + ctx.getChildCount()); -// System.out.println("ExpressionSequence: " + ctx.getChild(0).getText()); -// System.out.println("ExpressionSequence: " + ctx.getPayload().getText()); } @@ -272,7 +237,7 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { System.out.println("Method callSign: " + callSign); String typeAnno = ctx.callSignature().typeAnnotation().getText(); System.out.println("Method typeAnno: " + typeAnno); - TypeScriptParser.ParameterListContext plc = ctx.callSignature().parameterList(); + TypeScriptParser.ParameterListContext plc = ctx.callSignature().parameterList(); FuncObj fo = new FuncObj(); fo.setType(typeAnno); @@ -291,7 +256,7 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { } if ((this.currentObject != null) && (this.currentObject instanceof ClassObj)) { - ClassObj co = (ClassObj)this.currentObject; + ClassObj co = (ClassObj) this.currentObject; co.addFunc(fo); int lastIndex = this.classObjList.size() - 1; @@ -312,7 +277,7 @@ public class TypeScriptCustomListener extends TypeScriptParserBaseListener { String typeName = ctx.typeAnnotation().getText(); System.out.println("Property name: " + propertyName + " type: " + typeName); if ((this.currentObject != null) && (this.currentObject instanceof ClassObj)) { - ClassObj co = (ClassObj)this.currentObject; + ClassObj co = (ClassObj) this.currentObject; co.addParam(propertyName, typeName); int lastIndex = this.classObjList.size() - 1; diff --git a/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java b/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java index ea78a503..9d3a9a91 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java +++ b/src/intellij_plugin/ohosgen/src/main/java/event/CustomEvent.java @@ -34,6 +34,7 @@ public class CustomEvent extends EventObject { * * @param source * the object on which the Event initially occurred + * @param message 消息 * @throws IllegalArgumentException * if source is null */ diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java index 2e8ec924..7f39ff84 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java @@ -123,10 +123,21 @@ public class ClassObj extends GBaseObject { return paramList; } + /** + * 增加param + * + * @param po param + */ public void addParam(ParamObj po) { this.paramList.add(po); } + /** + * 增加param + * + * @param name 名字 + * @param type 类型 + */ public void addParam(String name, String type) { ParamObj po = new ParamObj(); po.setType(type); @@ -134,10 +145,22 @@ public class ClassObj extends GBaseObject { this.paramList.add(po); } + /** + * 增加方法 + * + * @param fo 方法 + */ public void addFunc(FuncObj fo) { this.funcList.add(fo); } + /** + * 增加方法 + * + * @param name 名字 + * @param ret 返回值 + * @param poList 参数 + */ public void addFunc(String name, String ret, List poList) { FuncObj fo = new FuncObj(); fo.setName(name); diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java index 87eef612..b5ec01d5 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java @@ -34,6 +34,9 @@ public class GBaseObject { */ protected int languageType = Constants.PARSE_UNKNOWN_LANGUAGE; + /** + * 关键字 + */ protected String token = ""; /** diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java index 29f31ac9..d9a5a8cb 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/InterfaceObject.java @@ -47,6 +47,11 @@ public class InterfaceObject extends GBaseObject { /** * 构造函数 + * + * @param nv 名字 + * @param av 别名 + * @param pl 参数 + * @param fl 方法 */ public InterfaceObject(String nv, String av, List pl, List fl) { this.name = nv; @@ -127,10 +132,21 @@ public class InterfaceObject extends GBaseObject { return paramList; } + /** + * 增加参数 + * + * @param po 参数 + */ public void addParam(ParamObj po) { this.paramList.add(po); } + /** + * 增加参数 + * + * @param name 名称 + * @param type 类型 + */ public void addParam(String name, String type) { ParamObj po = new ParamObj(); po.setType(type); @@ -138,10 +154,22 @@ public class InterfaceObject extends GBaseObject { this.paramList.add(po); } + /** + * 增加方法 + * + * @param fo 方法 + */ public void addFunc(FuncObj fo) { this.funcList.add(fo); } + /** + * 增加方法 + * + * @param name 名称 + * @param ret 返回值 + * @param poList 参数 + */ public void addFunc(String name, String ret, List poList) { FuncObj fo = new FuncObj(); fo.setName(name); diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java index dbc6fb49..c923dec1 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java @@ -198,6 +198,7 @@ public abstract class ParseBase { /** * 解析type * + * @param pi2 解析进程 * @return type */ protected TypeObj[] parseType(ParseTaskInfo pi2) { diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java index 22b2be53..091a3fc4 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseTs.java @@ -106,7 +106,7 @@ public class ParseTs extends ParseBase implements CustomEventListener { Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(tsc); - System.out.println("ts parse result: " +json); + System.out.println("ts parse result: " + json); System.out.println("ts parse char stream finish"); } catch (RecognitionException e) { @@ -128,54 +128,7 @@ public class ParseTs extends ParseBase implements CustomEventListener { System.err.println("Language type is not ts language"); return; } - switch (pi2.getParseType()) { - case Constants.PARSE_TS_ABSTRACT: - break; - case Constants.PARSE_TS_CLASS: - parseClass(pi2); - break; - case Constants.PARSE_TS_ENUM: - parseEnum(pi2); - break; - case Constants.PARSE_TS_EXPORT: - break; - case Constants.PARSE_TS_FUNCTION: - parseFunc(pi2); - break; - case Constants.PARSE_TS_GENERIC: - break; - case Constants.PARSE_TS_GENERIC_CLASS: - break; - case Constants.PARSE_TS_GENERIC_INTERFACE: - break; - case Constants.PARSE_TS_IMPORT: - break; - case Constants.PARSE_TS_INTERFACE: - break; - case Constants.PARSE_TS_JS_CLASS: - break; - case Constants.PARSE_TS_LOOP: - break; - case Constants.PARSE_TS_MODULE: - break; - case Constants.PARSE_TS_NON_NULL: - break; - case Constants.PARSE_TS_OBJECT_INITIALIZER: - break; - case Constants.PARSE_TS_STATEMENT: - break; - case Constants.PARSE_TS_TEMPLATE_STRING: - break; - case Constants.PARSE_TS_TYPE: - parseType(pi2); - break; - case Constants.PARSE_TS_VARIABLE: - break; - case Constants.PARSE_TS_EXIT_TRANSLATION: - break; - default: - break; - } + } /** diff --git a/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java b/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java index e7caba44..19907897 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java +++ b/src/intellij_plugin/ohosgen/src/main/java/utils/TsToken.java @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Shenzhen Kaihong Digital. + * 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 utils; /** -- Gitee From c1f42813f8014bb28007f75f30574ea70fb3672b Mon Sep 17 00:00:00 2001 From: wangshi Date: Wed, 12 Mar 2025 18:47:11 +0800 Subject: [PATCH 8/8] fix code check Signed-off-by: wangshi --- .../antlr/typescript/TypeScriptCustomListener.java | 1 - .../ohosgen/src/main/java/grammar/ClassObj.java | 10 ++++++++++ .../ohosgen/src/main/java/grammar/FuncObj.java | 2 +- .../ohosgen/src/main/java/grammar/GBaseObject.java | 3 +-- .../ohosgen/src/main/java/parse/ParseBase.java | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java index 5100b8e4..75b6e2a1 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java +++ b/src/intellij_plugin/ohosgen/src/main/java/antlr/typescript/TypeScriptCustomListener.java @@ -16,7 +16,6 @@ package antlr.typescript; import grammar.*; -import it.unimi.dsi.fastutil.bytes.F; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.ParserRuleContext; import utils.Constants; diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java index 7f39ff84..c725e178 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/ClassObj.java @@ -15,6 +15,8 @@ package grammar; +import utils.TsToken; + import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -37,14 +39,22 @@ public class ClassObj extends GBaseObject { * 构造函数 */ public ClassObj() { + this.token = TsToken.TS_TOKEN_CLASS; + this.paramList = new CopyOnWriteArrayList<>(); this.funcList = new CopyOnWriteArrayList<>(); } /** * 构造函数 + * + * @param nv 名字 + * @param av 别名 + * @param pl 参数 + * @param fl 方法 */ public ClassObj(String nv, String av, List pl, List fl) { + this(); this.name = nv; this.alias = av; this.paramList = pl; diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java index ac32eacc..b16e66fe 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/FuncObj.java @@ -53,7 +53,7 @@ public class FuncObj extends GBaseObject { * @param pl 参数 */ public FuncObj(String tv, String nv, String rv, List pl) { - this.token = TsToken.TS_TOKEN_FUNCTION; + this(); this.type = tv; this.name = nv; diff --git a/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java b/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java index b5ec01d5..850b9219 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java +++ b/src/intellij_plugin/ohosgen/src/main/java/grammar/GBaseObject.java @@ -84,7 +84,6 @@ public class GBaseObject { // 创建 Gson 实例并启用格式化 Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(this); - return json; + return gson.toJson(this); } } diff --git a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java index c923dec1..b31e7d30 100644 --- a/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java +++ b/src/intellij_plugin/ohosgen/src/main/java/parse/ParseBase.java @@ -158,6 +158,7 @@ public abstract class ParseBase { /** * 解析union * + * @param pi2 解析任务 * @return union */ protected UnionObj[] parseUnion(ParseTaskInfo pi2) { -- Gitee