mirror of
https://gitee.com/openharmony/napi_generator
synced 2024-11-23 08:20:01 +00:00
修改警告
Signed-off-by: huruitao <huruitao@kaihong.com>
This commit is contained in:
parent
6ae308cd2a
commit
81873fbd64
8
FAQ.md
8
FAQ.md
@ -31,15 +31,15 @@
|
||||
|
||||
D:\napi_tool>cmd_gen-win.exe @ohos.power.d.ts pkg/prelude/bootstrap.js:1794 return wrapper.apply(this.exports, args); ^ TypeError: Cannot read property 'name' of undefined at GenerateAll (C:\snapshot\gen\generate.js) at Object.DoGenerate (C:\snapshot\gen\main.js) at Object.<anonymous> (C:\snapshot\gen\cmd_gen.js) at Module._compile (pkg/prelude/bootstrap.js:1794:22) [90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)[39m [90m at Module.load (internal/modules/cjs/loader.js:950:32)[39m [90m at Function.Module._load (internal/modules/cjs/loader.js:790:12)[39m at Function.runMain (pkg/prelude/bootstrap.js:1847:12) [90m at internal/main/run_main_module.js:17:47[39m
|
||||
|
||||
问题定位:在windows命令行中执行cmd_gen-win.exe的时候后面没有加d.ts文件所在的绝对路径,导致d.ts文件没有找到。
|
||||
问题定位:在windows命令行中执行cmd_gen-win.exe的时候后面没有加d.ts文件所在的路径(absolute path),导致d.ts文件没有找到。
|
||||
|
||||
问题解决:在执行cmd_gen-win.exe的时候后面要加.d.ts文件所在的绝对路径,或者把d.ts文件放入到cmd_gen-win.exe所在的目录中。例如直接执行:
|
||||
问题解决:在执行cmd_gen-win.exe的时候后面要加.d.ts文件所在的路径(absolute path),或者把d.ts文件放入到cmd_gen-win.exe所在的目录中。例如直接执行:
|
||||
|
||||
cmd_gen-win.exe @ohos.power.d.ts
|
||||
|
||||
### 3.未安装系统依赖插件,运行测试用例失败
|
||||
|
||||
问题描述:首次运行UT或ST用例失败。
|
||||
问题描述:初次运行UT或ST用例失败。
|
||||
|
||||
Error: Cannot find module '../../node_modules/typescript'
|
||||
Require stack:
|
||||
@ -52,7 +52,7 @@
|
||||
at require (internal/modules/cjs/helpers.js:101:18)
|
||||
at Object.<anonymous> (/home/harmony/hhhh/napi_generator_1/src/gen/tools/common.js:16:13)
|
||||
|
||||
问题定位:首次运行测试用例,napi_generator目录下、napi_generator/src目录下依赖插件未全部安装。
|
||||
问题定位:初次运行测试用例,napi_generator目录下、napi_generator/src目录下依赖插件未全部安装。
|
||||
|
||||
问题解决:napi_generator目录下、napi_generator/src目录下重新安装依赖即可,直到napi_generator/src/package.json文件中包含以下所有插件:
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
<tbody>
|
||||
<tr id="row334175803317"><td class="cellrowborder" valign="top" width="18%" headers="mcps1.2.3.1.1 "><p id="p382391145710"><a name="p382391145710"></a><a name="p382391145710"></a><ul>函数类型</ul></p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><a name="ul334485413318"></a><a name="ul334485413318"></a><ul id="ul334485413318"><li>支持使用createThreadSafeFuncXXX格式创建线程安全函数 [注:1.第一个参数为线程安全函数名称; 2.最后一个参数为回调函数]</li></ul>
|
||||
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><a name="ul334485413318"></a><a name="ul334485413318"></a><ul id="ul334485413318"><li>支持使用createThreadSafeFuncXXX格式创建线程安全函数 [注:1.首个参数为线程安全函数名称; 2.结尾一个参数为回调函数]</li></ul>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.3.1.3 ">
|
||||
<ul id="ult940244418001">
|
||||
|
@ -9,11 +9,11 @@
|
||||
[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/cmake2gn/docs/usage/INSTRUCTION_ZH.md)
|
||||
|
||||
├── napi_generator # 工具集
|
||||
│ ├── ... # 其他文件
|
||||
│ ├── ... # 其它文件
|
||||
│ ├── src
|
||||
│ │ ├── ...
|
||||
│ │ ├── cml
|
||||
│ │ | ├── ... # 其他工具
|
||||
│ │ | ├── ... # 其它工具
|
||||
│ │ | ├── cmake2gn
|
||||
│ │ | | ├── src
|
||||
│ │ | | | ├── main.js # 工具源码入口
|
||||
|
@ -10,11 +10,11 @@
|
||||
## 目录
|
||||
|
||||
├── napi_generator # 工具集
|
||||
│ ├── ... # 其他文件
|
||||
│ ├── ... # 其它文件
|
||||
│ ├── src
|
||||
│ │ ├── ...
|
||||
│ │ ├── cml
|
||||
│ │ | ├── ... # 其他工具
|
||||
│ │ | ├── ... # 其它工具
|
||||
│ │ | ├── dts2cpp
|
||||
│ │ | | ├── src/gen # napi工具源码
|
||||
│ │ | | | ├── analyze # 解析器
|
||||
@ -100,7 +100,7 @@ public:
|
||||
|
||||
### 代码集成
|
||||
|
||||
为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。
|
||||
为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。
|
||||
|
||||
把工具的生成代码集成到OpenHarmony的具体操作步骤,可以左键单击以下链接了解:
|
||||
|
||||
|
@ -31,15 +31,15 @@
|
||||
|
||||
D:\napi_tool>cmd_gen-win.exe @ohos.power.d.ts pkg/prelude/bootstrap.js:1794 return wrapper.apply(this.exports, args); ^ TypeError: Cannot read property 'name' of undefined at GenerateAll (C:\snapshot\gen\generate.js) at Object.DoGenerate (C:\snapshot\gen\main.js) at Object.<anonymous> (C:\snapshot\gen\cmd_gen.js) at Module._compile (pkg/prelude/bootstrap.js:1794:22) [90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)[39m [90m at Module.load (internal/modules/cjs/loader.js:950:32)[39m [90m at Function.Module._load (internal/modules/cjs/loader.js:790:12)[39m at Function.runMain (pkg/prelude/bootstrap.js:1847:12) [90m at internal/main/run_main_module.js:17:47[39m
|
||||
|
||||
问题定位:在windows命令行中执行cmd_gen-win.exe的时候后面没有加d.ts文件所在的绝对路径,导致d.ts文件没有找到。
|
||||
问题定位:在windows命令行中执行cmd_gen-win.exe的时候后面没有加d.ts文件所在的路径(absolute path),导致d.ts文件没有找到。
|
||||
|
||||
问题解决:在执行cmd_gen-win.exe的时候后面要加.d.ts文件所在的绝对路径,或者把d.ts文件放入到cmd_gen-win.exe所在的目录中。例如直接执行:
|
||||
问题解决:在执行cmd_gen-win.exe的时候后面要加.d.ts文件所在的路径(absolute path),或者把d.ts文件放入到cmd_gen-win.exe所在的目录中。例如直接执行:
|
||||
|
||||
cmd_gen-win.exe @ohos.power.d.ts
|
||||
|
||||
### 3.未安装系统依赖插件,运行测试用例失败
|
||||
|
||||
问题描述:首次运行UT或ST用例失败。
|
||||
问题描述:初次运行UT或ST用例失败。
|
||||
|
||||
Error: Cannot find module '../../node_modules/typescript'
|
||||
Require stack:
|
||||
@ -52,7 +52,7 @@
|
||||
at require (internal/modules/cjs/helpers.js:101:18)
|
||||
at Object.<anonymous> (/home/harmony/hhhh/napi_generator_1/src/gen/tools/common.js:16:13)
|
||||
|
||||
问题定位:首次运行测试用例,napi_generator目录下、napi_generator/src目录下依赖插件未全部安装。
|
||||
问题定位:初次运行测试用例,napi_generator目录下、napi_generator/src目录下依赖插件未全部安装。
|
||||
|
||||
问题解决:napi_generator目录下、napi_generator/src目录下重新安装依赖即可,直到napi_generator/src/package.json文件中包含以下所有插件:
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
<tbody>
|
||||
<tr id="row334175803317"><td class="cellrowborder" valign="top" width="18%" headers="mcps1.2.3.1.1 "><p id="p382391145710"><a name="p382391145710"></a><a name="p382391145710"></a><ul>函数类型</ul></p>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><a name="ul334485413318"></a><a name="ul334485413318"></a><ul id="ul334485413318"><li>支持使用createThreadSafeFuncXXX格式创建线程安全函数 [注:1.第一个参数为线程安全函数名称; 2.最后一个参数为回调函数]</li></ul>
|
||||
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><a name="ul334485413318"></a><a name="ul334485413318"></a><ul id="ul334485413318"><li>支持使用createThreadSafeFuncXXX格式创建线程安全函数 [注:1.首个参数为线程安全函数名称; 2.结尾一个参数为回调函数]</li></ul>
|
||||
</td>
|
||||
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.3.1.3 ">
|
||||
<ul id="ult940244418001">
|
||||
|
@ -339,7 +339,7 @@ bool funcTest(bool& v, std::string& out)
|
||||
|
||||
#### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
"napitest:napitest":{}
|
||||
|
||||
@ -642,7 +642,7 @@ bool funcTest(bool& v, std::string& out)
|
||||
|
||||
#### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
"napitest:napitest":{}
|
||||
|
||||
|
@ -295,7 +295,7 @@ bool funcTest(bool& v, std::string& out)
|
||||
|
||||
### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
```
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## 场景说明
|
||||
|
||||
为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。
|
||||
为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。
|
||||
本文介绍如何将工具生成的源码利用OpenHarmony编译系统生成动态库供应用层调用,主要是有以下两种方式,分别为增加ohos.build文件方式和增加bundle.json文件方式。
|
||||
|
||||
## 4.0 版本
|
||||
@ -102,7 +102,7 @@
|
||||
|
||||
### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
```
|
||||
{
|
||||
@ -418,7 +418,7 @@ bool funcTest(bool& v, std::string& out)
|
||||
|
||||
### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
```
|
||||
{
|
||||
|
@ -42,7 +42,7 @@ napi_generator的可执行程序方式和插件方式都具有预检查的功能
|
||||
|
||||
joey@joey-virtual-machine:~/code/napi_test$
|
||||
|
||||
@ohos.napitest.d.ts (33,49),其中括号中第一个参数含义为行号,第二个参数含义为列号。
|
||||
@ohos.napitest.d.ts (33,49),其中括号中首个参数含义为行号,第二个参数含义为列号。
|
||||
|
||||
预检查的触发方式与生成框架的入口一致,使用方法参见生成框架描述。
|
||||
|
||||
|
@ -139,7 +139,7 @@ out = v1 + v2;
|
||||
|
||||
### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
```
|
||||
{
|
||||
@ -259,7 +259,7 @@ out = v1 + v2;
|
||||
|
||||
### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
```
|
||||
{
|
||||
@ -379,7 +379,7 @@ out = v1 + v2;
|
||||
|
||||
### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
```
|
||||
{
|
||||
@ -543,7 +543,7 @@ out = v1 + v2;
|
||||
|
||||
#### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
"napitest:napitest":{}
|
||||
|
||||
@ -656,7 +656,7 @@ out = v1 + v2;
|
||||
|
||||
#### 添加功能模块
|
||||
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中首个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。
|
||||
|
||||
"napitest:napitest":{}
|
||||
|
||||
|
@ -286,7 +286,7 @@ function generateAll(structOfTs, destDir, moduleName, numberType, jsonCfg) {
|
||||
let partName = moduleName.replace('.', '_');
|
||||
generateGYP(destDir, ns0.name, license, bindingCpp); // 生成ubuntu下测试的编译脚本
|
||||
generateGN(destDir, ns0.name, license, partName, buildCpp); // 生成BUILD.gn for ohos
|
||||
generateBase(destDir, license) // tool_utility.h/cpp
|
||||
generateBase(destDir, license); // tool_utility.h/cpp
|
||||
genFileList.push('tool_utility.h');
|
||||
genFileList.push('tool_utility.cpp');
|
||||
formatCode(destDir);
|
||||
|
@ -165,9 +165,9 @@ function getAddOrRemoveReg(func, isAddReg) {
|
||||
|
||||
function replaceOptionalParamDestory(middleFunc, param) {
|
||||
if (param.optionalParamDestory === '') {
|
||||
middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory) // 可选参数内存释放;
|
||||
middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory); // 可选参数内存释放
|
||||
} else {
|
||||
middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', '\n ' + param.optionalParamDestory) // 可选参数内存释放;
|
||||
middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', '\n ' + param.optionalParamDestory); // 可选参数内存释放
|
||||
}
|
||||
return middleFunc;
|
||||
}
|
||||
@ -208,11 +208,11 @@ function generateFunctionDirect(func, data, className, implHVariable) {
|
||||
middleH = replaceValueOut(middleH, param);
|
||||
|
||||
param.valueCheckout = removeEndlineEnter(param.valueCheckout);
|
||||
middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析;
|
||||
middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout); // # 输入参数解析
|
||||
let callFunc = '%s%s(%s);'.format(className === null || className === undefined ? '' : 'pInstance->',
|
||||
func.name, param.valueFill);
|
||||
middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc) // 执行;
|
||||
middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage) // 输出参数打包;
|
||||
middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc); // 执行
|
||||
middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage); // 输出参数打包
|
||||
middleFunc = replaceOptionalParamDestory(middleFunc, param);
|
||||
let prefixArr = getPrefix(data, func);
|
||||
let implH = '';
|
||||
|
@ -256,8 +256,11 @@ function generateType(name, data, inNamespace, inNameSpaceEnum, nameSpaceName, t
|
||||
let implCpp = resultConnect[2];
|
||||
let middleInit = resultConnect[3];
|
||||
let midInitEnumDefine = resultConnect[4];
|
||||
let selfNs = '';
|
||||
selfNs = getSelfNs(inNamespace);
|
||||
let selfNs = getSelfNs(inNamespace);
|
||||
generateTypeFunc(result, implH, implCpp, middleInit, midInitEnumDefine, name);
|
||||
}
|
||||
|
||||
function generateTypeFunc(result, implH, implCpp, middleInit, midInitEnumDefine, name) {
|
||||
if (implH.indexOf('typedef') > 0) {
|
||||
result = {
|
||||
implH: implH,
|
||||
|
@ -36,11 +36,13 @@ function print(...args) {
|
||||
|
||||
String.prototype.format = function (...args) {
|
||||
var result = this;
|
||||
let reg = new RegExp('%[sd]{1}')
|
||||
let reg = new RegExp('%[sd]{1}');
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
let p = result.search(reg)
|
||||
if (p < 0) break;
|
||||
result = result.substring(0, p) + args[i] + result.substring(p + 2, result.length)
|
||||
let p = result.search(reg);
|
||||
if (p < 0) {
|
||||
break;
|
||||
}
|
||||
result = result.substring(0, p) + args[i] + result.substring(p + 2, result.length);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
@ -162,7 +164,7 @@ function getLicense(data) {
|
||||
if (licenseData.search('Copyright') !== -1) {
|
||||
return licenseData;
|
||||
} else {
|
||||
return null;
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -200,10 +202,12 @@ function replaceTab(data) {
|
||||
}
|
||||
|
||||
function removeEmptyLine2(data) {
|
||||
while (data.indexOf(' \n'));
|
||||
while (data.indexOf(' \n')) {
|
||||
data = data.replace(' \n', '\n');
|
||||
while (data.indexOf('\n\n\n'));
|
||||
}
|
||||
while (data.indexOf('\n\n\n')) {
|
||||
data = data.replace('\n\n\n', '\n\n');
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -301,10 +305,10 @@ function getPrefix(data, funcInfo) {
|
||||
let virtualStr = '';
|
||||
let staticStr = isStatic ? 'static ' : '';
|
||||
if (data.childList) {
|
||||
tabStr = ' ' // 类中的方法增加一个缩进
|
||||
virtualStr = (data.childList.length > 0 && !isStatic) ? 'virtual ' : '' //如果是基类中的非静态方法,定义为虚函数
|
||||
tabStr = ' '; // 类中的方法增加一个缩进
|
||||
virtualStr = (data.childList.length > 0 && !isStatic) ? 'virtual ' : ''; //如果是基类中的非静态方法,定义为虚函数
|
||||
}
|
||||
let overrideStr = funcInfo.isOverride ? ' override' : '' // 重写了父类方法,需要加上override关键字,否则触发c++门禁告警
|
||||
let overrideStr = funcInfo.isOverride ? ' override' : ''; // 重写了父类方法,需要加上override关键字,否则触发c++门禁告警
|
||||
return [tabStr, staticStr, virtualStr, overrideStr];
|
||||
}
|
||||
|
||||
|
@ -225,12 +225,12 @@ function callDirectFunction(funcName, funcValue, retValue, indexEts, className =
|
||||
useFunction = '%s.%s(%s);'.format(className === null ? 'napitest' : className + 'Obj', funcName, funcParamValue);
|
||||
} else if (retValue === 'string') {
|
||||
useFunction = 'let strRet: string = %s.%s(%s);\n'.format(className === null ? 'napitest' : className + 'Obj', funcName, funcParamValue);
|
||||
useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + strRet);'.format(className === null ? 'napitest': className + 'Obj', funcName);
|
||||
useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + strRet);'.format(className === null ? 'napitest' : className + 'Obj', funcName);
|
||||
} else if (retValue === 'boolean') {
|
||||
useFunction = 'let boolRet: boolean = %s.%s(%s);\n'.format(className === null ? 'napitest': className + 'Obj', funcName, funcParamValue);
|
||||
useFunction = 'let boolRet: boolean = %s.%s(%s);\n'.format(className === null ? 'napitest' : className + 'Obj', funcName, funcParamValue);
|
||||
useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + boolRet);'.format(className === null ? 'napitest' : className + 'Obj', funcName);
|
||||
} else if (retValue.substring(0, SUBSTREND) === 'NUMBER_TYPE') {
|
||||
useFunction = 'let numRet: number = %s.%s(%s);\n'.format(className === null ? 'napitest': className + 'Obj', funcName, funcParamValue);
|
||||
useFunction = 'let numRet: number = %s.%s(%s);\n'.format(className === null ? 'napitest' : className + 'Obj', funcName, funcParamValue);
|
||||
useFunction += 'hilog.info(0x0000, "testTag", "%s.%s ret: " + numRet);'.format(className === null ? 'napitest' : className + 'Obj', funcName);
|
||||
} else {
|
||||
console.error('The current return type is not supported.');
|
||||
|
@ -8,11 +8,11 @@
|
||||
[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2dts/docs/usage/INSTRUCTION_ZH.md)
|
||||
|
||||
├── napi_generator # 工具集
|
||||
│ ├── ... # 其他文件
|
||||
│ ├── ... # 其它文件
|
||||
│ ├── src
|
||||
│ │ ├── ...
|
||||
│ │ ├── cml
|
||||
│ │ | ├── ... # 其他工具
|
||||
│ │ | ├── ... # 其它工具
|
||||
│ │ | ├── h2dts/src # 工具源码
|
||||
│ │ │ │ ├── tsGen # Ts框架工具源码
|
||||
│ │ | │ │ ├── header_parser.py # 解析C++头文件并生成表示类的数据结构
|
||||
|
@ -8,7 +8,7 @@ h2dtscpp工具即NATIVE生成工具,该工具由C++语法解释器和代码生
|
||||
|
||||
```
|
||||
├── napi_generator # NAPI框架代码生成工具
|
||||
│ ├── ... # 其他文档
|
||||
│ ├── ... # 其它文档
|
||||
│ ├── src
|
||||
│ │ ├── ...
|
||||
│ │ ├── cli # 命令行
|
||||
@ -20,7 +20,7 @@ h2dtscpp工具即NATIVE生成工具,该工具由C++语法解释器和代码生
|
||||
│ │ | | | ├── tsGen # 解析.h文件并生成.d.ts声明文件
|
||||
│ │ | | | ├── main.js # 主程序入口
|
||||
│ │ | | ├── package.json # 打包配置文件
|
||||
│ │ | ├── ... # 其他工具
|
||||
│ │ | ├── ... # 其它工具
|
||||
```
|
||||
|
||||
## 约束
|
||||
|
@ -231,7 +231,7 @@ function createParam(parseParamInfo) {
|
||||
let param = {
|
||||
'name': '',
|
||||
'type': ''
|
||||
}
|
||||
};
|
||||
param.name = parseParamInfo.name;
|
||||
param.type = parseParamInfo.type;
|
||||
return param;
|
||||
|
@ -9,7 +9,7 @@
|
||||
[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2sa/docs/usage/INSTRUCTION_ZH.md)
|
||||
|
||||
├── napi_generator # NAPI框架代码生成工具
|
||||
│ ├── ... # 其他文档
|
||||
│ ├── ... # 其它文档
|
||||
│ ├── src
|
||||
│ │ ├── ...
|
||||
│ │ ├── cml # 脚手架源码
|
||||
@ -18,7 +18,7 @@
|
||||
│ │ | | | ├── tools # 公共模块代码,包括消息体校验、文件读写、正则表达式转换等
|
||||
│ │ | | | ├── gen # 生成器
|
||||
│ │ | | ├── package.json # 配置文件
|
||||
│ │ | ├── ... # 其他工具
|
||||
│ │ | ├── ... # 其它工具
|
||||
|
||||
## 约束
|
||||
系统:建议Ubuntu 20.04或者Windows 10
|
||||
|
@ -34,7 +34,7 @@ Ability Template选择Empty Ability,单击Next。
|
||||
|
||||
![](../figures/DevEco_step_firstNext.png)
|
||||
|
||||
填写Project name、Save location,其他选项可不修改,单击Finish,新的工程就创建好了。
|
||||
填写Project name、Save location,其它选项可不修改,单击Finish,新的工程就创建好了。
|
||||
|
||||
![](../figures/DevEco_step_finish.png)
|
||||
|
||||
|
@ -168,7 +168,7 @@ struct Index {
|
||||
console.info("napiTestDemo ----funcTest returnVal = " + this.returnVal)
|
||||
})
|
||||
|
||||
// 调用其他模块的方法
|
||||
// 调用其它模块的方法
|
||||
Button() {
|
||||
Text('调用entry模块的方法')
|
||||
.fontSize(20)
|
||||
|
@ -26,7 +26,7 @@ Ability Template选择Empty Ability,单击Next。
|
||||
|
||||
![](../figures/DevEco_step_firstNext.png)
|
||||
|
||||
填写Project name、Save location,其他选项可不修改,单击Finish,新的工程就创建好了。
|
||||
填写Project name、Save location,其它选项可不修改,单击Finish,新的工程就创建好了。
|
||||
|
||||
![](../figures/DevEco_step_finish.png)
|
||||
|
||||
@ -44,7 +44,7 @@ Ability Template选择Empty Ability,单击Next。
|
||||
|
||||
![](../figures/DevEco_step_service.png)
|
||||
|
||||
5、工具打开 Generate Service Frame窗口,.h文件选择框默认填写被操作的.h文件的绝对路径;输出路径选择框默认填写.h文件所在文件夹路径,可修改为任意路径;serviceID默认填写9000,可修改为其他id,然后点击ok。
|
||||
5、工具打开 Generate Service Frame窗口,.h文件选择框默认填写被操作的.h文件的路径(absolute path);输出路径选择框默认填写.h文件所在文件夹路径,可修改为任意路径;serviceID默认填写9000,可修改为其它id,然后点击ok。
|
||||
|
||||
![](../figures/DevEco_step_service_ok.png)
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/tool/api/docs/INSTRUCTION_ZH.md)
|
||||
|
||||
├── napi_generator
|
||||
│ ├── ... # 其他文档
|
||||
│ ├── ... # 其它文档
|
||||
│ ├── src/tool
|
||||
│ │ ├── api # api扫描工具
|
||||
│ │ | ├── api_scan_vs_plugin # VS Code插件源码
|
||||
|
@ -7,7 +7,7 @@ API扫描工具,它可以根据用户给定三方库项目扫描输出风险
|
||||
## 目录
|
||||
|
||||
├── napi_generator/src/tool/api # API扫描工具
|
||||
│ ├── ... # 其他文件
|
||||
│ ├── ... # 其它文件
|
||||
│ ├── api_scan_IntelliJ_plugin # IntelliJ插件代码
|
||||
│ │ ├── docs # IntelliJ插件说明
|
||||
│ │ ├── resources # IntelliJ插件说明
|
||||
|
@ -26,7 +26,7 @@ Ability Template选择Empty Ability,单击Next。
|
||||
|
||||
![](../../figures/DevEco_step_firstNext.png)
|
||||
|
||||
填写Project name、Save location,其他选项可不修改,单击Finish,新的工程就创建好了。
|
||||
填写Project name、Save location,其它选项可不修改,单击Finish,新的工程就创建好了。
|
||||
|
||||
![](../../figures/DevEco_step_finish.png)
|
||||
|
||||
@ -40,7 +40,7 @@ Ability Template选择Empty Ability,单击Next。
|
||||
|
||||
![](../../figures/DevEco_step_apiscan.png)
|
||||
|
||||
4、工具打开API Scan窗口,扫描项目路径框填写将要扫描项目的绝对路径,结果输出路径框自动填写与扫描项目相同路径,使用者可以根据实际情况修改结果输出路径,然后点击ok。
|
||||
4、工具打开API Scan窗口,扫描项目路径框填写将要扫描项目的路径(absolute path),结果输出路径框自动填写与扫描项目相同路径,使用者可以根据实际情况修改结果输出路径,然后点击ok。
|
||||
|
||||
![](../../figures/DevEco_step_api_ok.png)
|
||||
|
||||
|
@ -7,7 +7,7 @@ API扫描工具,它可以根据用户给定三方库项目扫描输出风险
|
||||
## 目录
|
||||
|
||||
├── napi_generator/src/tool/api # API扫描工具
|
||||
│ ├── ... # 其他文件
|
||||
│ ├── ... # 其它文件
|
||||
│ ├── api_scan_vs_plugin # VS Code插件代码
|
||||
│ │ ├── docs # VS Code插件说明
|
||||
│ │ ├── src # VS Code插件源码
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
npx vsce package
|
||||
|
||||
每个选项都选择y,然后回车,最终会在当前目录下打包生成一个插件ApiScan-0.0.1.vsix。结果如下:
|
||||
每个选项都选择y,然后回车,结果会在当前目录下打包生成一个插件ApiScan-0.0.1.vsix。结果如下:
|
||||
|
||||
kaihong1@ubuntu:~/napi_generator_gjj/hdc/api/api_scan_vs_plugin/src$ npx vsce package
|
||||
WARNING A 'repository' field is missing from the 'package.json' manifest file.
|
||||
@ -62,7 +62,7 @@
|
||||
|
||||
npx vsce package
|
||||
|
||||
每个选项都选择y,然后回车,最终会在当前目录下打包生成一个插件ApiScan-0.0.1.vsix。结果如下:
|
||||
每个选项都选择y,然后回车,结果会在当前目录下打包生成一个插件ApiScan-0.0.1.vsix。结果如下:
|
||||
|
||||
C:\napi_generator_GJJ\hdc\api\api_scan_vs_plugin\src>npx vsce package
|
||||
WARNING A 'repository' field is missing from the 'package.json' manifest file.
|
||||
|
@ -27,7 +27,7 @@ visual studio code 版本需1.62.0及以上。
|
||||
|
||||
![](../../figures/pic-plug-in-api-c++.png)
|
||||
|
||||
5、 工具打开API Scan窗口,扫描项目路径框填写将要扫描项目的绝对路径,结果输出路径框自动填写与扫描项目相同路径,使用者可以根据实际情况修改结果输出路径,然后点击ok。
|
||||
5、 工具打开API Scan窗口,扫描项目路径框填写将要扫描项目的路径(absolute path),结果输出路径框自动填写与扫描项目相同路径,使用者可以根据实际情况修改结果输出路径,然后点击ok。
|
||||
|
||||
![](../../figures/pic-api-frame.png)
|
||||
|
||||
|
@ -49,7 +49,7 @@ visual studio code 版本需1.62.0及以上。
|
||||
|
||||
![](../figures/pic-plug-in-import-service.png)
|
||||
|
||||
进入 TS 工具填写相应参数后点击Next , 生成.d.ts文件,并启动 NAPI 工具, NAPI工具是工具链中最后一个工具,NAPI工具的输入参数可以是TS工具的输出,填写完相应参数后,点击 Ok, 生成napi框架代码。
|
||||
进入 TS 工具填写相应参数后点击Next , 生成.d.ts文件,并启动 NAPI 工具, NAPI工具是工具链中结尾一个工具,NAPI工具的输入参数可以是TS工具的输出,填写完相应参数后,点击 Ok, 生成napi框架代码。
|
||||
|
||||
![](../figures/pic-plug-in-import-ts.png)
|
||||
|
||||
|
@ -144,7 +144,7 @@
|
||||
document.getElementById('napi').style.display = 'none';
|
||||
} else if (matchSubString(value) === 'gngen') {
|
||||
document.getElementById('api').style.display = 'none';
|
||||
document.getElementById('gn').style.display ='flex';
|
||||
document.getElementById('gn').style.display = 'flex';
|
||||
document.getElementById('service').style.display = 'none';
|
||||
document.getElementById('ts').style.display = 'none';
|
||||
document.getElementById('napi').style.display = 'none';
|
||||
@ -152,7 +152,7 @@
|
||||
document.getElementById('api').style.display = 'none';
|
||||
document.getElementById('gn').style.display = 'none';
|
||||
document.getElementById('service').style.display = 'flex';
|
||||
document.getElementById('ts').style.display='none';
|
||||
document.getElementById('ts').style.display = 'none';
|
||||
document.getElementById('napi').style.display = 'none';
|
||||
} else if (matchSubString(value) === 'tsgen') {
|
||||
document.getElementById('api').style.display = 'none';
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
npx vsce package
|
||||
|
||||
每个选项都选择y,然后回车,最终会在当前目录下打包生成一个插件gn-0.0.1.vsix。结果如下:
|
||||
每个选项都选择y,然后回车,结果会在当前目录下打包生成一个插件gn-0.0.1.vsix。结果如下:
|
||||
|
||||
kaihong1@ubuntu:~/napi_generator_gjj/src/vscode_plugin/cmake2gn/gn_vs_plugin/src$ npx vsce package
|
||||
WARNING A 'repository' field is missing from the 'package.json' manifest file.
|
||||
@ -61,7 +61,7 @@
|
||||
|
||||
npx vsce package
|
||||
|
||||
每个选项都选择y,然后回车,最终会在当前目录下打包生成一个插件gn-0.0.1.vsix。结果如下:
|
||||
每个选项都选择y,然后回车,结果会在当前目录下打包生成一个插件gn-0.0.1.vsix。结果如下:
|
||||
|
||||
C:\napi_generator_GJJ\src\vscode_plugin\cmake2gn\gn_vs_plugin\src>npx vsce package
|
||||
WARNING A 'repository' field is missing from the 'package.json' manifest file.
|
||||
|
@ -31,13 +31,15 @@ function replaceAll(s, sfrom, sto) {
|
||||
}
|
||||
|
||||
function detectPlatform() {
|
||||
let result = '';
|
||||
if (os.type() === 'Windows_NT') {
|
||||
return 'win';
|
||||
result = 'win';
|
||||
} else if (os.type() === 'Darwin') {
|
||||
return 'mac';
|
||||
result = 'mac';
|
||||
} else if (os.type() === 'Linux') {
|
||||
return 'Linux';
|
||||
result = 'Linux';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkFileError(ifname) {
|
||||
|
@ -297,7 +297,9 @@
|
||||
|
||||
function selectBlur(inputObj) {
|
||||
var t = inputObj;
|
||||
setTimeout(() => {t.nextSibling.nextSibling.style.display = 'none';}, 150);
|
||||
setTimeout(() => {
|
||||
t.nextSibling.nextSibling.style.display = 'none';
|
||||
}, 150);
|
||||
}
|
||||
|
||||
function selectFocus(inputObj) {
|
||||
|
@ -66,7 +66,7 @@ bool func1(std::string& v1, std::string& out)
|
||||
|
||||
### 集成方法
|
||||
|
||||
为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。
|
||||
为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。
|
||||
|
||||
把工具的生成代码集成到OpenHarmony的具体操作步骤,可以左键单击以下链接了解:
|
||||
|
||||
|
@ -121,7 +121,7 @@ function register(context, command) {
|
||||
let result = {
|
||||
msg: 'selectInterPath',
|
||||
path: tt ? uri.fsPath : ''
|
||||
}
|
||||
};
|
||||
globalPanel.webview.postMessage(result);
|
||||
}
|
||||
});
|
||||
|
@ -31,13 +31,15 @@ function replaceAll(s, sfrom, sto) {
|
||||
}
|
||||
|
||||
function detectPlatform() {
|
||||
let result = '';
|
||||
if (os.type() === 'Windows_NT') {
|
||||
return 'win';
|
||||
result = 'win';
|
||||
} else if (os.type() === 'Darwin') {
|
||||
return 'mac';
|
||||
result = 'mac';
|
||||
} else if (os.type() === 'Linux') {
|
||||
return 'Linux';
|
||||
result = 'Linux';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkFileError(ifname) {
|
||||
|
@ -31,13 +31,15 @@ function replaceAll(s, sfrom, sto) {
|
||||
}
|
||||
|
||||
function detectPlatform() {
|
||||
let result = '';
|
||||
if (os.type() === 'Windows_NT') {
|
||||
return 'win';
|
||||
result = 'win';
|
||||
} else if (os.type() === 'Darwin') {
|
||||
return 'mac';
|
||||
result = 'mac';
|
||||
} else if (os.type() === 'Linux') {
|
||||
return 'Linux';
|
||||
result = 'Linux';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkFileError(ifname) {
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
npx vsce package
|
||||
|
||||
每个选项都选择y,然后回车,最终会在当前目录下打包生成一个插件service-gen-0.0.1.vsix。结果如下:
|
||||
每个选项都选择y,然后回车,结果会在当前目录下打包生成一个插件service-gen-0.0.1.vsix。结果如下:
|
||||
|
||||
kaihong1@ubuntu:~/napi_generator_gjj/src/vscode_plugin/h2sa/service_vs_plugin/src$ npx vsce package
|
||||
This extension consists of 3282 files, out of which 1547 are JavaScript files. For performance reasons, you should bundle your extension: https://aka.ms/vscode-bundle-extension . You should also exclude unnecessary files by adding them to your .vscodeignore: https://aka.ms/vscode-vscodeignore
|
||||
@ -54,7 +54,7 @@
|
||||
|
||||
npx vsce package
|
||||
|
||||
每个选项都选择y,然后回车,最终会在当前目录下打包生成一个插件service-gen-0.0.1.vsix。结果如下:
|
||||
每个选项都选择y,然后回车,结果会在当前目录下打包生成一个插件service-gen-0.0.1.vsix。结果如下:
|
||||
|
||||
C:\napi_generator_GJJ\src\vscode_plugin\h2sa\service_vs_plugin\src>npx vsce package
|
||||
This extension consists of 3281 files, out of which 1547 are JavaScript files. For performance reasons, you should bundle your extension: https://aka.ms/vscode-bundle-extension . You should also exclude unnecessary files by adding them to your .vscodeignore: https://aka.ms/vscode-vscodeignore
|
||||
|
@ -31,7 +31,7 @@ visual studio code 版本需1.62.0及以上。
|
||||
|
||||
![](../figures/pic-plug-in-gen-c++.png)
|
||||
|
||||
6、 工具打开 Service Generate Frame窗口,.h文件选择框默认填写被操作的.h文件的绝对路径;输出路径选择框默认填写.h文件所在文件夹路径,可修改为任意路径;serviceID范围是1-16777215之间的整数,超出范围会提示错误,填入正确的serviceID,然后点击ok。
|
||||
6、 工具打开 Service Generate Frame窗口,.h文件选择框默认填写被操作的.h文件的路径(absolute path);输出路径选择框默认填写.h文件所在文件夹路径,可修改为任意路径;serviceID范围是1-16777215之间的整数,超出范围会提示错误,填入正确的serviceID,然后点击ok。
|
||||
|
||||
![](../figures/pic-service-frame.png)
|
||||
|
||||
|
@ -37,7 +37,7 @@ function search(ss, data) {
|
||||
|
||||
function match(ss, data) {
|
||||
let tt = search(ss, data);
|
||||
if (tt !== null && tt.regs[0][0] == 0) {
|
||||
if (tt !== null && tt.regs[0][0] === 0) {
|
||||
return tt;
|
||||
}
|
||||
return null;
|
||||
|
@ -31,13 +31,15 @@ function replaceAll(s, sfrom, sto) {
|
||||
}
|
||||
|
||||
function detectPlatform() {
|
||||
let result = '';
|
||||
if (os.type() === 'Windows_NT') {
|
||||
return 'win';
|
||||
result = 'win';
|
||||
} else if (os.type() === 'Darwin') {
|
||||
return 'mac';
|
||||
result = 'mac';
|
||||
} else if (os.type() === 'Linux') {
|
||||
return 'Linux';
|
||||
result = 'Linux';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function checkFileError(ifname) {
|
||||
|
@ -6,7 +6,7 @@ NAPI工具的测试主要分为功能测试、单元测试两种,其目的是
|
||||
## 目录
|
||||
|
||||
├── napi_generator # NAPI框架代码生成工具
|
||||
│ ├── ... # 其他文件夹
|
||||
│ ├── ... # 其它文件夹
|
||||
│ ├── test # 测试用例
|
||||
│ | ├── unittest # UT测试用例
|
||||
│ | ├── storytest # ST测试用例
|
||||
|
@ -7,9 +7,9 @@
|
||||
## 目录
|
||||
|
||||
├── napi_generator # NAPI框架代码生成工具
|
||||
│ ├── ... # 其他文件夹
|
||||
│ ├── ... # 其它文件夹
|
||||
│ ├── test # 测试用例
|
||||
│ | ├── ... # 其他文件夹
|
||||
│ | ├── ... # 其它文件夹
|
||||
│ | ├── storytest # story测试代码
|
||||
│ | | ├── test_$ # ts文件输入以$开头的函数测试用例
|
||||
│ | | ├── test_[] # ts文件输入[]格式数组测试用例
|
||||
|
@ -8,9 +8,9 @@
|
||||
|
||||
├── napi_generator # NAPI框架代码生成工具
|
||||
│ ├── src # 工具源码
|
||||
│ ├── ... # 其他文件夹
|
||||
│ ├── ... # 其它文件夹
|
||||
│ ├── test # 测试用例
|
||||
│ | ├── ... # 其他文件夹
|
||||
│ | ├── ... # 其它文件夹
|
||||
│ | ├── unittest # 单元测试代码
|
||||
│ | | ├── analyze.test.js #执行gen/analyze目录下函数测试用例
|
||||
│ | | ├── basic.d.ts* #基础函数模板
|
||||
|
Loading…
Reference in New Issue
Block a user