mirror of
https://github.com/adelphes/android-dev-ext.git
synced 2025-12-23 09:59:25 +00:00
Improve expression parsing
Allow ':super' to be used as a member. Search super types when locating field members. Fixes #16
This commit is contained in:
@@ -721,6 +721,15 @@ Debugger.prototype = {
|
||||
});
|
||||
},
|
||||
|
||||
getsuperinstance: function (local, extra) {
|
||||
return this.getsupertype(local, {local,extra})
|
||||
.then(function (supertypeinfo, x) {
|
||||
var castobj = Object.assign({}, x.local);
|
||||
castobj.type = supertypeinfo;
|
||||
return $.Deferred().resolveWith(this, [castobj, x.extra]);
|
||||
});
|
||||
},
|
||||
|
||||
createstring: function (string, extra) {
|
||||
return this.ensureconnected({ string: string, extra: extra })
|
||||
.then(function (x) {
|
||||
@@ -838,6 +847,25 @@ Debugger.prototype = {
|
||||
});
|
||||
},
|
||||
|
||||
getFieldValue: function(objvar, fieldname, includeInherited, extra) {
|
||||
const findfield = x => {
|
||||
return this.getfieldvalues(x.objvar, x)
|
||||
.then((fields, x) => {
|
||||
var field = fields.find(f => f.name === x.fieldname);
|
||||
if (field) return $.Deferred().resolveWith(this,[field,x.extra]);
|
||||
if (!x.includeInherited || x.objvar.type.signature==='Ljava/lang/Object;')
|
||||
return $.Deferred().rejectWith(this,[new Error('No such field: '+x.fieldname), x.extra]);
|
||||
// search supertype
|
||||
return this.getsuperinstance(x.objvar, x)
|
||||
.then((superobjvar,x) => {
|
||||
x.objvar = superobjvar;
|
||||
return x.findfield(x);
|
||||
});
|
||||
});
|
||||
}
|
||||
return findfield({findfield, objvar, fieldname, includeInherited, extra});
|
||||
},
|
||||
|
||||
getExceptionLocal: function (ex_ref_value, extra) {
|
||||
var x = {
|
||||
ex_ref_value: ex_ref_value,
|
||||
|
||||
Reference in New Issue
Block a user