fix(autojs): bridges.call() convert boolean to java.lang.Boolean

This commit is contained in:
hyb1996
2018-04-18 16:36:40 +08:00
parent 278cfd2272
commit 97198ad668
7 changed files with 771 additions and 105 deletions

View File

@@ -0,0 +1,63 @@
var bridges = {};
bridges.call = function (func, target, args) {
var arr = [];
var len = args.length;
for (var i = 0; i < len; i++) {
arr.push(wrap(args[i]));
}
return func.apply(target, arr);
};
function wrap(value){
if(!(typeof(value) == 'object' && 'getClass' in value && util.isFunction(value.getClass))){
return value;
}
var c = value.getClass();
if(!('getName' in c && util.isFunction(c.getName))){
return value;
}
var name = c.getName();
if(name == 'java.lang.Boolean'){
return Boolean(value);
}
//TODO: is is necessary?
if(name == 'java.lang.Integer' || name == 'java.lang.Long' || name == 'java.lang.Double'
|| name == 'java.lang.Float'){
return Number(value);
}
return value;
}
bridges.asArray = function (list) {
var arr = [];
for (var i = 0; i < list.size(); i++) {
arr.push(list.get(i));
}
for (var key in list) {
if (typeof (key) == 'number')
continue;
var v = list[key];
if (typeof (v) == 'function') {
arr[key] = v.bind(list);
} else {
arr[key] = v;
}
}
return arr;
};
bridges.toArray = function (iterable) {
var iterator = iterable.iterator();
var arr = [];
while (iterator.hasNext()) {
arr.push(iterator.next());
}
return arr;
};
bridges.toString = function (o) {
return String(o);
};
module.exports = bridges;