Skip to content

Commit

Permalink
Merge pull request layabox#141 from Lurenyiabc/master
Browse files Browse the repository at this point in the history
Support :GetAccessor & SetAccessor
  • Loading branch information
GuoLei1990 authored Nov 28, 2019
2 parents 3844adf + 7643cc8 commit e720d12
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 34 deletions.
16 changes: 16 additions & 0 deletions src/layaAir/Laya.ts
Original file line number Diff line number Diff line change
Expand Up @@ -431,21 +431,37 @@ if (win.Laya) {
} else
win.Laya = Laya;

/**@internal */
export var __init = Laya.__init;
/**@internal */
export var init = Laya.init;
/**@internal */
export var stage: Stage;
/**@internal */
export var systemTimer: Timer;
/**@internal */
export var startTimer: Timer;
/**@internal */
export var physicsTimer: Timer;
/**@internal */
export var updateTimer: Timer;
/**@internal */
export var lateTimer: Timer;
/**@internal */
export var timer: Timer;
/**@internal */
export var loader: LoaderManager;
/**@internal */
export var version = Laya.version;
/**@internal */
export var render: Render;
/**@internal */
export var isWXOpenDataContext: boolean;
/**@internal */
export var isWXPosMsg: boolean;
/**@internal */
export var alertGlobalError = Laya.alertGlobalError;
/**@internal */
export var enableDebugPanel = Laya.enableDebugPanel;

export function _static(_class: any, def: any) {
Expand Down
122 changes: 90 additions & 32 deletions src/publishTool/emiter.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ class emiter {
"MethodSignature": this.emitMethodSig,
"PropertySignature": this.emitPropertySing,
"ImportEqualsDeclaration": this.emitImportEquals,
"EnumDeclaration": this.emitEnum //枚举导出
"EnumDeclaration": this.emitEnum,
"GetAccessor": this.emitGetset,
"SetAccessor": this.emitGetset //get set解析
};
}
static get BaseURL() {
Expand Down Expand Up @@ -256,25 +258,20 @@ class emiter {
emitMethodSig(node) {
let methodstr = "\t\tfunction ";
let tsMethod = "\t\t";
// let paramstr = "";
// if(node.parameters&&node.parameters.length){
// for(let i = 0;i<node.parameters.length;i++){
// let param = node.parameters[i] as ts.ParameterDeclaration;
// paramstr += (i?",":"") + param.name.getText() + ":" + this.emitType(param.type);
// }
// }
// methodstr += node.name.getText() + "(" + paramstr + "):" + this.emitType(node.type);
let paramstr = "";
let tsparam = "";
if (node.parameters) {
for (let i = 0; i < node.parameters.length; i++) {
let param = node.parameters[i];
let isdotdotdot = false;
if (param.dotDotDotToken)
isdotdotdot = true;
paramstr += (i ? "," : "") + (isdotdotdot ? "..." : "") + param.name.getText() + (isdotdotdot ? "" : (":" + this.emitType(param.type) + (param.questionToken ? " = null" : "")));
tsparam += (i ? "," : "") + (isdotdotdot ? "..." : "") + param.name.getText() + (param.questionToken ? "?" : "") + ":" + this.emitTsType(param.type);
}
// for(let i = 0;i<node.parameters.length;i++){
// let param = node.parameters[i] as ts.ParameterDeclaration;
// let isdotdotdot = false;
// if(param.dotDotDotToken)
// isdotdotdot = true;
// paramstr += (i ? "," : "") + (isdotdotdot?"...":"") + param.name.getText() + (isdotdotdot?"":( ":" + this.emitType(param.type) + (param.questionToken ? " = null" : "")));
// tsparam += (i ? "," : "") + (isdotdotdot?"...":"") + param.name.getText() + (param.questionToken ? "?" : "") + ":" + this.emitTsType(param.type);
// }
let result = this.emitParameters(node.parameters);
paramstr += result[0];
tsparam += result[1];
}
methodstr += node.name.getText() + "(" + paramstr + "):" + this.emitType(node.type) + ";";
tsMethod += node.name.getText() + "(" + tsparam + "):" + this.emitTsType(node.type) + ";";
Expand Down Expand Up @@ -382,15 +379,18 @@ class emiter {
//检测是否重写接口
if (note.indexOf("@implements") != -1)
isImplements = true;
if (node.parameters) {
for (let i = 0; i < node.parameters.length; i++) {
let param = node.parameters[i];
let isdotdotdot = false;
if (param.dotDotDotToken)
isdotdotdot = true;
paramstr += (i ? "," : "") + (isdotdotdot ? "..." : "") + param.name.getText() + (isdotdotdot ? "" : (":" + this.emitType(param.type) + (!isImplements && param.questionToken ? " = null" : "")));
tsparam += (i ? "," : "") + (isdotdotdot ? "..." : "") + param.name.getText() + (param.questionToken ? "?" : "") + ":" + this.emitTsType(param.type);
}
if (node.parameters) { //此处是特殊处理
// for(let i = 0;i<node.parameters.length;i++){
// let param = node.parameters[i] as ts.ParameterDeclaration;
// let isdotdotdot = false;
// if(param.dotDotDotToken)
// isdotdotdot = true;
// paramstr += (i ? "," : "") + (isdotdotdot?"...":"") + param.name.getText() + (isdotdotdot?"":( ":" + this.emitType(param.type) + (!isImplements&&param.questionToken ? " = null" : "")));
// tsparam += (i ? "," : "") + (isdotdotdot?"...":"") + param.name.getText() + (param.questionToken ? "?" : "") + ":" + this.emitTsType(param.type);
// }
let result = this.emitParameters(node.parameters, false, isImplements);
paramstr += result[0];
tsparam += result[1];
}
let nodetype = this.emitType(node.type);
methodstr += node.name.getText() + "(" + paramstr + "):" + nodetype + "{" + (["*", "void"].indexOf(nodetype) != -1 ? "" : ("\r\n\t\t\treturn null;\r\n\t\t")) + "}";
Expand All @@ -406,16 +406,71 @@ class emiter {
let tsstr = "";
let note = this.changeIndex(node, "\r\n\t\t");
if (node.parameters && node.parameters.length) {
for (let i = 0; i < node.parameters.length; i++) {
let param = node.parameters[i];
asstr += (i ? "," : "") + param.name.getText() + ":" + this.emitType(param.type) + " = undefined";
tsstr += (i ? "," : "") + param.name.getText() + (param.questionToken ? "?" : "") + ":" + this.emitTsType(param.type);
}
// for(let i = 0;i<node.parameters.length;i++){
// let param = node.parameters[i] as ts.ParameterDeclaration;
// asstr += (i?",":"") + param.name.getText() + ":" + this.emitType(param.type) + " = undefined";
// tsstr += (i?",":"") + param.name.getText() + ( param.questionToken?"?":"") + ":"+ this.emitTsType(param.type);
// }
let result = this.emitParameters(node.parameters, true);
asstr += result[0];
tsstr += result[1];
}
asstr = "\r\n\t\tpublic function " + node.parent.name.getText() + "(" + asstr + "){}\r\n";
tsstr = "\r\n\t\tconstructor(" + tsstr + ");\r\n";
return [note + asstr, note + tsstr];
}
/**
* 解析get set函数
* @param node
*/
emitGetset(node) {
let note = this.changeIndex(node, "\r\n\t\t");
let asstr = "";
let tsstr = "";
if (node.modifiers) {
for (let i = 0; i < node.modifiers.length; i++) {
let childnode = node.modifiers[i];
let type = ts.SyntaxKind[childnode.kind];
asstr += this.resolvingModifier(type, i, childnode);
tsstr += childnode.getText() + " ";
}
asstr += "function ";
}
else {
asstr += "public function ";
}
if (note.indexOf("@override") != -1) {
asstr = "override " + asstr;
}
let name = node.name.getText();
if (node.parameters.length) { //set
let result = this.emitParameters(node.parameters);
tsstr += "set " + name + "(" + result[1] + ");\r\n";
asstr += "set " + name + "(" + result[0] + "):void{}\r\n";
}
else {
//get
tsstr += "get " + name + "():" + this.emitTsType(node.type) + ";\r\n";
asstr += "get " + name + "():" + this.emitType(node.type) + "{return null;}\r\n";
}
return [note + "\t\t" + asstr, note + "\t\t" + tsstr];
}
/**
* 解析方法中的参数
* @param params
* @param isCon 是否是构造函数
*/
emitParameters(params, isCon = false, isImp = false) {
let asResult = "";
let tsResult = "";
let defaultStr = isCon ? " = undefined" : " = null";
for (let index = 0; index < params.length; index++) {
let element = params[index];
asResult += (index ? "," : "") + (element.dotDotDotToken ? "..." : "") + element.name.getText() + (element.dotDotDotToken ? "" : (":" + this.emitType(element.type) + ((!isImp && element.questionToken) || isCon ? defaultStr : "")));
tsResult += (index ? "," : "") + (element.dotDotDotToken ? "..." : "") + element.name.getText() + (element.questionToken ? "?" : "") + ":" + this.emitTsType(element.type);
}
return [asResult, tsResult];
}
/**
* 解析单个Modifier的类型
* @param type
Expand All @@ -440,6 +495,9 @@ class emiter {
else
str = "function get ";
}
else if (type == "PublicKeywordstatic") {
str = "public static ";
}
else {
str = "property todo " + type;
}
Expand Down Expand Up @@ -668,6 +726,7 @@ class emiter {
return "";
}
}
exports.emiter = emiter;
/**所有已经识别的没有准备的方法 */
emiter._typeArr = ["VariableStatement", "ExportDeclaration", "Uint16Array", "Float32Array",
"FunctionDeclaration", "loadItem"];
Expand All @@ -692,4 +751,3 @@ emiter.tsToasTypeObj = {
emiter.jscObj = {};
/**构成的d.ts数据 */
emiter.dtsData = "";
exports.emiter = emiter;
6 changes: 4 additions & 2 deletions src/publishTool/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Expand Down Expand Up @@ -32,7 +33,8 @@ class Main {
// this.tstoas("laya\\ani\\bone\\spine\\SpineSkeletonRenderer.d.ts",null,"laya\\ani\\bone\\spine");
// this.tstoas("laya\\d3\\core\\Transform3D.d.ts",null,"laya\\d3\\core\\");
// this.tstoas("laya\\html\\dom\\HTMLElement.d.ts", null, "laya\\html\\dom");
// this.tstoas("laya\\d3\\resource\\RenderTexture.d.ts",null,"laya\\d3\\resource");
// this.tstoas("laya\\ui\\ScaleBox.d.ts",null,"laya\\ui");
// this.tstoas("Laya.d.ts",null,"");
// this.tstoas("laya\\d3\\component\\SingletonList.d.ts",null,"laya\\d3\\component");
}
get BaseURL() {
Expand Down

0 comments on commit e720d12

Please sign in to comment.